Article | 70002440 |
Type | HowTo |
Product | WebJS |
Version | 10 |
Date Added | 11/17/2023 12:00:00 AM |
Fixed | 10.1005.0.3 (11/17/2023 12:00:00 AM) |
Submitted by | sefa |
Summary
How can I copy entities from one layer to an other in Web Javascript control?
Solution
Try a code like:
//following code will clone all entities in model layout that belong to the layer 'mylayerName' //Set a new layer to 'myNewlayerName' for the cone entities //Add them to the end of the Model layout entities collection (list) var sourceLayer = vdcanvas.FindLayer("mylayerName"); var sourcelayerId = 'h_' + sourceLayer.HandleId.toString(); var destLayer = vdcanvas.FindLayer("myNewlayerName"); var destLayerId = 'h_' + destLayer.HandleId.toString(); var layerdefault = vdcanvas.FindLayer("0"); var document = vdcanvas.GetDocument(); var layerref; var entities = document.Model.Entities;//select model entities var cloneEntities = [];// a temporary collection to keep the new clone-entities for (var i = 0; i < entities.Items.length; i++) { var obj = vdcanvas.GetEntityItem(entities.Items[i]); if (!obj || obj.Deleted) continue; //if obj has the default layer name '0' then may the obj.Layer is undefine so we calculate it if (!obj.Layer) layerref = layerdefault; else layerref = vdcanvas.GetEntityItem(obj.Layer); var layerrefId = 'h_' + layerref.HandleId.toString(); //select only entities that are in the sourceLayer if (layerrefId != sourcelayerId) continue; var ent = vdConst.cloneEntity(obj); ent.HandleId = undefined; //set the HandleId to undefined in order a new one to be calculated later by AddFigureToCollection call ent.Layer = destLayerId; //change the layer to the destLayer cloneEntities.push(ent); } //add and register the cone entities to the source model entities for (var i = 0; i < cloneEntities.length; i++) { vdcanvas.AddFigureToCollection(entities, cloneEntities[i]); } //post a redraw setTimeout(vdcanvas.redraw());