![]() |
发几个三维多段线的程序 大家来改改
发几个三维多段线的程序 大家来改改
www.dimcax.com 发几个三维多段线的程序 大家来改改 using ; using ; using ; using ; using ; using ; namespace { public class { public void getentity() { ed = application.documentmanager.mdiactivedocument.editor(); selopts = new (constants.vbcr + "select 3dpolyline: "); selopts.setrejectmessage(constants.vbcr + "3dpolyline may be selected only!"); selopts.addallowedclass(typeof(), true); entres = ed.getentity(selopts); if (entres.status == promptstatus.ok) { move3dpolyvertex(entres.objectid); } } private void move3dpolyvertex( polyid) { doc = application.documentmanager.mdiactivedocument; doclock = doc.lockdocument(); ed = doc.editor; db = doc.database; using ( trans = ed.document.transactionmanager.starttransaction()) { objpline = ()trans.getobject(polyid, openmode.forwrite); int osm = application.getsystemvariable("osmode"); application.setsystemvariable("osmode", 1); opts = new (constants.vbcr + "select vertex :"); opts.allownone = false; opts.usebasepoint = false; res = ed.getpoint(opts); if (res.status == promptstatus.ok) { pfrom = res.value; opts.usebasepoint = true; opts.basepoint = pfrom; opts.message = constants.vbcr + "pick destination point to move vertext at:"; nres = ed.getpoint(opts); if (nres.status == promptstatus.ok) { pto = nres.value; btr = ()trans.getobject(db.currentspaceid, openmode.forwrite); blocktablerecord(); } } } } } } 改变3dpolyvertex 中的点 建立一个 3dpoly using autodesk.autocad.runtime; using autodesk.autocad.databaseservices; using autodesk.autocad.applicationservices; using autodesk.autocad.editorinput; using autodesk.autocad.geometry; public class gilsclass1 { public void create3dpoly() { point3dcollection pts = new point3dcollection(); polyline3d my3dpoly = new polyline3d(poly3dtype.simplepoly, pts, false); double[] ptsarr = {0, 0, 0, 10, 10, 10, 0, 10, 10}; int i = 0; while (i < ptsarr.length) { pts.add(new point3d(ptsarr(i), ptsarr(i + 1), ptsarr(i + 2))); i = i + 3; } draw3dpoly(my3dpoly); } internal objectid draw3dpoly(polyline3d my3dpoly) { database db = hostapplicationservices.workingdatabase; editor ed; application.documentmanager.mdiactivedocument.editor(); autodesk.autocad.databaseservices.transactionmanager transmgr = db.transactionmanager; transaction trans = transmgr.starttransaction; try { blocktablerecord btr = (blocktablerecord)trans.getobject(db.currentspaceid, openmode.forwrite); btr.appendentity(my3dpoly); trans.addnewlycreateddbobject(my3dpoly, true); trans.commit(); } catch (autodesk.autocad.runtime.exception ex) { ed.writemessage("error message: " + ex.message); } finally { if ((my3dpoly != null)) { my3dpoly.dispose(); } } return my3dpoly.objectid; } } using system ; using system.collections; using autodesk.autocad.runtime ; using autodesk.autocad.databaseservices; using autodesk.autocad.geometry; using autodesk.autocad.editorinput; using autodesk.autocad.applicationservices; using acadapp = autodesk.autocad.applicationservices.application; [assembly: commandclass(typeof(classlibrary.class))] namespace classlibrary { public class class { [commandmethod("intpoly3d")] static public void intpoly3d() { editor ed = application.documentmanager.mdiactivedocument.editor; polyline3d pl1 = selectpoly3d("\nselect first polyline3d: "); if (pl1 == null) return; polyline3d pl2 = selectpoly3d("\nselect second polyline3d: "); if (pl2 == null) return; // we can project our plines in direction of z axis of wcs, // but you can use another project plane vector3d dir = new vector3d(0,0,1); point3d orig = new point3d (0,0,0); // plane of wcs plane planewcs = new plane(orig, dir); curve pl1_prj = pl1.getprojectedcurve(planewcs,dir); pl1.dispose(); curve pl2_prj = pl2.getprojectedcurve(planewcs,dir); pl2.dispose(); point3dcollection pts = new point3dcollection(); pl1_prj.intersectwith(pl2_prj,intersect.onbothoperands,pts,0,0); if (pts.count > 0) { ed.writemessage("\nnumber of intersection: {0}",pts.count); foreach (point3d pt in pts) ed.writemessage("\n point: {0}",pt); } else { ed.writemessage("\nno intersection!"); } pl1_prj.dispose(); pl2_prj.dispose(); } static private polyline3d selectpoly3d(string str) { editor ed = application.documentmanager.mdiactivedocument.editor; database db = hostapplicationservices.workingdatabase; promptentityresult rs = ed.getentity(str); if (rs.status == promptstatus.ok) { transaction trans = db.transactionmanager.starttransaction(); entity ent = (entity)trans.getobject(rs.objectid, openmode.forread); polyline3d pl = ent as polyline3d; trans.commit(); if (pl == null) ed.writemessage("\nit is not polyline3d!"); return pl; } return null; } } } 3dpoly 的交点 |
| 所有的时间均为北京时间。 现在的时间是 10:34 PM. |