land
www.dimcax.com
land
[commandmethod("hd")] static public void test() { polyline3d pline=new polyline3d(); database db = hostapplicationservices.workingdatabase; editor ed = application.documentmanager.mdiactivedocument.editor; transaction trans = db.transactionmanager.starttransaction(); blocktable bt = (blocktable)trans.getobject(db.blocktableid, openmode.forread); blocktablerecord btr = (blocktablerecord)trans.getobject(db.currentspaceid, openmode.forwrite); promptpointoptions ppo=new promptpointoptions("请选择第一点"); promptpointresult ppores=ed.getpoint(ppo); point3d pt1=ppores.value; nextpoint: promptpointoptions ppo2=new promptpointoptions("请选择下一点或画线类型[
polylinesplineout]
"); ppo2.keywords.add("p","p","p",false,true); ppo2.keywords.add("s", "s", "s", false, true); ppo2.keywords.add("c", "c", "c", false, true); ppo2.keywords.default = "p"; ppo2.allownone=true; ppo2.usebasepoint=true; ppo2.basepoint=pt1; point3d pt2 ; promptpointresult ppres = ed.getpoint(ppo2); if (ppres.status == promptstatus.cancel) return; else if(ppres.status==promptstatus.ok) pt2= ppres.value; else if (ppres.stringresult == "c") goto kkk ; point3dcollection pts = new point3dcollection(); pts.add(pt1); pts.add(pt2); point3dcollection ptss = new point3dcollection(); if (pts.count > 2) { ptss.add(pts[pts.count - 1]); ptss.add(pts[pts.count - 2]); ptss.add(pts[pts.count - 3]); } else { ptss = pts; } switch (ppres.stringresult.toupper()) { case"p": pline= new polyline3d(poly3dtype.simplepoly,ptss,false); btr.appendentity(pline); trans.addnewlycreateddbobject(pline,true); break; case"s": pline = new polyline3d(poly3dtype.simplepoly,ptss,false); pline.splinefit(); btr.appendentity(pline); trans.addnewlycreateddbobject(pline,true); break; } goto nextpoint; kkk: promptselectionoptions pros = new promptselectionoptions(); pros.messageforadding = "请选择主线"; promptselectionresult prres = ed.getselection(pros); selectionset sset = prres.value; objectid[] ids = sset.getobjectids(); foreach (objectid id in ids) { entity ent = (entity)trans.getobject(id, openmode.forwrite); switch (ent.tostring()) { case "autodesk.autocad.databaseservices.polyline3d": //polyline2d pline = (polyline2d)ent; ex(re1(pline.startpoint, vector3d.xaxis, 10), pline); break; case "autodesk.autocad.databaseservices.spline": spline sp=(spline)ent; ex(re1(sp.startpoint,sp.startfittangent,30),sp); break; } } } //添加实体 public static objectid appende(entity ent) { database db = hostapplicationservices.workingdatabase; objectid entid; using (transaction trans = db.transactionmanager.starttransaction()) { blocktable bt = (blocktable)trans.getobject(db.blocktableid, openmode.forread); blocktablerecord btr = (blocktablerecord)trans.getobject(bt[blocktablerecord.modelspace], openmode.forwrite); entid = btr.appendentity(ent); trans.addnewlycreateddbobject(ent, true); trans.commit(); } return entid; } //为巷道创建面域1 public static region re1(point3d pt,vector3d vv,double r) { circle cir = new circle(pt,vv,r); dbobjectcollection ent = new dbobjectcollection(); ent.add(cir); dbobjectcollection egion1 = region.createfromcurves(ent); region re = (region)egion1[0]; return re; } //创建拉伸函数 public static void ex(region reg,curve path) { solid3d so = new solid3d(); so.extrudealongpath(reg,path,0); appende(so); } } }
为什么当选择第二点时会出错呢,致命错误
因为你还没有选择参数就选择了点. 如果没有选择参数,下面的这句就会出现导致cad退出的错误! switch (ppres.stringresult.toupper()) 你可以设定一个默认的参数,比如: string str_res = ppres.stringresult; if (str_res = string.empty) str_res= "p" switch (str_res.toupper()) ......... 当然,可能不符合你的程序整体的要求,我只是建议,还需要你自己考虑. 另外你这个程序还有其它的问题,慢慢调试吧.
impossible is nothing