![]() |
【转帖】新手练习作品2:jig动态变换图元。 - 精华帖集合
新手练习作品2:jig动态变换图元。 - 精华帖集合
www.dimcax.com 新手练习作品2:jig动态变换图元。 , , using system; using autodesk.autocad.applicationservices; using autodesk.autocad.runtime; using autodesk.autocad.databaseservices; using autodesk.autocad.editorinput; using autodesk.autocad.geometry; using system.collections.generic; namespace fsxm.acad { //jig动态变换图元 public class fsxm : drawjig { database db = hostapplicationservices.workingdatabase; editor ed = application.documentmanager.mdiactivedocument.editor; selectionset ss; blockreference insert; point3d minpt, oldpt; double width, higth; [commandmethod("trans", commandflags.usepickset)] public void trans() { blocktable bt; promptselectionoptions sop = new promptselectionoptions(); sop.messageforadding = "选择你要变换的东东"; sop.rejectobjectsonlockedlayers = true; promptselectionresult srt = ed.getselection(sop); if (srt.status != promptstatus.ok) return; ss = srt.value; using (transaction trans = db.transactionmanager.starttransaction()) { //做块 blocktablerecord btr; btr = new blocktablerecord(); btr.name = "*u"; //btr.origin = prt.value; bt = (blocktable)trans.getobject(db.blocktableid, openmode.forwrite); bt.add(btr); trans.addnewlycreateddbobject(btr, true); //块中图元 foreach (selectedobject sobj in ss) { entity ent = (entity)trans.getobject(sobj.objectid, openmode.forread); entity copy = (entity)ent.clone(); btr.appendentity(copy); trans.addnewlycreateddbobject(copy, true); ent.highlight();//高亮要托动的东东 } //算出块大小 insert = new blockreference(new point3d(), btr.id); extents3d box = insert.geometricextents; vector3d v = box.maxpoint.getvectorto(box.minpoint); width = v.x; higth = v.y; //改下块原点 btr.origin = minpt = box.minpoint; insert.position = minpt; //递交 trans.commit(); } //开始托动 promptresult var = ed.drag(this); if (var.status != promptstatus.ok) { //去高亮 using (transaction trans = db.transactionmanager.starttransaction()) { foreach (selectedobject obj in ss) { entity ent = (entity)trans.getobject(obj.objectid, openmode.forwrite); ent.unhighlight(); } } return; } using (transaction trans = db.transactionmanager.starttransaction()) { //插入打散的块 blocktablerecord mspace = (blocktablerecord)trans.getobject(bt["*model_space"], openmode.forwrite); dbobjectcollection exs = new dbobjectcollection(); insert.explode(exs); foreach (dbobject obj in exs) { mspace.appendentity((entity)obj); trans.addnewlycreateddbobject(obj, true); } //删除老线 foreach (selectedobject obj in ss) { entity ent = (entity)trans.getobject(obj.objectid, openmode.forwrite); ent.erase(); } //递交 trans.commit(); } } protected override bool worlddraw(autodesk.autocad.graphicsinterface.worlddraw draw) { draw.geometry.draw(insert); return true; } protected override samplerstatus sampler(jigprompts prompts) { point3d cur = prompts.acquirepoint("拾取变形目标点").value; if (oldpt == cur) return samplerstatus.nochange; oldpt = cur; vector3d v = cur.getvectorto(minpt); double scx = v.x / width; double scy = v.y / higth; insert.scalefactors = new scale3d(scx, scy, 1); return samplerstatus.ok; } } } 复制代码 [ ] 不错啊! 路漫漫其修远兮,吾将上下而求索! 都是牛人啊.佩服! 学习 |
所有的时间均为北京时间。 现在的时间是 04:40 PM. |