『已解决』(已结)选定一条线段,枚举出与这条线段相交的线段 - 精华帖集合
www.dimcax.com
『已解决』(已结)选定一条线段,枚举出与这条线段相交的线段
遇到一个问题,需要通过选定一个线段来枚举出所有与之相交的线段,并且要得到交点的坐标. 本来我是用workingdatabase做得,但由于线段太多,直接影响了效率. 经过才鸟兄指点,使用过滤器改进了下,性能得到了很大的提升.呵呵,不胜感激呀. static public void intersecttest() { editor ed = acadapp.documentmanager.mdiactivedocument.editor; document doc = acadapp.documentmanager.mdiactivedocument; transaction tr = doc.transactionmanager.starttransaction(); using (tr) { promptentityoptions peo = new promptentityoptions("select a line: "); promptentityresult per = ed.getentity(peo); if (per.status == autodesk.autocad.editorinput.promptstatus.ok) { line line = (line)tr.getobject(per.objectid, openmode.forread); point3dcollection p3c = new point3dcollection(); p3c.add(line.startpoint); p3c.add(line.endpoint); typedvalue[] filterlist = new typedvalue[1]; filterlist[0] = new typedvalue(0, "line"); selectionfilter filter = new selectionfilter(filterlist); autodesk.autocad.editorinput.promptselectionresult psr; psr = ed.selectfence(p3c, filter); if (psr.status == autodesk.autocad.editorinput.promptstatus.ok) { point3dcollection intersectpts = new point3dcollection(); foreach (objectid leaderid in psr.value.getobjectids()) { line line2check = (line)tr.getobject(leaderid, openmode.forread); if (line2check.objectid != line.objectid) { line.intersectwith (line2check, intersect.onbothoperands, intersectpts, 0, 0); } } } } } }