波涛 发表于 2005-12-15 15:27:00

[VBA]『紧急求助』自动剪切程序

<P>&nbsp;&nbsp; 本人是从事测绘工作的,经常处理测绘地形图,需要在地形图上进行剪切图形,通过选择一条封闭的多义线,自动把范围内的图形经过剪切写块写出来,现遇到一个问题:在选择到多义线后,如何把与范围线相交的可以剪切的实体进行剪切,我已经能编写到</P>
<P>ThisDrawing.SendCommand "_trim" &amp; vbCr &amp; det1 &amp; vbCr &amp; vbCr &amp; det2 &amp; vbCr &amp; vbCr</P>
<P>det1-----为范围线,det2-----为被剪切对象的点,现在的问题是怎样得到det2,不是通过屏幕点取,而是程序自动求得</P>
<P>在此先谢谢各位,我的邮箱:sunrj-jn@163.com</P>

波涛 发表于 2005-12-15 21:27:00

有哪位高手给指点一下迷津,在下不胜感激

波涛 发表于 2005-12-17 12:44:00

我的帖子好几天了,也没人理我,是大家不感兴趣,还是别的原因,现我已经找到答案了,如果哪位想知道的话,我们可以交流。

小顽童 发表于 2005-12-18 00:20:00

<P>我想知道,我们交流下可以吗?</P>

clement 发表于 2005-12-21 19:44:00

波涛发表于2005-12-17 12:44:00static/image/common/back.gif我的帖子好几天了,也没人理我,是大家不感兴趣,还是别的原因,现我已经找到答案了,如果哪位想知道的话,我们可以交流。


<P><BR>楼主获取交点是不是用的类似下面的方法:</P>
<P>objEnt.IntersectWith(objSelect, acExtendNone)</P>

jsnjwang 发表于 2005-12-28 12:24:00

<P><BR>(DEFUN C:CT()<BR>(SETQ largeExtentLine (CAR (ENTSEL "请选择范围线:")))</P>
<P>(IF largeExtentLine<BR>(progn<BR>(PRINC "\n请稍侯...")<BR>(SETQ Old_LineType (GETVAR "PLINETYPE"))<BR>(SETVAR "PLINETYPE" 2)(SETVAR "CMDECHO" 0)(SETVAR "OSMODE" 0)(SETVAR "CLAYER" "0")<BR>(COMMAND "ZOOM" "E" "CONVERT" "P" "")</P>
<P>;;;;;由外范围线得到外扩线的各节点的坐标表及最大和最小坐标<BR>(SETQ newCoordnateList (GetListOfPline0 largeExtentLine))<BR>;;(SETQ largeMaxMinBLTR (GetCoordnateOfBLTR0 newCoordnateList))</P>
<P><BR>;;;;炸碎与已知多义线相交的图块和Region和Hatch<BR>(EXPLODEBYFENCE0 newCoordnateList)<BR>;;;;炸碎完毕</P>
<P>;;;;裁剪所有图外实体<BR>(SETQ SSout (TrimByFence0 newCoordnateList))<BR>;;;;裁剪完毕</P>
<P>(COMMAND "zoom" "e" "PURGE" "A" "" "N" "PURGE" "A" "" "N")<BR>(SETVAR "PLINETYPE" Old_LineType)<BR>(SETVAR "CLAYER" "0")<BR>(princ "\n裁切完毕!")(princ)<BR>)<BR>(progn<BR>(princ "\n没有选择范围线!!")(princ)<BR>)<BR>)</P>
<P><BR>)</P>
<P>(DEFUN DeleteSetFromSet(firstSet secondSet / firstNum Setobjsequence)<BR>(SETQ firstNum (SSLENGTH firstSet))<BR>(SETQ Setobjsequence 0)<BR>(REPEAT firstNum<BR>(SSDEL (SSNAME firstSet Setobjsequence) secondSet)<BR>(SETQ Setobjsequence (+ Setobjsequence 1))<BR>)<BR>(IF (&gt; (SSLENGTH secondSet) 0)<BR>(SETQ secondSet secondSet)<BR>(SETQ secondSet NIL)<BR>)<BR>(SETQ secondSet secondSet)<BR>)</P>
<P>(DEFUN GetLwPlineFromList(knownCoordList / newCoordList MainPline)<BR>(SETVAR "PLINETYPE" 2)<BR>(COMMAND "._PLINE")<BR>(FOREACH newCoordList knownCoordList (COMMAND newCoordList))<BR>(COMMAND "C")<BR>(SETQ MainPline (ENTLAST))<BR>)</P>
<P>(DEFUN GetListOfPline(EntityName / SSE_Pline Coordnate_Vertex LastList)<BR>(SETQ SSE_Pline (ENTGET EntityName))<BR>(SETQ LastList nil)<BR>(IF (= (CDR (ASSOC 0 SSE_Pline)) "LWPOLYLINE")<BR>(PROGN<BR>(SETQ LastList (LIST (LIST 0 0)))<BR>(SETQ N 0)<BR>(WHILE (/= (NTH N SSE_PLINE) NIL) <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (IF (= (CAR (NTH N SSE_PLINE)) 10)<BR>&nbsp;&nbsp; (SETQ LastList (APPEND LastList (LIST (LIST (CADR (NTH N SSE_PLINE)) (CADDR (NTH N SSE_PLINE)))) ))<BR>&nbsp; )<BR>&nbsp; (SETQ N (+ N 1))<BR>)<BR>(SETQ LastList (CDR LastList))<BR>)<BR>)<BR>(IF (= (CDR (ASSOC 0 SSE_Pline)) "POLYLINE")<BR>(PROGN<BR>(SETQ LastList (LIST (LIST 0 0)))<BR>(SETQ newEntityName (ENTNEXT EntityName))<BR>(WHILE (= (CDR (ASSOC 0 (ENTGET newEntityName))) "VERTEX")<BR>&nbsp; (SETQ LastList (APPEND LastList (LIST (LIST (CADR (ASSOC 10 (ENTGET newEntityName))) (CADDR (ASSOC 10 (ENTGET newEntityName))) )) ))<BR>&nbsp; (SETQ newEntityName (ENTNEXT newEntityName))<BR>)<BR>(SETQ LastList (CDR LastList))<BR>)<BR>)<BR>(SETQ LastList LastList)<BR>)</P>
<P>(DEFUN GetCoordnateOfBLTR(knownCoordList / CurrenPoint Xmin Ymin Xmax Ymax nowCoordnateList)<BR>(SETQ nowCoordnateList knownCoordList)<BR>(SETQ CurrenPoint (CAR nowCoordnateList)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Xmin (CAR CurrenPoint)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Ymin (CADR CurrenPoint)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Xmax (CAR CurrenPoint)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Ymax (CADR CurrenPoint))<BR>(SETQ nowCoordnateList (CDR nowCoordnateList))<BR>(WHILE (/= nowCoordnateList nil)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (SETQ CurrenPoint (CAR nowCoordnateList))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (IF (&lt; (CAR CurrenPoint) Xmin) (SETQ Xmin (CAR CurrenPoint)))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (IF (&lt; (CADR CurrenPoint) Ymin) (SETQ Ymin (CADR CurrenPoint)))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (IF (&gt; (CAR CurrenPoint) Xmax) (SETQ Xmax (CAR CurrenPoint)))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (IF (&gt; (CADR CurrenPoint) Ymax) (SETQ Ymax (CADR CurrenPoint)))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (SETQ nowCoordnateList (CDR nowCoordnateList))<BR>)<BR>(SETQ nowCoordnateList (LIST (LIST Xmin Ymin)(LIST Xmax Ymax)))<BR>) </P>
<P>(DEFUN ExplodeByFence(knownCoordList)<BR>(SETQ INSERT_SS (SSGET "F" (APPEND knownCoordList (LIST (NTH 0 knownCoordList))) (LIST (CONS 0 "INSERT")))) ;;将LwPolyline首尾相连append<BR>(IF INSERT_SS<BR>&nbsp;&nbsp;&nbsp; (PROGN<BR>&nbsp;&nbsp;&nbsp; (SETQ NUMBER_INSERT (SSLENGTH INSERT_SS))<BR>&nbsp;&nbsp;&nbsp; (SETQ NUM 0)<BR>&nbsp;&nbsp;&nbsp; (REPEAT NUMBER_INSERT<BR>(COMMAND "EXPLODE" (SSNAME INSERT_SS NUM))<BR>(SETQ NUM (+ NUM 1))<BR>&nbsp;&nbsp;&nbsp; )<BR>&nbsp;&nbsp;&nbsp; )<BR>)<BR>)</P>
<P>(DEFUN ExplodeAllBLK()<BR>(SETQ AllBLK (SSGET "X" (LIST (CONS 0 "INSERT"))))<BR>(WHILE (/= AllBLK NIL)<BR>(SETQ NumOfAllBLK (SSLENGTH AllBLK))<BR>(SETQ BLKSequence 0)<BR>(REPEAT NumOfAllBLK<BR>&nbsp; (COMMAND "EXPLODE" (SSNAME AllBLK BLKSequence))<BR>&nbsp; (SETQ BLKSequence (+ BLKSequence 1))<BR>)<BR>;;; (COMMAND "EXPLODE" AllBLK)<BR>(SETQ AllBLK (SSGET "X" (LIST (CONS 0 "INSERT"))))<BR>)<BR>)</P>
<P>(DEFUN TrimByFence(knownCoordList / Count OFFSETDIST BoundaryLine newExtent newCoordList COORD objsequence)<BR>(SETVAR "PLINETYPE" 2)<BR>(SETQ Count 0)<BR>(COMMAND "ZOOM" "E")<BR>(REPEAT 21<BR>(SETQ OFFSETDIST (- 2 (* 0.095 Count)))<BR>(SETQ BoundaryLine (GetLwPlineFromList knownCoordList))<BR>(COMMAND "OFFSET" OFFSETDIST BoundaryLine "-1000,-1000" "")<BR>(SETQ newExtent (ENTLAST))</P>
<P>(SETQ newCoordList (GetListOfPline newExtent) )<BR>(SETQ objsequence 0)</P>
<P>(SETQ COORD (NTH objsequence newCoordList))<BR>(COMMAND "TRIM" BoundaryLine "" "F")<BR>(WHILE COORD<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (COMMAND COORD)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (SETQ objsequence (+ objsequence 1))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (SETQ COORD (NTH objsequence newCoordList))<BR>)<BR>(SETQ COORD (NTH 0 newCoordList))<BR>(COMMAND COORD "" "" "ERASE" BoundaryLine newExtent "")<BR>(SETQ Count (+ Count 1))<BR>)<BR>(SETQ p1 (nth 0 newcoordlist))<BR>(SETQ newcoordlist (append newcoordlist (list p1)))<BR>(SETQ ss-leave (ssget "F" newCoordList))<BR>(IF ss-leave<BR>(COMMAND "erase" ss-leave "")<BR>)<BR>)</P>
<P><BR>(DEFUN GetListOfPline0(EntityName / SSE_Pline Coordnate_Vertex LastList)<BR>(SETQ SSE_Pline (ENTGET EntityName))<BR>(SETQ LastList nil)</P>
<P>(IF (= (CDR (ASSOC 0 SSE_Pline)) "LINE")<BR>(PROGN<BR>(setq p1 (cdr (assoc 10 sse_pline))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; p2 (cdr (assoc 11 sse_pline)))<BR>(setq p1 (reverse (cdr (reverse p1)))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; p2 (reverse (cdr (reverse p2))))<BR>(SETQ LastList (list p1 p2))<BR>)<BR>)</P>
<P>(IF (= (CDR (ASSOC 0 SSE_Pline)) "LWPOLYLINE")<BR>(PROGN<BR>(SETQ LastList (LIST (LIST 0 0)))<BR>(SETQ N 0)<BR>(WHILE (/= (NTH N SSE_PLINE) NIL) <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (IF (= (CAR (NTH N SSE_PLINE)) 10)<BR>&nbsp;&nbsp; (SETQ LastList (APPEND LastList (LIST (LIST (CADR (NTH N SSE_PLINE)) (CADDR (NTH N SSE_PLINE)))) ))<BR>&nbsp; )<BR>&nbsp; (SETQ N (+ N 1))<BR>)<BR>(SETQ LastList (CDR LastList))<BR>)<BR>)</P>
<P><BR>(IF (= (CDR (ASSOC 0 SSE_Pline)) "POLYLINE")<BR>(PROGN<BR>(SETQ LastList (LIST (LIST 0 0)))<BR>(SETQ newEntityName (ENTNEXT EntityName))<BR>(WHILE (= (CDR (ASSOC 0 (ENTGET newEntityName))) "VERTEX")<BR>&nbsp; (SETQ LastList (APPEND LastList (LIST (LIST (CADR (ASSOC 10 (ENTGET newEntityName))) (CADDR (ASSOC 10 (ENTGET newEntityName))) )) ))<BR>&nbsp; (SETQ newEntityName (ENTNEXT newEntityName))<BR>)<BR>(SETQ LastList (CDR LastList))<BR>)<BR>)<BR>(IF (= (CDR (ASSOC 0 SSE_Pline)) "ARC")<BR>(PROGN<BR>(SETQ LastList (LIST (LIST 0 0)))<BR>(COMMAND "PEDIT" EntityName "Y" "" "CONVERT" "P" "S" (ENTLAST) "")<BR>(SETQ SSE_Pline (ENTGET (ENTLAST)))<BR>(SETQ N 0)<BR>(WHILE (/= (NTH N SSE_PLINE) NIL) <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (IF (= (CAR (NTH N SSE_PLINE)) 10)<BR>&nbsp;&nbsp; (SETQ LastList (APPEND LastList (LIST (LIST (CADR (NTH N SSE_PLINE)) (CADDR (NTH N SSE_PLINE)))) ))<BR>&nbsp; )<BR>&nbsp; (SETQ N (+ N 1))<BR>)<BR>(SETQ LastList (CDR LastList))<BR>(COMMAND "UNDO" 2)<BR>))<BR>(IF (= (CDR (ASSOC 0 SSE_Pline)) "CIRCLE")<BR>(PROGN<BR>(SETQ Ra1 (CDR (assoc 40 SSE_Pline)))<BR>(SETQ P-Center (CDR (assoc 10 SSE_Pline)))<BR>(SETQ P1 (POLAR P-Center 0 Ra1))<BR>(SETQ P2 (POLAR P-Center (* PI 0.5) Ra1))<BR>(SETQ P3 (POLAR P-Center (* PI 1.0) Ra1))<BR>(SETQ P4 (POLAR P-Center (* PI 1.5) Ra1))<BR>(SETQ LastList (LIST P1 P2 P3 P4))<BR>))<BR>(SETQ LastList LastList)<BR>)</P>
<P><BR>(DEFUN ExplodeAllBLK0()<BR>(SETQ AllBLK (SSGET "X" (LIST (CONS 0 "INSERT"))))<BR>(WHILE (/= AllBLK NIL)<BR>(SETQ NumOfAllBLK (SSLENGTH AllBLK))<BR>(SETQ BLKSequence 0)<BR>(REPEAT NumOfAllBLK<BR>&nbsp; (COMMAND "EXPLODE" (SSNAME AllBLK BLKSequence))<BR>&nbsp; (SETQ BLKSequence (+ BLKSequence 1))<BR>)<BR>;;; (COMMAND "EXPLODE" AllBLK)<BR>(SETQ AllBLK (SSGET "X" (LIST (CONS 0 "INSERT"))))<BR>)<BR>)</P>
<P>(DEFUN TrimByFence0(knownCoordList / Count OFFSETDIST BoundaryLine newExtent newCoordList COORD objsequence)<BR>(SETVAR "PLINETYPE" 2)<BR>(SETQ Count 0)<BR>(COMMAND "ZOOM" "E")</P>
<P>(REPEAT 21<BR>(SETQ OFFSETDIST (- 2 (* 0.095 Count)))<BR>(SETQ BoundaryLine (GetLwPlineFromList0 knownCoordList))<BR>(COMMAND "OFFSET" OFFSETDIST BoundaryLine "-1000,-1000" "")<BR>(SETQ newExtent (ENTLAST))</P>
<P>(SETQ newCoordList (GetListOfPline0 newExtent) )<BR>(SETQ objsequence 0)</P>
<P>(SETQ COORD (NTH objsequence newCoordList))<BR>(COMMAND "TRIM" BoundaryLine "" "F")<BR>(WHILE COORD<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (COMMAND COORD)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (SETQ objsequence (+ objsequence 1))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (SETQ COORD (NTH objsequence newCoordList))<BR>)<BR>(SETQ COORD (NTH 0 newCoordList))<BR>(COMMAND COORD "" "" "ERASE" BoundaryLine newExtent "")<BR>(SETQ Count (+ Count 1))<BR>)</P>
<P><BR>(SETQ Count 0)<BR>(REPEAT 10<BR>(SETQ OFFSETDIST (- 0.1 (* 0.01 Count)))<BR>(SETQ BoundaryLine (GetLwPlineFromList0 knownCoordList))<BR>(COMMAND "OFFSET" OFFSETDIST BoundaryLine "-1000,-1000" "")<BR>(SETQ newExtent (ENTLAST))</P>
<P>(SETQ newCoordList (GetListOfPline0 newExtent) )<BR>(SETQ objsequence 0)</P>
<P>(SETQ COORD (NTH objsequence newCoordList))</P>
<P>(COMMAND "TRIM" BoundaryLine "" "F")<BR>(WHILE COORD<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (COMMAND COORD)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (SETQ objsequence (+ objsequence 1))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (SETQ COORD (NTH objsequence newCoordList))<BR>)<BR>(SETQ COORD (NTH 0 newCoordList))<BR>(COMMAND COORD "" "" )</P>
<P>(COMMAND "ERASE" BoundaryLine newExtent "")<BR>(SETQ Count (+ Count 1))<BR>)</P>
<P>(setq CenterSeg (GetCoordnateOfBLTR0 knownCoordList))<BR>(setq point-BL (car CenterSeg)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; point-TR (cadr CenterSeg))<BR>(setq Xmax (car point-TR)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Ymax (cadr point-TR)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Xmin (car point-BL)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Ymin (cadr point-BL))<BR>&nbsp; <BR>(setq point-Center (list (/ (+ (car point-BL) (car point-TR)) 2) (/ (+ (cadr point-BL) (cadr point-TR)) 2)))</P>
<P>(SETQ BoundaryLine (GetLwPlineFromList0 knownCoordList))<BR>(COMMAND "OFFSET" "0.01" BoundaryLine point-Center "")<BR>(SETQ newExtent (ENTLAST))<BR>(setq In-CoordList (GetListOfPline0 (ENTLAST)))<BR>(COMMAND "ERASE" BoundaryLine newExtent "")</P>
<P>(setq p1 (nth 0 newcoordlist))<BR>(setq newcoordlist (append newcoordlist (list p1)))</P>
<P>;;;;ss-Wider为宽度大于0的线<BR>(setq ss-Wider (ssget "F" newCoordList<BR>&nbsp; '((-4 . "&lt;or")<BR>&nbsp;&nbsp; (-4 . "&lt;and")<BR>&nbsp;&nbsp;&nbsp; (-4 . "&lt;or")<BR>&nbsp;&nbsp;&nbsp;&nbsp; (0 . "LINE")(0 . "POLYLINE")(0 . "LWPOLYLINE")<BR>&nbsp;&nbsp;&nbsp; (-4 . "or&gt;")<BR>&nbsp;&nbsp;&nbsp; (-4 . "&lt;or")<BR>&nbsp;&nbsp;&nbsp;&nbsp; (-4 . "&gt;")(40 . 0.0)(-4 . "&gt;")(41 . 0.0) <BR>&nbsp;&nbsp;&nbsp; (-4 . "or&gt;")&nbsp; <BR>&nbsp;&nbsp; (-4 . "and&gt;")<BR>&nbsp; (-4 . "or&gt;"))<BR>))<BR>(setq Num-Wider 0) ;;;;;Num-Wider为宽度大于0的线段<BR>(if ss-Wider<BR>&nbsp;&nbsp;&nbsp; (progn<BR>&nbsp; (setq i 0)<BR>&nbsp; (setq Num-Wider (sslength ss-Wider))<BR>&nbsp; (repeat Num-Wider<BR>&nbsp;&nbsp;&nbsp;&nbsp; (setq ss-every (ssname ss-Wider i))<BR>&nbsp;&nbsp;&nbsp;&nbsp; (setq sse-every (entget ss-every))<BR>&nbsp;&nbsp;&nbsp;&nbsp; (command "pedit" ss-every "w" "0" "")<BR>&nbsp;&nbsp;&nbsp;&nbsp; (setq i (+ i 1))<BR>&nbsp; )<BR>&nbsp;&nbsp;&nbsp; )<BR>)</P>
<P><BR>(setq ss-must-delete (ssget "F" newCoordList<BR>&nbsp; '((-4 . "&lt;or")<BR>&nbsp;&nbsp; (0 . "LINE")(0 . "LWPOLYLINE")(0 . "POLYLINE")(0 . "ARC")(0 . "CIRCLE")<BR>&nbsp; (-4 . "or&gt;"))<BR>))</P>
<P>(setq ss-must-keep nil)<BR>(SETQ ss-must-keep (SSGET "CP" In-CoordList))<BR>(if (= ss-must-keep nil)<BR>&nbsp; (setq ss-must-keep (ssadd))<BR>)</P>
<P>(if (&gt; Num-Wider 0)<BR>&nbsp; (command "undo" Num-Wider)<BR>)</P>
<P>(if ss-must-delete<BR>&nbsp; (command "erase" ss-must-delete "r" ss-must-keep "")<BR>)</P>
<P><BR>(SETQ SS1 (SSGET "CP" knownCoordList)) ;;;;;;ss1为所有范围内实体<BR>(IF (= SS1 nil)<BR>&nbsp; (COMMAND "ERASE" "all" "")<BR>&nbsp; (COMMAND "ERASE" "all" "R" SS1 "")<BR>)&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp; ;;;;删除完毕<BR>***********************************************************************************<BR>)</P>
<P><BR>(DEFUN ExplodeByFence0(knownCoordList)</P>
<P>(SETQ INSERT_SS (SSGET "F" (APPEND knownCoordList (LIST (NTH 0 knownCoordList))) <BR>'((-4 . "&lt;or")<BR>&nbsp; (0 . "INSERT")<BR>&nbsp; (0 . "HATCH")<BR>&nbsp; (0 . "REGION") <BR>(-4 . "or&gt;"))<BR>));;;</P>
<P><BR>(IF INSERT_SS<BR>&nbsp;&nbsp;&nbsp; (PROGN<BR>&nbsp;&nbsp;&nbsp; (SETQ NUMBER_INSERT (SSLENGTH INSERT_SS))<BR>&nbsp;&nbsp;&nbsp; (SETQ NUM 0)<BR>&nbsp;&nbsp;&nbsp; (REPEAT NUMBER_INSERT<BR>(COMMAND "EXPLODE" (SSNAME INSERT_SS NUM))<BR>(SETQ NUM (+ NUM 1))<BR>&nbsp;&nbsp;&nbsp; )<BR>&nbsp;&nbsp;&nbsp; )<BR>)<BR>)</P>
<P>(DEFUN GetLwPlineFromList0(knownCoordList / newCoordList MainPline)<BR>(SETVAR "PLINETYPE" 2)<BR>(COMMAND "._PLINE")<BR>(FOREACH newCoordList knownCoordList (COMMAND newCoordList))<BR>(COMMAND "C")<BR>(SETQ MainPline (ENTLAST))<BR>)</P>
<P><BR>(DEFUN GetCoordnateOfBLTR0(knownCoordList / CurrenPoint Xmin Ymin Xmax Ymax nowCoordnateList)<BR>(SETQ nowCoordnateList knownCoordList)<BR>(SETQ CurrenPoint (CAR nowCoordnateList)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Xmin (CAR CurrenPoint)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Ymin (CADR CurrenPoint)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Xmax (CAR CurrenPoint)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Ymax (CADR CurrenPoint))<BR>(SETQ nowCoordnateList (CDR nowCoordnateList))<BR>(WHILE (/= nowCoordnateList nil)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (SETQ CurrenPoint (CAR nowCoordnateList))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (IF (&lt; (CAR CurrenPoint) Xmin) (SETQ Xmin (CAR CurrenPoint)))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (IF (&lt; (CADR CurrenPoint) Ymin) (SETQ Ymin (CADR CurrenPoint)))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (IF (&gt; (CAR CurrenPoint) Xmax) (SETQ Xmax (CAR CurrenPoint)))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (IF (&gt; (CADR CurrenPoint) Ymax) (SETQ Ymax (CADR CurrenPoint)))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (SETQ nowCoordnateList (CDR nowCoordnateList))<BR>)<BR>(SETQ nowCoordnateList (LIST (LIST Xmin Ymin)(LIST Xmax Ymax)))<BR>) </P>

波涛 发表于 2005-12-28 20:37:00

<P>谢谢6楼的无私奉献,由于我是用VBA编写,对lisp不太熟,但大体能看懂一点,与我后来找到的答案类似。由于没带代码,我就把思路说一下:</P>
<P>1。先选择范围线;</P>
<P>2。把范围线用0ffset命令向外偏移0.01(删除范围内的向内偏移0.01);</P>
<P>3。取出偏移线的各个顶点坐标;</P>
<P>4。利用trim命令的栏选(F)功能,就可以把所有能剪切的实体全部剪切掉</P>

波涛 发表于 2005-12-28 20:42:00

IntersectWith 是必须在同一个面才能取得交点,往往地形图都是有高程的,很难取得交点

ljq 发表于 2006-1-3 13:50:00

<P>cad扩展中有现成的命令extrim</P>

mycad 发表于 2006-1-3 16:09:00

cad2006中无extrim吗
页: [1] 2
查看完整版本: [VBA]『紧急求助』自动剪切程序