123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244 |
- <template>
- <div
- class="ZTGlobal"
- style="width: 100%; padding: 1rem 1rem 0rem 1rem; color: white"
- >
- <el-row>
- <el-col :span="7">
- <span>广告牌名称:</span>
- </el-col>
- <el-col :span="17"
- ><el-input
- size="mini"
- type="text"
- placeholder="请输入广告牌名称"
- v-model="billboardModel.billboardName"
- ></el-input
- ></el-col>
- </el-row>
- <el-row>
- <el-col :span="7"><span>附属信息</span></el-col>
- <el-col :span="17">
- <el-input
- type="textarea"
- :autosize="{ minRows: 2, maxRows: 6 }"
- size="mini"
- v-model="billboardModel.remarks"
- ></el-input>
- </el-col>
- </el-row>
- <el-row>
- <el-col :span="7"> <span>广告类型:</span></el-col>
- <el-col :span="17">
- <el-cascader
- ref="billboardTypeCascader"
- size="mini"
- placeholder="请选择广告类型"
- v-model="billboardModel.billboardType"
- @change="changeBillboardType"
- :options="options"
- :show-all-levels="false"
- :props="{
- value: 'billboardType',
- label: 'billboardType',
- children: 'children',
- emitPath: false,
- }"
- ></el-cascader>
- <!-- <el-select
- placeholder="请选择广告类型"
- v-model="billboardModel.billboardType"
- >
- <el-option
- v-for="item in options"
- :key="item.value"
- :value="item.value"
- :label="item.label"
- >{{ item.label }}</el-option
- >
- </el-select> -->
- </el-col>
- </el-row>
- <div v-show="billboardReview.isAddModel">
- <!-- <el-row>
- <el-col :span="7"><span>选择广告牌样式: </span></el-col>
- <el-col :span="17">
- <div class="imgdomf" style="display: flex">
- <div
- v-for="thisbillboardModelRule in billboardModelRule"
- :key="thisbillboardModelRule"
- class="con-col imgdom hover_style"
- style="cursor: pointer"
- @click.stop="selectModeltemplate(thisbillboardModelRule)"
- >
- <a>{{ thisbillboardModelRule.templateName }}</a>
- <el-image
- style="width: 2rem; height: 2rem"
- :src="thisbillboardModelRule.thumbnailUrl"
- fit="fill"
- ></el-image>
- </div>
- </div>
- </el-col>
- </el-row> -->
- <el-row>
- <el-col :span="7"><span>添加广告模型:</span></el-col>
- <!-- <el-col :span="8">
- <el-switch
- size="mini"
- v-model="billboardReview.isAddModel"
- active-text="是"
- inactive-text="否"
- >
- </el-switch>
- </el-col> -->
- <el-col :span="17">
- <!-- v-if="
- selectbillboardModelRule &&
- selectbillboardModelRule.templateTopType == 'model'
- " -->
- <el-upload
- class="upload-demo"
- ref="upload"
- :action="uploadUrl"
- :on-remove="handleRemove"
- :on-success="handleAvatarSuccess"
- :before-remove="beforeRemove"
- :before-upload="beforeAvatarUpload"
- :on-change="handleFileChange"
- :on-exceed="handleExceed"
- :auto-upload="true"
- :multiple="false"
- accept=".zip"
- :limit="1"
- >
- <el-button size="small" type="primary">上传广告模型</el-button>
- <!-- <el-button
- style="margin-left: 10px"
- size="small"
- type="success"
- @click="submitUpload"
- >上传到服务器</el-button
- > -->
- <div slot="tip" class="el-upload__tip" style="color: #ffffff">
- 请上传包含gltf的zip文件,且不超过50M
- <br />不上传时,添加系统默认模型
- </div>
- </el-upload>
- <el-button
- size="mini"
- v-show="billboardReview.isAddModel"
- type="primary"
- @click="addModel()"
- >添加广告牌</el-button
- >
- </el-col>
- </el-row>
- <el-row>
- <el-col :span="7"><span>X坐标(度) </span></el-col>
- <el-col :span="17">
- <el-input-number
- name="x"
- v-model="billboardModel.x"
- size="mini"
- precision="6"
- :min="108.6"
- :max="110.5"
- @change="handleChange"
- step="0.000001"
- label="X坐标(度)"
- ></el-input-number
- ></el-col>
- </el-row>
- <el-row>
- <el-col :span="7"><span>Y坐标(度):</span></el-col>
- <el-col :span="17">
- <el-input-number
- name="y"
- v-model="billboardModel.y"
- size="mini"
- precision="6"
- :min="18.16"
- :max="18.7"
- @change="handleChange"
- step="0.000001"
- label="Y坐标(度)"
- ></el-input-number>
- </el-col>
- </el-row>
- <el-row>
- <el-col :span="7"> <span>Z坐标(米):</span></el-col>
- <el-col :span="17">
- <el-input-number
- name="z"
- v-model="billboardModel.z"
- size="mini"
- precision="2"
- :min="0"
- :max="100"
- step="0.1"
- @change="handleChange"
- label="Z坐标(米)"
- ></el-input-number>
- </el-col>
- </el-row>
- <el-row>
- <el-col :span="7"><span>X轴旋转角(度):</span></el-col>
- <el-col :span="17">
- <el-input-number
- name="rotateX"
- v-model="billboardModel.rotateX"
- size="mini"
- precision="1"
- :min="0"
- :max="360"
- step="0.1"
- @change="handleChange"
- label="X轴旋转角(度)"
- ></el-input-number
- ></el-col>
- </el-row>
- <el-row>
- <el-col :span="7"><span>Y轴旋转角(度):</span></el-col>
- <el-col :span="17">
- <el-input-number
- name="rotateY"
- v-model="billboardModel.rotateY"
- size="mini"
- precision="1"
- :min="0"
- :max="360"
- step="0.1"
- @change="handleChange"
- label="Y轴旋转角(度)"
- ></el-input-number
- ></el-col>
- </el-row>
- <el-row>
- <el-col :span="7"><span>Z轴旋转角(度):</span></el-col>
- <el-col :span="17">
- <el-input-number
- name="rotateZ"
- v-model="billboardModel.rotateZ"
- size="mini"
- precision="1"
- :min="0"
- :max="360"
- step="0.1"
- @change="handleChange"
- label="Z轴旋转角(度)"
- ></el-input-number
- ></el-col>
- </el-row>
- <!--顶部广告牌-->
- <div v-if="JSON.stringify(billboardModel.templateTop) != '{}'">
- <el-divider v-if="JSON.stringify(billboardModel.templateCentre) != '{}'"
- >广告牌面模型参数</el-divider
- >
- <el-divider v-else>广告模型参数</el-divider>
- <!--如果模型是广告牌类型-->
- <div
- v-if="
- selectbillboardModelRule &&
- selectbillboardModelRule.templateTopType == 'billboard'
- "
- >
- <el-row v-if="thisfileurl">
- <el-col :span="7"> <span>缩放比例:</span></el-col>
- <el-col :span="17">
- <el-input-number
- name="scaleL"
- v-model="billboardModel.templateTop.scaleL"
- size="mini"
- precision="2"
- :min="0"
- :max="100"
- step="0.1"
- @change="handleChange"
- label="缩放比例:"
- ></el-input-number>
- </el-col>
- </el-row>
- <el-row>
- <el-col :span="7"> <span>长(米):</span></el-col>
- <el-col :span="17">
- <el-input-number
- name="xL"
- v-model="billboardModel.templateTop.xL"
- size="mini"
- precision="2"
- :min="0"
- :max="100"
- step="0.1"
- @change="handleChange"
- label="长(米)"
- ></el-input-number>
- </el-col>
- </el-row>
- <el-row>
- <el-col :span="7"> <span>高(米):</span></el-col>
- <el-col :span="17">
- <el-input-number
- name="yL"
- v-model="billboardModel.templateTop.yL"
- size="mini"
- precision="2"
- :min="0"
- :max="100"
- step="0.1"
- @change="handleChange"
- label="高(米)"
- ></el-input-number>
- </el-col>
- </el-row>
- <el-row>
- <el-col :span="7"
- ><span style="color: aqua">厚度(米):</span></el-col
- >
- <el-col :span="17">
- <el-input-number
- name="zL"
- v-model="billboardModel.templateTop.zL"
- size="mini"
- precision="2"
- :min="0"
- :max="100"
- step="0.1"
- label="厚度(米)"
- ></el-input-number>
- </el-col>
- </el-row>
- </div>
- <!--如果模型是模型类型-->
- <div
- v-if="
- selectbillboardModelRule &&
- selectbillboardModelRule.templateTopType == 'model'
- "
- >
- <el-row>
- <el-col :span="7"> <span>缩放比例:</span></el-col>
- <el-col :span="17">
- <el-input-number
- name="scaleL"
- v-model="billboardModel.templateTop.scaleL"
- size="mini"
- precision="2"
- :min="0"
- :max="100"
- step="0.1"
- @change="handleChange"
- label="缩放比例:"
- ></el-input-number>
- </el-col>
- </el-row>
- <el-row>
- <el-col :span="7">
- <span style="color: aqua">长(米):</span></el-col
- >
- <el-col :span="17">
- <el-input-number
- name="xL"
- v-model="billboardModel.templateTop.xL"
- size="mini"
- precision="2"
- :min="0"
- :max="100"
- step="0.1"
- label="长(米)"
- ></el-input-number>
- </el-col>
- </el-row>
- <el-row>
- <el-col :span="7">
- <span style="color: aqua">高(米):</span></el-col
- >
- <el-col :span="17">
- <el-input-number
- name="yL"
- v-model="billboardModel.templateTop.yL"
- size="mini"
- precision="2"
- :min="0"
- :max="100"
- step="0.1"
- label="高(米)"
- ></el-input-number>
- </el-col>
- </el-row>
- <el-row>
- <el-col :span="7"
- ><span style="color: aqua">厚度(米):</span></el-col
- >
- <el-col :span="17">
- <el-input-number
- name="zL"
- v-model="billboardModel.templateTop.zL"
- size="mini"
- precision="2"
- :min="0"
- :max="100"
- step="0.1"
- label="厚度(米)"
- ></el-input-number>
- </el-col>
- </el-row>
- </div>
- <!--如果模型是box类型-->
- <div
- v-if="
- selectbillboardModelRule &&
- selectbillboardModelRule.templateTopType == 'box'
- "
- >
- <el-row v-if="thisfileurl">
- <el-col :span="7"> <span>缩放比例:</span></el-col>
- <el-col :span="17">
- <el-input-number
- name="scaleL"
- v-model="billboardModel.templateTop.scaleL"
- size="mini"
- precision="2"
- :min="0"
- :max="100"
- step="0.1"
- @change="handleChange"
- label="缩放比例:"
- ></el-input-number>
- </el-col>
- </el-row>
- <!--box-->
- <el-row>
- <el-col :span="7"> <span>长(米):</span></el-col>
- <el-col :span="17">
- <el-input-number
- name="xL"
- v-model="billboardModel.templateTop.xL"
- size="mini"
- precision="2"
- :min="0"
- :max="100"
- step="0.1"
- @change="handleChange"
- label="长(米)"
- ></el-input-number>
- </el-col>
- </el-row>
- <el-row>
- <el-col :span="7"> <span>高(米):</span></el-col>
- <el-col :span="17">
- <el-input-number
- name="yL"
- v-model="billboardModel.templateTop.yL"
- size="mini"
- precision="2"
- :min="0"
- :max="50"
- step="0.1"
- @change="handleChange"
- label=""
- >宽/高(米)</el-input-number
- >
- </el-col>
- </el-row>
- <el-row>
- <el-col :span="7"><span>厚度(米):</span></el-col>
- <el-col :span="17">
- <el-input-number
- name="zL"
- v-model="billboardModel.templateTop.zL"
- size="mini"
- precision="2"
- :min="0"
- :max="100"
- step="0.1"
- @change="handleChange"
- label="厚度(米)"
- ></el-input-number>
- </el-col>
- </el-row>
- <!--box-->
- </div>
- </div>
- <!--中部模型-->
- <div v-if="JSON.stringify(billboardModel.templateCentre) != '{}'">
- <el-divider>底座/立柱模型参数</el-divider>
- <!--如果模型是圆柱类型-->
- <div
- v-if="
- selectbillboardModelRule &&
- selectbillboardModelRule.templateCentreType == 'cylinder'
- "
- >
- <!--cylinder-->
- <el-row>
- <el-col :span="7"> <span>高(米):</span></el-col>
- <el-col :span="17">
- <el-input-number
- name="xL"
- v-model="billboardModel.templateCentre.yL"
- size="mini"
- precision="2"
- :min="0"
- :max="100"
- step="0.1"
- @change="handleChange"
- label="高(米)"
- ></el-input-number>
- </el-col>
- </el-row>
- <el-row>
- <el-col :span="7"> <span>半径(米):</span></el-col>
- <el-col :span="17">
- <el-input-number
- name="zL"
- v-model="billboardModel.templateCentre.rL"
- size="mini"
- precision="2"
- :min="0"
- :max="50"
- step="0.1"
- @change="handleChange"
- label=""
- >半径(米)</el-input-number
- >
- </el-col>
- </el-row>
- <!--cylinder-->
- </div>
- <!--如果模型是box类型-->
- <div
- v-if="
- selectbillboardModelRule &&
- selectbillboardModelRule.templateCentreType == 'box'
- "
- >
- <!--box-->
- <el-row>
- <el-col :span="7"> <span>长(米):</span></el-col>
- <el-col :span="17">
- <el-input-number
- name="xL"
- v-model="billboardModel.templateCentre.xL"
- size="mini"
- precision="2"
- :min="0"
- :max="100"
- step="0.1"
- @change="handleChange"
- label="长(米)"
- ></el-input-number>
- </el-col>
- </el-row>
- <el-row>
- <el-col :span="7"><span>宽(米):</span></el-col>
- <el-col :span="17">
- <el-input-number
- name="zL"
- v-model="billboardModel.templateCentre.zL"
- size="mini"
- precision="2"
- :min="0"
- :max="100"
- step="0.1"
- @change="handleChange"
- ></el-input-number>
- </el-col>
- </el-row>
- <el-row>
- <el-col :span="7"> <span>厚度(米):</span></el-col>
- <el-col :span="17">
- <el-input-number
- name="yL"
- v-model="billboardModel.templateCentre.yL"
- size="mini"
- precision="2"
- :min="0"
- :max="50"
- step="0.1"
- @change="handleChange"
- ></el-input-number>
- </el-col>
- </el-row>
- <!--box-->
- </div>
- </div>
- <!--底部模型-->
- <!-- 弃用 -->
- <div v-if="JSON.stringify(billboardModel.templateBottom) != '{}'">
- <el-divider>底部模型参数</el-divider>
- <!--如果模型是box类型-->
- <div
- v-if="
- selectbillboardModelRule &&
- selectbillboardModelRule.templateBottomType == 'box'
- "
- >
- <!--box-->
- <el-row>
- <el-col :span="7"> <span>长(米):</span></el-col>
- <el-col :span="17">
- <el-input-number
- name="xL"
- v-model="billboardModel.templateBottom.xL"
- size="mini"
- precision="2"
- :min="0"
- :max="100"
- step="0.1"
- @change="handleChange"
- label="长(米)"
- ></el-input-number>
- </el-col>
- </el-row>
- <el-row>
- <el-col :span="7"> <span>宽/高(米):</span></el-col>
- <el-col :span="17">
- <el-input-number
- name="yL"
- v-model="billboardModel.templateBottom.yL"
- size="mini"
- precision="2"
- :min="0"
- :max="50"
- step="0.1"
- @change="handleChange"
- label=""
- >宽/高(米)</el-input-number
- >
- </el-col>
- </el-row>
- <el-row>
- <el-col :span="7"><span>厚度(米):</span></el-col>
- <el-col :span="17">
- <el-input-number
- name="zL"
- v-model="billboardModel.templateBottom.zL"
- size="mini"
- precision="2"
- :min="0"
- :max="100"
- step="0.1"
- @change="handleChange"
- label="厚度(米)"
- ></el-input-number>
- </el-col>
- </el-row>
- <!--box-->
- </div>
- </div>
- <!--附加参数-->
- <div v-if="billboardReview && billboardReview.AttachedData">
- <el-divider>附加参数</el-divider>
- <!--如果模型是box类型-->
- <div>
- <el-row
- v-for="AttachedDataItem in billboardReview.AttachedData"
- :key="AttachedDataItem.key"
- >
- <el-col :span="7">
- <span>{{ AttachedDataItem.value }}:</span></el-col
- >
- <el-col
- :span="17"
- v-if="
- AttachedDataItem.selectData &&
- AttachedDataItem.selectData.length > 0
- "
- >
- <el-select
- v-model="billboardModel.AttachedData[AttachedDataItem.key]"
- placeholder="请选择"
- >
- <el-option
- v-for="item in AttachedDataItem.selectData"
- :key="item.value"
- :label="item.label"
- :value="item.value"
- >
- </el-option>
- </el-select>
- </el-col>
- <el-col v-else :span="17">
- <el-input
- v-model="billboardModel.AttachedData[AttachedDataItem.key]"
- placeholder="请输入内容"
- ></el-input>
- </el-col>
- </el-row>
- </div>
- </div>
- </div>
- <el-row>
- <el-col :span="24">
- <span
- >注意:当前视角为保存完成后定位显示视角,请确保当前广告牌观察视角为最佳视角,保存即可
- </span>
- </el-col>
- </el-row>
- <el-row>
- <div style="display: inline-flex">
- <el-button size="mini" type="primary" @click="saveMode()"
- >保存</el-button
- >
- <el-button size="mini" @click="cancle()">取消</el-button>
- </div>
- </el-row>
- </div>
- </template>
- <script>
- import { Image } from "element-ui";
- import { v4 as uuidv4 } from "uuid";
- import { addBillboardModelList } from "@/api/zt/ztApi.js";
- /**
- * 添加的模型集合
- */
- let modelList = [];
- export default {
- props: {
- layerid: {
- type: String,
- default: "",
- },
- project: {
- type: String,
- default: "",
- },
- info: {
- type: Object,
- default: () => {
- return {};
- },
- },
- lydata: {
- type: Object,
- default: () => {
- return {};
- },
- },
- lyoption: {
- type: Object,
- default: () => {
- return {};
- },
- },
- },
- data() {
- return {
- billboardModel: {
- id: "",
- billboardInfoId: "",
- billboardName: "",
- billboardType: "",
- x: 109.56047,
- y: 18.36254,
- z: 3,
- rotateX: 0,
- rotateY: 0,
- rotateZ: 90,
- ReviewStatus: "",
- ReviewComments: "",
- isAddModel: false,
- remarks: "",
- template: {},
- templateTop: {},
- templateCentre: {},
- templateBottom: {},
- AttachedData: {},
- },
- options: [],
- /**
- * 编辑句柄
- */
- handlerPoint: null,
- /**
- * 当前编辑模型
- */
- currentEntity: null,
- point3D: null,
- GUID: "",
- billboardReview: { isAddModel: false, ModelType: "box", modelurl: "" },
- billboardModelRule: [],
- selectbillboardModelRule: null,
- uploadUrl: window.ZTaxiosURI + "/uploadFile/uploadZipFile",
- thisfileurl: "",
- fileList: [],
- };
- },
- watch: {},
- mounted() {
- this.getGGLX();
- },
- methods: {
- submitUpload() {
- //文件大小校验
- this.fileList.forEach((file) => {
- const isLt2M = file.size / 1024 / 1024 < 10;
- if (!isLt2M) {
- this.$message.error("图片大小不能超过 2MB!");
- return false;
- }
- });
- //校验添加文件完整性
- let gltffile = this.fileList.find((c) => c.name.includes(".gltf"));
- debugger;
- if (gltffile) {
- try {
- var reader = new FileReader();
- reader.onload = function () {
- if (reader.result) {
-
- //打印文件内容
- if (reader.result) {
- let contentJson = JSON.parse(reader.result);
- }
- } else {
- //清除
- this.$refs.upload.clearFiles();
- this.$message.error("gltf文件读取失败!");
- }
- };
- reader.readAsText(gltffile.raw);
- } catch (error) {
- console.log(error);
- //清除
- this.$refs.upload.clearFiles();
- this.$message.error("上传文件出现意外的错误!");
- }
- // this.$refs.upload.submit();
- } else {
- this.$message.error("请上传gltf主文件!");
- //清除
- this.$refs.upload.clearFiles();
- }
- },
- handleFileChange(file, fileList) {
- this.fileList = fileList;
- },
- //文件列表移除文件时的钩子
- handleRemove(file, fileList) {
- console.log(file, fileList);
- },
- //文件列表超出最大文件个数回调
- handleExceed() {
- this.$message.error("请先删除已上传的文件,再上传!");
- },
- // 删除确认回调
- beforeRemove(file, fileList) {
- return true; //this.$confirm(`确定移除 ${file.name}?`);
- },
- //文件上传前回调
- beforeAvatarUpload(file) {
- const isLt2M = file.size / 1024 / 1024 < 50;
- if (!isLt2M) {
- this.$message.error("文件大小不能超过 50MB!");
- return false;
- }
- return true;
- },
- //上传成功回调
- handleAvatarSuccess(res, file) {
- console.log(res);
- if (res.data.url.includes(".gltf")) {
- this.thisfileurl = res.data.url;
- } else {
- this.$message.error("请上传包含gltf文件的zip压缩包!");
- this.$refs.upload.clearFiles();
- }
- },
- //过滤广告类型
- getGGLX() {
- // if (this.project.dataurl) {
- // this.options = window.billboardReviewList.filter(
- // (c) => c.id == "wew1" || c.id == "wew2sdfk32"
- // );
- // } else {
- // this.options = window.billboardReviewList.filter((c) => c.id != "wew1");
- // }
- // 所有
- var sdf = window.billboardReviewList;
- //如果不是报建模型 去除报建类型
- if (!this.project.dataurl) {
- sdf = this.filterTreeByReportBuilding(sdf);
- }
- this.options = sdf;
- },
- filterTreeByReportBuilding(tree) {
- const treeArray = Array.isArray(tree) ? tree : [tree];
- return treeArray
- .filter(
- (node) => !node.isReportBuilding && node.isReportBuilding != true
- )
- .map((node) => {
- // 复制当前节点,避免修改原数据
- const newNode = { ...node };
- // 递归过滤子节点
- if (newNode.children && newNode.children.length > 0) {
- newNode.children = this.filterTreeByReportBuilding(
- newNode.children
- );
- }
- return newNode;
- });
- },
- /**
- * 点击添加位置
- */
- addModel() {
- var that = this;
- this.removeModel();
- if (modelList.length > 0) {
- for (let index = 0; index < modelList.length; index++) {
- const element = modelList[index];
- viewer.entities.removeById(element.id);
- }
- modelList = [];
- }
- if (that.billboardReview && that.billboardReview.ModelType) {
- that.TemplateDefaultValues(that.billboardReview.ModelType);
- }
- if (that.thisfileurl) {
- that.billboardModel.template.isImportModel = "true";
- debugger;
- }
- viewer._container.style.cursor = "pointer";
- that.GUID = uuidv4();
- that.handlerPoint = new Cesium.ScreenSpaceEventHandler(viewer.canvas);
- //todo:在显示地形情况下点击创建点
- var imageurl = "../../../../static/ModelData/billboard/1.jpg";
- var modelurl = "../../../../static/ModelData/billboard/box.gltf";
- that.handlerPoint.setInputAction(function (event) {
- // // 使用场景的pick方法获取点击位置的实体
- // var pickedObject = viewer.scene.pick(event.position);
- // // 检查是否点击到了实体
- // if (
- // scene.pickPositionSupported &&
- // Cesium.defined(pickedObject) &&
- // pickedObject.primitive
- // ) {
- // debugger;
- // }
- var newposition = viewer.scene.pickPosition(event.position); //获取到地形图上面的坐标
- var orientation = Cesium.Transforms.headingPitchRollQuaternion(
- newposition,
- new Cesium.HeadingPitchRoll(
- Cesium.Math.toRadians(that.billboardModel.rotateZ),
- Cesium.Math.toRadians(that.billboardModel.rotateY),
- Cesium.Math.toRadians(that.billboardModel.rotateX)
- )
- );
- var coordinate = Cesium.Cartographic.fromCartesian(newposition);
- var longitude = Cesium.Math.toDegrees(coordinate.longitude);
- var latitude = Cesium.Math.toDegrees(coordinate.latitude);
- var height = coordinate.height;
- that.billboardModel.x = longitude;
- that.billboardModel.y = latitude;
- that.billboardModel.z = height;
- // var newPosition = Cesium.Cartesian3.fromDegrees(longitude, latitude, height);
- if (that.billboardReview && that.billboardReview.ModelType) {
- var sd = that.billboardReview.ModelType;
- switch (sd) {
- //矩形广告
- case "rectangleBillboard":
- that.billboardModel.templateTop.templateType =
- that.selectbillboardModelRule.templateTopType;
- //计算当前实体的xyz
- that.billboardModel.templateTop.x = that.billboardModel.x;
- that.billboardModel.templateTop.y = that.billboardModel.y;
- if (that.billboardModel.template.isImportModel == "true") {
- that.billboardModel.templateTop.z = that.billboardModel.z;
- } else {
- that.billboardModel.templateTop.z =
- that.billboardModel.z +
- that.billboardModel.templateTop.yL / 2;
- }
- var p = Cesium.Cartesian3.fromDegrees(
- that.billboardModel.templateTop.x,
- that.billboardModel.templateTop.y,
- that.billboardModel.templateTop.z
- );
- if (that.billboardModel.template.isImportModel == "true") {
- var url = that.billboardModelRule.templateTopUrl || modelurl;
- if (that.thisfileurl) {
- url = window.ZTaxiosURI + that.thisfileurl;
- that.selectbillboardModelRule.templateTopUrl =
- that.thisfileurl;
- }
-
- var entity = viewer.entities.add({
- id: "top_billboard_" + that.GUID,
- name: "gltf",
- show: true,
- position: p,
- /**
- * 模型
- */
- model: {
- uri: url,
- scale: that.billboardModel.templateTop.scaleL,
- },
- orientation: orientation,
- });
- modelList.push(entity);
- } else {
- var topentity = viewer.entities.add({
- id: "top_billboard_" + that.GUID,
- name: "gltf",
- show: true,
- position: p,
- /**
- * 长方体
- */
- box: {
- dimensions: new Cesium.Cartesian3(
- that.billboardModel.templateTop.xL,
- that.billboardModel.templateTop.zL,
- that.billboardModel.templateTop.yL
- ),
- show: true,
- material: Cesium.Color.LIGHTGREEN,
- },
- orientation: orientation,
- });
- modelList.push(topentity);
- }
- break;
- // 立杆型广告
- case "postsBillboard":
- that.billboardModel.templateCentre.templateType =
- that.selectbillboardModelRule.templateCentreType;
- that.billboardModel.templateCentre.x = that.billboardModel.x;
- that.billboardModel.templateCentre.y = that.billboardModel.y;
- that.billboardModel.templateCentre.z =
- that.billboardModel.z +
- that.billboardModel.templateCentre.yL / 2;
- if (that.billboardModel.template.isImportModel != "true") {
- var c_p = Cesium.Cartesian3.fromDegrees(
- that.billboardModel.templateCentre.x,
- that.billboardModel.templateCentre.y,
- that.billboardModel.templateCentre.z
- );
- var Centreentity = viewer.entities.add({
- id: "Centre_billboard_" + that.GUID,
- name: "gltf",
- show: true,
- position: c_p,
- /**
- * 圆柱
- */
- cylinder: {
- length: that.billboardModel.templateCentre.yL, //圆柱体长度
- topRadius: that.billboardModel.templateCentre.rL, //圆柱顶部半径
- bottomRadius: that.billboardModel.templateCentre.rL, //圆柱体底部半径
- material: Cesium.Color.LIGHTGREEN,
- shadows: Cesium.ShadowMode.DISABLED, //指定圆柱体是否从每个光源投射或接收阴影
- },
- orientation: Cesium.Transforms.headingPitchRollQuaternion(
- newposition,
- new Cesium.HeadingPitchRoll(
- Cesium.Math.toRadians(that.billboardModel.rotateZ),
- Cesium.Math.toRadians(0),
- Cesium.Math.toRadians(0)
- )
- ),
- });
- modelList.push(Centreentity);
- }
- that.billboardModel.templateTop.templateType =
- that.selectbillboardModelRule.templateTopType;
- //计算当前实体的xyz
- that.billboardModel.templateTop.x = that.billboardModel.x;
- that.billboardModel.templateTop.y = that.billboardModel.y;
- if (that.billboardModel.template.isImportModel == "true") {
- that.billboardModel.templateTop.z = that.billboardModel.z;
- } else {
- that.billboardModel.templateTop.z =
- that.billboardModel.templateCentre.z +
- that.billboardModel.templateCentre.yL / 2 +
- that.billboardModel.templateTop.yL / 2;
- }
- var t_p = Cesium.Cartesian3.fromDegrees(
- that.billboardModel.templateTop.x,
- that.billboardModel.templateTop.y,
- that.billboardModel.templateTop.z
- );
- if (that.billboardModel.template.isImportModel == "true") {
- var url = that.billboardModelRule.templateTopUrl || modelurl;
- if (that.thisfileurl) {
- url = window.ZTaxiosURI + that.thisfileurl;
- that.selectbillboardModelRule.templateTopUrl =
- that.thisfileurl;
- }
-
- var topentity = viewer.entities.add({
- id: "top_billboard_" + that.GUID,
- name: "gltf",
- show: true,
- position: t_p,
- /**
- * 模型
- */
- model: {
- uri: url,
- scale: that.billboardModel.templateTop.scaleL,
- },
- orientation: orientation,
- });
- modelList.push(topentity);
- } else {
- var topentity = viewer.entities.add({
- id: "top_billboard_" + that.GUID,
- name: "gltf",
- show: true,
- position: t_p,
- /**
- * 矩形
- */
- box: {
- dimensions: new Cesium.Cartesian3(
- that.billboardModel.templateTop.xL,
- that.billboardModel.templateTop.zL,
- that.billboardModel.templateTop.yL
- ),
- material: Cesium.Color.LIGHTGREEN,
- // outline: false,
- // outlineColor: Cesium.Color.SPRINGGREEN,
- // outlineWidth: 1,
- },
- orientation: orientation,
- });
- modelList.push(topentity);
- }
- break;
- //底座型立杆广告
- case "ColumnWithaseBillboard":
- that.billboardModel.templateCentre.templateType =
- that.selectbillboardModelRule.templateBottomType;
- //计算当前实体的xyz
- that.billboardModel.templateCentre.x = that.billboardModel.x;
- that.billboardModel.templateCentre.y = that.billboardModel.y;
- that.billboardModel.templateCentre.z =
- that.billboardModel.z +
- that.billboardModel.templateCentre.yL / 2;
- if (that.billboardModel.template.isImportModel != "true") {
- var b_p = Cesium.Cartesian3.fromDegrees(
- that.billboardModel.templateCentre.x,
- that.billboardModel.templateCentre.y,
- that.billboardModel.templateCentre.z
- );
- var bottomentity = viewer.entities.add({
- id: "bottom_billboard_" + that.GUID,
- name: "gltf",
- show: true,
- position: b_p,
- /**
- * 矩形
- */
- box: {
- dimensions: new Cesium.Cartesian3(
- that.billboardModel.templateCentre.xL,
- that.billboardModel.templateCentre.zL,
- that.billboardModel.templateCentre.yL
- ),
- material: Cesium.Color.LIGHTGREEN,
- // outline: false,
- // outlineColor: Cesium.Color.SPRINGGREEN,
- // outlineWidth: 1,
- },
- orientation: Cesium.Transforms.headingPitchRollQuaternion(
- newposition,
- new Cesium.HeadingPitchRoll(
- Cesium.Math.toRadians(that.billboardModel.rotateZ),
- Cesium.Math.toRadians(0),
- Cesium.Math.toRadians(0)
- )
- ),
- });
- modelList.push(bottomentity);
- }
- // that.billboardModel.templateCentre.templateType =
- // that.selectbillboardModelRule.templateCentreType;
- // that.billboardModel.templateCentre.x = that.billboardModel.x;
- // that.billboardModel.templateCentre.y = that.billboardModel.y;
- // that.billboardModel.templateCentre.z =
- // that.billboardModel.templateBottom.z +
- // that.billboardModel.templateBottom.yL / 2 +
- // that.billboardModel.templateCentre.yL / 2;
- // if (that.billboardModel.template.isImportModel != "true") {
- // var c_p = Cesium.Cartesian3.fromDegrees(
- // that.billboardModel.templateCentre.x,
- // that.billboardModel.templateCentre.y,
- // that.billboardModel.templateCentre.z
- // );
- // var Centreentity = viewer.entities.add({
- // id: "Centre_billboard_" + that.GUID,
- // name: "gltf",
- // show: true,
- // position: c_p,
- // /**
- // * 圆柱
- // */
- // cylinder: {
- // length: that.billboardModel.templateCentre.yL, //圆柱体长度
- // topRadius: that.billboardModel.templateCentre.rL, //圆柱顶部半径
- // bottomRadius: that.billboardModel.templateCentre.rL, //圆柱体底部半径
- // material: Cesium.Color.LIGHTGREEN,
- // shadows: Cesium.ShadowMode.DISABLED, //指定圆柱体是否从每个光源投射或接收阴影
- // },
- // orientation: Cesium.Transforms.headingPitchRollQuaternion(
- // newposition,
- // new Cesium.HeadingPitchRoll(
- // Cesium.Math.toRadians(that.billboardModel.rotateZ),
- // Cesium.Math.toRadians(0),
- // Cesium.Math.toRadians(0)
- // )
- // ),
- // });
- // modelList.push(Centreentity);
- // }
- that.billboardModel.templateTop.templateType =
- that.selectbillboardModelRule.templateTopType;
- //计算当前实体的xyz
- that.billboardModel.templateTop.x = that.billboardModel.x;
- that.billboardModel.templateTop.y = that.billboardModel.y;
- if (that.billboardModel.template.isImportModel == "true") {
- that.billboardModel.templateTop.z = that.billboardModel.z;
- } else {
- that.billboardModel.templateTop.z =
- that.billboardModel.templateCentre.z +
- that.billboardModel.templateCentre.yL / 2 +
- that.billboardModel.templateTop.yL / 2;
- }
- // if (that.selectbillboardModelRule.templateTopAngleRoll) {
- // var sd =
- // that.billboardModel.templateTop.yL *
- // Math.cos(that.selectbillboardModelRule.templateTopAngleRoll);
- // that.billboardModel.templateTop.z =
- // that.billboardModel.templateTop.z -
- // sd +
- // that.billboardModel.templateTop.zL;
- // }
- var t_p = Cesium.Cartesian3.fromDegrees(
- that.billboardModel.templateTop.x,
- that.billboardModel.templateTop.y,
- that.billboardModel.templateTop.z
- );
- if (that.billboardModel.template.isImportModel == "true") {
- var url = that.billboardModelRule.templateTopUrl || modelurl;
- if (that.thisfileurl) {
- url = window.ZTaxiosURI + that.thisfileurl;
- that.selectbillboardModelRule.templateTopUrl =
- that.thisfileurl;
- }
-
- var entity = viewer.entities.add({
- id: "top_billboard_" + that.GUID,
- name: "gltf",
- show: true,
- position: t_p,
- /**
- * 模型
- */
- model: {
- uri: url,
- scale: that.billboardModel.templateTop.scaleL,
- },
- orientation: orientation,
- });
- modelList.push(entity);
- } else {
- var topentity = viewer.entities.add({
- id: "top_billboard_" + that.GUID,
- name: "gltf",
- show: true,
- position: t_p,
- /**
- * 矩形
- */
- box: {
- dimensions: new Cesium.Cartesian3(
- that.billboardModel.templateTop.xL,
- that.billboardModel.templateTop.zL,
- that.billboardModel.templateTop.yL
- ),
- material: Cesium.Color.LIGHTGREEN,
- // outline: false,
- // outlineColor: Cesium.Color.SPRINGGREEN,
- // outlineWidth: 1,
- },
- orientation: orientation,
- });
- modelList.push(topentity);
- }
- break;
- //实物型广告(模型型)
- case "ModelBillboard":
- that.billboardModel.templateTop.templateType =
- that.selectbillboardModelRule.templateTopType;
- //计算当前实体的xyz
- that.billboardModel.templateTop.x = that.billboardModel.x;
- that.billboardModel.templateTop.y = that.billboardModel.y;
- that.billboardModel.templateTop.z = that.billboardModel.z;
- var p = Cesium.Cartesian3.fromDegrees(
- that.billboardModel.templateTop.x,
- that.billboardModel.templateTop.y,
- that.billboardModel.templateTop.z
- );
- var url = that.billboardModelRule.templateTopUrl || modelurl;
- if (that.thisfileurl) {
- url = window.ZTaxiosURI + that.thisfileurl;
- that.selectbillboardModelRule.templateTopUrl = that.thisfileurl;
- }
-
- var entity = viewer.entities.add({
- id: "top_billboard_" + that.GUID,
- name: "gltf",
- show: true,
- position: p,
- /**
- * 模型
- */
- model: {
- uri: url,
- scale: that.billboardModel.templateTop.scaleL,
- },
- orientation: orientation,
- });
- modelList.push(entity);
- break;
- //图片型广告
- case "imgBillboard":
- that.billboardModel.templateTop.templateType =
- that.selectbillboardModelRule.templateTopType;
- //计算当前实体的xyz
- var x = that.billboardModel.x;
- var y = that.billboardModel.y;
- var z =
- that.billboardModel.z + that.billboardModel.templateTop.yL / 2;
- if (that.billboardModel.template.isImportModel == "true") {
- z = that.billboardModel.z;
- }
- that.billboardModel.templateTop.x = x;
- that.billboardModel.templateTop.y = y;
- that.billboardModel.templateTop.z = z;
- var p = Cesium.Cartesian3.fromDegrees(
- that.billboardModel.templateTop.x,
- that.billboardModel.templateTop.y,
- that.billboardModel.templateTop.z
- );
- var url = that.billboardModelRule.templateTopUrl || imageurl;
- var entity = viewer.entities.add({
- id: "top_billboard_" + that.GUID,
- name: "gltf",
- show: true,
- position: p,
- /**
- * 广告牌
- */
- billboard: {
- image: url,
- width: that.billboardModel.templateTop.xL,
- height: that.billboardModel.templateTop.yL,
- rotation: that.billboardModel.rotateX,
- sizeInMeters: true,
- },
- orientation: orientation,
- });
- modelList.push(entity);
- break;
- //上传的广告模型(模型型)
- // case "bjModel":
- // that.billboardModel.templateTop.templateType =
- // that.selectbillboardModelRule.templateTopType;
- // //计算当前实体的xyz
- // that.billboardModel.templateTop.x = that.billboardModel.x;
- // that.billboardModel.templateTop.y = that.billboardModel.y;
- // that.billboardModel.templateTop.z = that.billboardModel.z;
- // var p = Cesium.Cartesian3.fromDegrees(
- // that.billboardModel.templateTop.x,
- // that.billboardModel.templateTop.y,
- // that.billboardModel.templateTop.z
- // );
- // var url = that.billboardModelRule.templateTopUrl || modelurl;
- // if (that.thisfileurl) {
- // url = window.ZTaxiosURI + that.thisfileurl;
- // }
- // var entity = viewer.entities.add({
- // id: "top_billboard_" + that.GUID,
- // name: "gltf",
- // show: true,
- // position: p,
- // /**
- // * 模型
- // */
- // model: {
- // uri: url,
- // scale: that.billboardModel.templateTop.scaleL,
- // shadows: Cesium.ShadowMode.DISABLED,
- // // imageBasedLightingFactor: new Cesium.Cartesian2(10, 1),
- // lightColor: new Cesium.Cartesian3(10.0, 10.0, 10.0), //解决模型发暗,直接把光增强10倍 //这样就是白光增强到100倍。对Pbr材质有效
- // },
- // orientation: orientation,
- // });
- // modelList.push(entity);
- // break;
- default:
- that.billboardModel.templateTop.templateType =
- that.selectbillboardModelRule.templateTopType;
- //计算当前实体的xyz
- that.billboardModel.templateTop.x = that.billboardModel.x;
- that.billboardModel.templateTop.y = that.billboardModel.y;
- if (that.billboardModel.template.isImportModel == "true") {
- that.billboardModel.templateTop.z = that.billboardModel.z;
- } else {
- that.billboardModel.templateTop.z =
- that.billboardModel.z +
- that.billboardModel.templateTop.yL / 2;
- }
- var p = Cesium.Cartesian3.fromDegrees(
- that.billboardModel.templateTop.x,
- that.billboardModel.templateTop.y,
- that.billboardModel.templateTop.z
- );
- if (that.billboardModel.template.isImportModel == "true") {
- var url = that.billboardModelRule.templateTopUrl || modelurl;
- if (that.thisfileurl) {
- url = window.ZTaxiosURI + that.thisfileurl;
- that.selectbillboardModelRule.templateTopUrl =
- that.thisfileurl;
- }
-
- var entity = viewer.entities.add({
- id: "top_billboard_" + that.GUID,
- name: "gltf",
- show: true,
- position: p,
- /**
- * 模型
- */
- model: {
- uri: url,
- scale: that.billboardModel.templateTop.scaleL,
- },
- orientation: orientation,
- });
- modelList.push(entity);
- } else {
- var topentity = viewer.entities.add({
- id: "top_billboard_" + that.GUID,
- name: "gltf",
- show: true,
- position: p,
- /**
- * 长方体
- */
- box: {
- dimensions: new Cesium.Cartesian3(
- that.billboardModel.templateTop.xL,
- that.billboardModel.templateTop.zL,
- that.billboardModel.templateTop.yL
- ),
- show: true,
- material: Cesium.Color.LIGHTGREEN,
- },
- orientation: orientation,
- });
- modelList.push(topentity);
- }
- break;
- }
- }
- if (that.handlerPoint)
- that.handlerPoint.removeInputAction(
- Cesium.ScreenSpaceEventType.LEFT_CLICK
- );
- }, Cesium.ScreenSpaceEventType.LEFT_CLICK);
- // var colorStr = color.toCssColorString();
- // viewModel.boxMaterial = colorStr;
- },
- /**
- * 动态调整模型
- */
- handleChange() {
- this.$forceUpdate(); //解决点击计数器失效问题
- var that = this;
- debugger;
- // modelList.forEach(model => {
- // });
- // var currentEntity = viewer.entities.getById("billboard_" + that.GUID);
- // if (that.billboardReview && that.billboardReview.ModelType) {
- // switch (that.billboardReview.ModelType) {
- // case "box":
- // /**
- // * box
- // */
- // currentEntity.box.dimensions = new Cesium.Cartesian3(
- // that.billboardModel.t_xL,
- // that.billboardModel.t_zL,
- // that.billboardModel.t_yL
- // );
- // break;
- // case "img":
- // /**
- // * billoard
- // */
- // // debugger
- // currentEntity.billboard.width = that.billboardModel.xL;
- // currentEntity.billboard.height = that.billboardModel.yL;
- // currentEntity.billboard.rotation = that.billboardModel.rotateX;
- // break;
- // case "model":
- // /**
- // * model
- // */
- // currentEntity.model.scale = that.billboardModel.xL;
- // break;
- // }
- // }
- // /**
- // * 更新位置
- // */
- // var newposition = Cesium.Cartesian3.fromDegrees(
- // parseFloat(that.billboardModel.x),
- // parseFloat(that.billboardModel.y),
- // parseFloat(that.billboardModel.z)
- // );
- // currentEntity.position = newposition;
- // /**
- // * 旋转
- // */
- // var heading = Cesium.Math.toRadians(that.billboardModel.rotateX);
- // var pitch = Cesium.Math.toRadians(that.billboardModel.rotateY);
- // var roll = Cesium.Math.toRadians(that.billboardModel.rotateZ);
- // var hpr = new Cesium.HeadingPitchRoll(heading, pitch, roll);
- // var neworientation = Cesium.Transforms.headingPitchRollQuaternion(
- // newposition,
- // hpr
- // );
- // currentEntity.orientation = neworientation;
- // if (modelList.length > 0) {
- // for (let index = 0; index < modelList.length; index++) {
- // const element = modelList[index];
- // viewer.entities.removeById(element.id);
- // }
- // modelList = [];
- // }
- if (that.billboardReview && that.billboardReview.ModelType) {
- var newposition = Cesium.Cartesian3.fromDegrees(
- parseFloat(that.billboardModel.x),
- parseFloat(that.billboardModel.y),
- parseFloat(that.billboardModel.z)
- );
- /**
- * 旋转
- */
- var heading = Cesium.Math.toRadians(that.billboardModel.rotateZ);
- var pitch = Cesium.Math.toRadians(that.billboardModel.rotateY);
- var roll = Cesium.Math.toRadians(that.billboardModel.rotateX);
- var hpr = new Cesium.HeadingPitchRoll(heading, pitch, roll);
- var orientation = Cesium.Transforms.headingPitchRollQuaternion(
- newposition,
- hpr
- );
- var sd = that.billboardReview.ModelType;
- switch (sd) {
- //矩形广告
- case "rectangleBillboard":
- //计算当前实体的xyz
- that.billboardModel.templateTop.x = that.billboardModel.x;
- that.billboardModel.templateTop.y = that.billboardModel.y;
- if (that.billboardModel.template.isImportModel == "true") {
- that.billboardModel.templateTop.z = that.billboardModel.z;
- } else {
- that.billboardModel.templateTop.z =
- that.billboardModel.z + that.billboardModel.templateTop.yL / 2;
- }
- var p = Cesium.Cartesian3.fromDegrees(
- that.billboardModel.templateTop.x,
- that.billboardModel.templateTop.y,
- that.billboardModel.templateTop.z
- );
- if (that.billboardModel.template.isImportModel == "true") {
- var topentity = viewer.entities.getById(
- "top_billboard_" + that.GUID
- );
- topentity.position = t_p;
- topentity.model.scale = that.billboardModel.templateTop.scaleL;
- topentity.orientation = orientation;
- } else {
- var topentity = viewer.entities.getById(
- "top_billboard_" + that.GUID
- );
- topentity.position = p;
- topentity.box.dimensions = new Cesium.Cartesian3(
- that.billboardModel.templateTop.xL,
- that.billboardModel.templateTop.zL,
- that.billboardModel.templateTop.yL
- );
- topentity.orientation = orientation;
- }
- break;
- // 立杆型广告
- case "postsBillboard":
- that.billboardModel.templateCentre.x = that.billboardModel.x;
- that.billboardModel.templateCentre.y = that.billboardModel.y;
- that.billboardModel.templateCentre.z =
- that.billboardModel.z + that.billboardModel.templateCentre.yL / 2;
- if (that.billboardModel.template.isImportModel != "true") {
- var c_p = Cesium.Cartesian3.fromDegrees(
- that.billboardModel.templateCentre.x,
- that.billboardModel.templateCentre.y,
- that.billboardModel.templateCentre.z
- );
- var Centreentity = viewer.entities.getById(
- "Centre_billboard_" + that.GUID
- );
- Centreentity.position = c_p;
- Centreentity.cylinder = {
- length: that.billboardModel.templateCentre.yL, //圆柱体长度
- topRadius: that.billboardModel.templateCentre.rL, //圆柱顶部半径
- bottomRadius: that.billboardModel.templateCentre.rL, //圆柱体底部半径
- material: Cesium.Color.LIGHTGREEN,
- shadows: Cesium.ShadowMode.DISABLED, //指定圆柱体是否从每个光源投射或接收阴影
- };
- Centreentity.orientation =
- Cesium.Transforms.headingPitchRollQuaternion(
- newposition,
- new Cesium.HeadingPitchRoll(
- Cesium.Math.toRadians(that.billboardModel.rotateZ),
- Cesium.Math.toRadians(0),
- Cesium.Math.toRadians(0)
- )
- );
- }
- //计算当前实体的xyz
- that.billboardModel.templateTop.x = that.billboardModel.x;
- that.billboardModel.templateTop.y = that.billboardModel.y;
- if (that.billboardModel.template.isImportModel == "true") {
- that.billboardModel.templateTop.z = that.billboardModel.z;
- } else {
- that.billboardModel.templateTop.z =
- that.billboardModel.templateCentre.z +
- that.billboardModel.templateCentre.yL / 2 +
- that.billboardModel.templateTop.yL / 2;
- }
- if (that.billboardModel.rotateX > 10) {
- that.billboardModel.templateTop.z =
- that.billboardModel.templateTop.z -
- that.billboardModel.templateTop.yL / 2;
- }
- var t_p = Cesium.Cartesian3.fromDegrees(
- that.billboardModel.templateTop.x,
- that.billboardModel.templateTop.y,
- that.billboardModel.templateTop.z
- );
- if (that.billboardModel.template.isImportModel == "true") {
- var topentity = viewer.entities.getById(
- "top_billboard_" + that.GUID
- );
- topentity.position = t_p;
- topentity.model.scale = that.billboardModel.templateTop.scaleL;
- topentity.orientation = orientation;
- } else {
- var topentity = viewer.entities.getById(
- "top_billboard_" + that.GUID
- );
- topentity.position = t_p;
- topentity.box.dimensions = new Cesium.Cartesian3(
- that.billboardModel.templateTop.xL,
- that.billboardModel.templateTop.zL,
- that.billboardModel.templateTop.yL
- );
- topentity.orientation = orientation;
- }
- break;
- //底座型立杆广告
- case "ColumnWithaseBillboard":
- //计算当前实体的xyz
- that.billboardModel.templateCentre.x = that.billboardModel.x;
- that.billboardModel.templateCentre.y = that.billboardModel.y;
- that.billboardModel.templateCentre.z =
- that.billboardModel.z + that.billboardModel.templateCentre.yL / 2;
- if (that.billboardModel.template.isImportModel != "true") {
- var b_p = Cesium.Cartesian3.fromDegrees(
- that.billboardModel.templateCentre.x,
- that.billboardModel.templateCentre.y,
- that.billboardModel.templateCentre.z
- );
- var bottomentity = viewer.entities.getById(
- "bottom_billboard_" + that.GUID
- );
- bottomentity.position = b_p;
- bottomentity.box.dimensions = new Cesium.Cartesian3(
- that.billboardModel.templateCentre.xL,
- that.billboardModel.templateCentre.zL,
- that.billboardModel.templateCentre.yL
- );
- bottomentity.orientation =
- Cesium.Transforms.headingPitchRollQuaternion(
- newposition,
- new Cesium.HeadingPitchRoll(
- Cesium.Math.toRadians(that.billboardModel.rotateZ),
- Cesium.Math.toRadians(0),
- Cesium.Math.toRadians(0)
- )
- );
- }
- // that.billboardModel.templateCentre.x = that.billboardModel.x;
- // that.billboardModel.templateCentre.y = that.billboardModel.y;
- // that.billboardModel.templateCentre.z =
- // that.billboardModel.templateBottom.z +
- // that.billboardModel.templateBottom.yL / 2 +
- // that.billboardModel.templateCentre.yL / 2;
- // if (that.billboardModel.template.isImportModel != "true") {
- // var c_p = Cesium.Cartesian3.fromDegrees(
- // that.billboardModel.templateCentre.x,
- // that.billboardModel.templateCentre.y,
- // that.billboardModel.templateCentre.z
- // );
- // var Centreentity = viewer.entities.getById(
- // "Centre_billboard_" + that.GUID
- // );
- // Centreentity.position = c_p;
- // Centreentity.cylinder = {
- // length: that.billboardModel.templateCentre.yL, //圆柱体长度
- // topRadius: that.billboardModel.templateCentre.rL, //圆柱顶部半径
- // bottomRadius: that.billboardModel.templateCentre.rL, //圆柱体底部半径
- // material: Cesium.Color.LIGHTGREEN,
- // shadows: Cesium.ShadowMode.DISABLED, //指定圆柱体是否从每个光源投射或接收阴影
- // };
- // Centreentity.orientation =
- // Cesium.Transforms.headingPitchRollQuaternion(
- // newposition,
- // new Cesium.HeadingPitchRoll(
- // Cesium.Math.toRadians(that.billboardModel.rotateZ),
- // Cesium.Math.toRadians(0),
- // Cesium.Math.toRadians(0)
- // )
- // );
- // }
- //计算当前实体的xyz
- that.billboardModel.templateTop.x = that.billboardModel.x;
- that.billboardModel.templateTop.y = that.billboardModel.y;
- if (that.billboardModel.template.isImportModel == "true") {
- that.billboardModel.templateTop.z = that.billboardModel.z;
- } else {
- that.billboardModel.templateTop.z =
- that.billboardModel.templateCentre.z +
- that.billboardModel.templateCentre.yL / 2 +
- that.billboardModel.templateTop.yL / 2;
- }
- // if (that.billboardModel.rotateX > 10) {
- // // var sd =
- // // (that.billboardModel.templateTop.yL / 2) *
- // // Math.cos(that.billboardModel.rotateX);
- // // that.billboardModel.templateTop.z =
- // // that.billboardModel.templateTop.z -
- // // sd +
- // // that.billboardModel.templateTop.zL;
- // that.billboardModel.templateTop.z =
- // that.billboardModel.templateTop.z -
- // that.billboardModel.templateTop.yL / 2 +
- // that.billboardModel.templateTop.zL;
- // }
- var t_p = Cesium.Cartesian3.fromDegrees(
- that.billboardModel.templateTop.x,
- that.billboardModel.templateTop.y,
- that.billboardModel.templateTop.z
- );
- if (that.billboardModel.template.isImportModel == "true") {
- var topentity = viewer.entities.getById(
- "top_billboard_" + that.GUID
- );
- topentity.position = t_p;
- topentity.model.scale = that.billboardModel.templateTop.scaleL;
- topentity.orientation = orientation;
- } else {
- var topentity = viewer.entities.getById(
- "top_billboard_" + that.GUID
- );
- topentity.position = t_p;
- topentity.box.dimensions = new Cesium.Cartesian3(
- that.billboardModel.templateTop.xL,
- that.billboardModel.templateTop.zL,
- that.billboardModel.templateTop.yL
- );
- topentity.orientation = orientation;
- }
- break;
- //实物型广告(模型型)
- case "ModelBillboard":
- //计算当前实体的xyz
- that.billboardModel.templateTop.x = that.billboardModel.x;
- that.billboardModel.templateTop.y = that.billboardModel.y;
- that.billboardModel.templateTop.z = that.billboardModel.z;
- var t_p = Cesium.Cartesian3.fromDegrees(
- that.billboardModel.templateTop.x,
- that.billboardModel.templateTop.y,
- that.billboardModel.templateTop.z
- );
- var topentity = viewer.entities.getById(
- "top_billboard_" + that.GUID
- );
- topentity.position = t_p;
- topentity.model.scale = that.billboardModel.templateTop.scaleL;
- topentity.orientation = orientation;
- break;
- //图片型广告
- case "imgBillboard":
- //计算当前实体的xyz
- var x = that.billboardModel.x;
- var y = that.billboardModel.y;
- var z =
- that.billboardModel.z + that.billboardModel.templateTop.yL / 2;
- if (that.billboardModel.template.isImportModel == "true") {
- z = that.billboardModel.z;
- }
- that.billboardModel.templateTop.x = x;
- that.billboardModel.templateTop.y = y;
- that.billboardModel.templateTop.z = z;
- var t_p = Cesium.Cartesian3.fromDegrees(
- that.billboardModel.templateTop.x,
- that.billboardModel.templateTop.y,
- that.billboardModel.templateTop.z
- );
- if (that.billboardModel.template.isImportModel == "true") {
- var topentity = viewer.entities.getById(
- "top_billboard_" + that.GUID
- );
- topentity.position = t_p;
- topentity.model.scale = that.billboardModel.templateTop.scaleL;
- topentity.orientation = orientation;
- } else {
- var topentity = viewer.entities.getById(
- "top_billboard_" + that.GUID
- );
- topentity.position = t_p;
- topentity.billboard.width = that.billboardModel.templateTop.xL;
- topentity.billboard.height = that.billboardModel.templateTop.yL;
- topentity.billboard.rotation = that.billboardModel.rotateX;
- topentity.orientation = orientation;
- }
- break;
- default:
- //计算当前实体的xyz
- that.billboardModel.templateTop.x = that.billboardModel.x;
- that.billboardModel.templateTop.y = that.billboardModel.y;
- if (that.billboardModel.template.isImportModel == "true") {
- that.billboardModel.templateTop.z = that.billboardModel.z;
- } else {
- that.billboardModel.templateTop.z =
- that.billboardModel.z + that.billboardModel.templateTop.yL / 2;
- }
- var p = Cesium.Cartesian3.fromDegrees(
- that.billboardModel.templateTop.x,
- that.billboardModel.templateTop.y,
- that.billboardModel.templateTop.z
- );
- if (that.billboardModel.template.isImportModel == "true") {
- var topentity = viewer.entities.getById(
- "top_billboard_" + that.GUID
- );
- topentity.position = p;
- topentity.model.scale = that.billboardModel.templateTop.scaleL;
- topentity.orientation = orientation;
- } else {
- var topentity = viewer.entities.getById(
- "top_billboard_" + that.GUID
- );
- topentity.position = p;
- topentity.box.dimensions = new Cesium.Cartesian3(
- that.billboardModel.templateTop.xL,
- that.billboardModel.templateTop.zL,
- that.billboardModel.templateTop.yL
- );
- topentity.orientation = orientation;
- }
- break;
- }
- }
- },
- /**
- * 类型修改时触发
- */
- changeBillboardType() {
- debugger;
- let sds = this.$refs["billboardTypeCascader"].getCheckedNodes()[0].data;
- this.billboardReview = JSON.parse(JSON.stringify(sds));
- if (this.billboardReview.isAddModel) {
- this.billboardModel.isAddModel = this.billboardReview.isAddModel;
- if (this.billboardReview && this.billboardReview.ModelType) {
- this.TemplateDefaultValues(this.billboardReview.ModelType);
- }
- this.billboardModelRule = JSON.parse(
- JSON.stringify(
- window.billboardModelRuleList.find(
- (c) => c.code == this.billboardReview.ModelType
- ).template
- )
- );
- this.selectbillboardModelRule =
- this.billboardModelRule.length > 0
- ? this.billboardModelRule[0]
- : null;
- } else {
- this.billboardModelRule = null;
- }
- this.removeModel();
- },
- //模板默认值
- TemplateDefaultValues(ModelType) {
- debugger;
- this.billboardModel.AttachedData = {};
- this.billboardModel.rotateX = 0;
- this.billboardModel.rotateY = 0;
- this.billboardModel.rotateZ = 90;
- switch (ModelType) {
- //矩形广告
- case "rectangleBillboard":
- this.billboardModel.templateBottom = {};
- this.billboardModel.templateCentre = {};
- this.billboardModel.templateTop = {
- xL: 1,
- yL: 1,
- zL: 0.1,
- };
- this.billboardModel.templateTop.scaleL = 1;
- break;
- // 立杆型广告
- case "postsBillboard":
- this.billboardModel.templateBottom = {};
- this.billboardModel.templateCentre = {
- yL: 1,
- rL: 0.1,
- };
- this.billboardModel.templateTop = {
- xL: 1,
- yL: 1,
- zL: 0.1,
- };
- this.billboardModel.templateTop.scaleL = 1;
- break;
- //底座型立杆广告
- case "ColumnWithaseBillboard":
- this.billboardModel.templateBottom = {
- // xL: 1,
- // yL: 0.1,
- // zL: 1,
- };
- this.billboardModel.templateCentre = {
- xL: 1,
- yL: 0.1,
- zL: 1,
- };
- this.billboardModel.templateTop = {
- xL: 1,
- yL: 1,
- zL: 0.1,
- };
- this.billboardModel.templateTop.scaleL = 1;
- break;
- //实物型广告(模型型)
- case "ModelBillboard":
- this.billboardModel.templateBottom = {};
- this.billboardModel.templateCentre = {};
- this.billboardModel.templateTop = {
- scaleL: 1,
- };
- break;
- //图片型广告
- case "imgBillboard":
- this.billboardModel.templateBottom = {};
- this.billboardModel.templateCentre = {};
- this.billboardModel.templateTop = {
- xL: 2,
- yL: 1,
- };
- this.billboardModel.templateTop.scaleL = 1;
- break;
- default:
- this.billboardModel.templateBottom = {};
- this.billboardModel.templateCentre = {};
- this.billboardModel.templateTop = {
- xL: 1,
- zL: 1,
- yL: 0.1,
- };
- this.billboardModel.templateTop.scaleL = 1;
- break;
- }
- },
- /**
- * 选择模型模板
- */
- selectModeltemplate(item) {
- this.selectbillboardModelRule = item;
- },
- /**
- * 保存编辑
- */
- async saveMode() {
- debugger;
- let that = this;
- if (that.billboardReview.AttachedData) {
- for (
- var index = 0;
- index < that.billboardReview.AttachedData.length;
- index++
- ) {
- var attached = that.billboardReview.AttachedData[index];
- var value = that.billboardModel.AttachedData[attached.key];
- if (!value || value == "") {
- this.$message.error("请添加附加参数");
- return;
- }
- }
- }
- if (
- that.billboardModel.billboardName == "" ||
- that.billboardModel.billboardName == null
- ) {
- this.$message.error("请添加广告牌名称");
- return;
- }
- if (that.billboardModel.isAddModel && modelList.length == 0) {
- this.$message.error("请先完成[添加广告牌],再保存");
- return;
- }
- if (
- that.billboardReview.ModelType == "ModelBillboard" ||
- that.billboardReview.ModelType == "imgBillboard"
- ) {
- if (
- !that.billboardModel.templateTop.xL ||
- !that.billboardModel.templateTop.yL ||
- !that.billboardModel.templateTop.zL
- ) {
- this.$message.error("请输入广告牌长宽高和厚度参数");
- return;
- }
- }
- debugger;
- let data = JSON.parse(JSON.stringify(that.billboardModel));
- data.id = uuidv4();
- data.billboardInfoId = that.project.id;
- data.template = {
- isImportModel: that.billboardModel.template.isImportModel,
- ModelType: that.billboardReview.ModelType,
- ...that.selectbillboardModelRule,
- };
- //添加附属信息的详细信息
- var fsxxs = [];
- if (
- data.AttachedData &&
- data.AttachedData != "{}" &&
- Object.keys(data.AttachedData).length > 0
- ) {
- for (
- var index = 0;
- index < that.billboardReview.AttachedData.length;
- index++
- ) {
- var attached = that.billboardReview.AttachedData[index];
- var fsxx = { key: attached.key, value: attached.value, data: "" };
- var valuedata = that.billboardModel.AttachedData[attached.key];
- if (attached.selectData) {
- fsxx.data = attached.selectData.find((c) => c.value == valuedata);
- } else {
- fsxx.data = valuedata;
- }
- fsxxs.push(JSON.parse(JSON.stringify(fsxx)));
- }
- data.AttachedData = JSON.stringify(fsxxs);
- } else {
- data.AttachedData = JSON.stringify(data.AttachedData);
- }
- data.template = JSON.stringify(data.template);
- data.templateBottom = JSON.stringify(data.templateBottom);
- data.templateCentre = JSON.stringify(data.templateCentre);
- data.templateTop = JSON.stringify(data.templateTop);
- data.viewing_angle = JSON.stringify({
- destination: viewer.camera.position,
- orientation: {
- // 方向
- heading: viewer.camera.heading,
- // 视角
- pitch: viewer.camera.pitch,
- // 倾斜角度
- roll: viewer.camera.roll,
- },
- });
- debugger;
- let result = await addBillboardModelList(data);
- debugger;
- if (result.code) {
- that.$message({
- message: "添加成功",
- type: "success",
- });
- viewer.entities.removeAll();
- // that.lyoption.cancel();
- //添加截图提醒
- debugger;
- if (
- that.billboardReview.isAddModel &&
- that.lyoption.content.parent.jttx
- ) {
- that.lyoption.content.parent.jttx();
- }
- that.$layer.close(that.layerid);
- }
- // window.billboardModelList.push(that.billboardModel);
- // this.$message({
- // message: "添加成功",
- // type: "success",
- // });
- },
- //取消
- cancle() {
- this.removeModel();
- this.$layer.close(this.layerid);
- },
- //清除
- removeModel() {
- if (this.handlerPoint)
- this.handlerPoint.removeInputAction(
- Cesium.ScreenSpaceEventType.LEFT_CLICK
- );
- modelList = [];
- viewer.entities.removeAll();
- },
- },
- components: { Image },
- beforeDestroy() {
- this.removeModel();
- },
- };
- </script>
- <style lang="scss">
- @import "@/../../zt.scss";
- </style>
- <style lang="scss" scoped>
- .hover_style:hover {
- border: 1px solid rgba(15, 123, 200, 0.247);
- background-color: rgba(15, 123, 200, 0.247);
- }
- .con-col {
- border: 1px solid;
- display: flex;
- flex-flow: column nowrap;
- justify-content: center;
- align-items: center;
- border-radius: 4px;
- }
- .imgdomf {
- border: 1px solid rgba(15, 122, 200, 0.4);
- padding: 4px;
- }
- .imgdom {
- border: 1px solid rgba(15, 122, 200, 0.4);
- margin: 4px;
- padding: 2px;
- }
- .el-divider__text {
- background-color: #11123bde;
- color: #ffffff;
- }
- </style>
|