Stumbling, finally completed dynamically modify the first edition, but there are still many problems
js part
function changeLinePrimitive(options) { this.positions=options.positions } changeLinePrimitive.prototype.getGeometry = function () { return new Cesium.PolylineGeometry({ positions: this.positions, height: 50, width:5, vertexFormat: Cesium.EllipsoidSurfaceAppearance.VERTEXchangeLinePrimitiveFORMAT, }); }; changeLinePrimitive.prototype.update = function (context, frameState, commandList) { var geometry = this.getGeometry(); if (!geometry) { return; } this._primitive = new Cesium.Primitive({ geometryInstances: new Cesium.GeometryInstance({ geometry: geometry, id: "111", }), releaseGeometryInstances:false, appearance: new Cesium.PolylineMaterialAppearance({ aboveGround: false }), asynchronous: false }); var primitive=this._primitive primitive.update(context, frameState, commandList); }; transfer
was heading word = []; positionWord.push(Cesium.Cartesian3.fromDegrees(110.20, 34.55, 0)); positionWord.push(Cesium.Cartesian3.fromDegrees(115.20, 34.55, 0)); positionWord.push(Cesium.Cartesian3.fromDegrees(115.20, 39.55, 0)); var pr=new changeLinePrimitive({positions: positionWord}) Kansolklog (Q) viewer.scene.primitives.add(pr); was editFlag = false var moveFlag = false // When clicked point is the bill, the changes began primitive var billEntity = [] // added record entity vertices var handler = new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas); was dragId = -1 handler.setInputAction(function(movement) { var pick = viewer.scene.pick(movement.position); console.log(pick) if(pick){ // pick a bill if(pick.id!=null &&pick.id.name=="bill"){ console.log ( "Lock Camera") dragId=pick.id.id.split("-")[1] moveFlag=true viewer.scene.screenSpaceCameraController.enableRotate = false;//锁定相机 } else{ editFlag=true var pos=pick.primitive.geometryInstances.geometry._positions //console.log(pick.primitive.geometryInstances.geometry._positions) removeMarkEntity(billEntity) billEntity = [] addMark (heading) viewer.scene.screenSpaceCameraController.enableRotate = false;//锁定相机 dragId=-1 } } else{ editFlag=false removeMarkEntity(billEntity) billEntity = [] dragId=-1 //viewer.scene.screenSpaceCameraController.enableRotate = true; // lock camera } },Cesium.ScreenSpaceEventType.LEFT_CLICK); handler.setInputAction(function(movement) { let ray = viewer.camera.getPickRay(movement.endPosition); let cartesian = viewer.scene.globe.pick(ray, viewer.scene); if ( moveFlag && dragId!=-1) { pr.positions[dragId]=cartesian // billEntity[dragId].position=new Cesium.CallbackProperty(function () { // return cartesian; //}, false); // prevent flicker, the process of moving in) } },Cesium.ScreenSpaceEventType.MOUSE_MOVE); function addMark(positions) { the bill = { show: true, pixelOffset: new Cesium.Cartesian2(0, 0), eyeOffset: new Cesium.Cartesian3(0.0, 0.0, 0.0), horizontalOrigin: Cesium.HorizontalOrigin.CENTER, verticalOrigin: Cesium.VerticalOrigin.CENTER, scale: 2.0, image: "./sampledata/images/dragIcon.png", color: new Cesium.Color(1.0, 1.0, 1.0, 1.0) } var entity positions.map((v,index) =>{ console.log(index) var cartesian3=new Cesium.Cartesian3(v.x,v.y,v.z); var cartographic=viewer.scene.globe.ellipsoid.cartesianToCartographic(cartesian3); var lat=Cesium.Math.toDegrees(cartographic.latitude); var lng=Cesium.Math.toDegrees(cartographic.longitude); var height=Cesium.Math.toDegrees(cartographic.height); entity=viewer.entities.add({ position: Cesium.Cartesian3.fromDegrees(lng, lat, height), billboard:bill, name:"bill", id:"bill-"+index }) billEntity.push(entity) }) } function removeMarkEntity(entities){ entities.map(v =>{ viewer.entities.remove(v) }) }