马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
編了個交點處打斷,有錯.請各位指點一下!
程序思路:
1.先求實體交點表.
2.對選擇集中的每個實體,看哪些點在這個實體上.
3.將在這個實體上的點進行按離起點的距離排序.(正方向)
4.先將離起點近的實體打斷.用entlast求得離起點較遠的部,再從離起點近的點開始打斷.
主程序:

- [FONT=courier new]
- (defun th-breakatintersec (ss / ename i j k l m n ptj ptlist ptlisti
- ptlistmin2max ssnamei
- )
- (if (= ss nil)
- (setq ss (ssget '((0 . "*LINE,ARC"))))
- )
- (if (setq ptlist (th2-ssinters ss))
- (progn
- (setq i -1
- j -1
- m (1- (sslength ss))
- n (1- (length ptlist))
- )
- (while (< i m)
- (setq ssnamei (ssname ss (setq i (1+ i))))
- (setq ptlisti '())
- (while (< j n)
- (setq ptj (nth (setq j (1+ j))
- ptlist
- )
- )
- (if (vlax-curve-getdistatpoint ssnamei ptj)
- (setq ptlisti (cons ptj ptlisti))
- )
- )
- (if ptlisti
- (progn
- (setq ptlistmin2max (th-getnin2maxpts ssnamei ptlisti)
- k 1
- l (1- (length ptlistmin2max))
- )
- (while (< k l)
- (command "break" ssnamei (nth (setq k (1+ k))
- ptlistmin2max
- ) "@"
- )
- (setq ssnamei (entlast))
- )
- )
- )
- )
- )
- )
- )
- [/FONT]
求交點集子程序(函數庫裏有,改了個名):

- [FONT=courier new]
- (defun th2-ssinters (ss / ss ssl pts aobj1 aobj2
- n1 n2 ipts a n nn
- holdosmode
- )
- (vl-load-com)
- (setq holdosmode (getvar "OSMODE"))
- (setvar "OSMODE" 0)
- (if (= nil ss)
- (setq ss (ssget '((0 . "*LINE,ARC,CIRCLE,ELLIPSE"))))
- )
- (setq n1 0
- ssl (sslength ss)
- )
- (while (< n1 (1- ssl))
- (setq aobj1 (ssname ss n1)
- aobj1 (vlax-ename->vla-object aobj1)
- n2 (1+ n1)
- )
- (while (< n2 ssl)
- (setq aobj2 (ssname ss n2)
- aobj2 (vlax-ename->vla-object aobj2)
- ipts (vla-intersectwith aobj1 aobj2 acextendnone)
- ipts (vlax-variant-value ipts)
- )
- (if (> (vlax-safearray-get-u-bound ipts 1) 0)
- (progn
- (setq ipts (vlax-safearray->list ipts))
- (while (> (length ipts) 0)
- (setq pts (cons (list (car ipts) (cadr ipts) (caddr ipts)) pts)
- ipts (cdddr ipts)
- )
- )
- )
- )
- (setq n2 (1+ n2))
- )
- (setq n1 (1+ n1))
- )
- (setvar "OSMODE" holdosmode)
- pts
- )
- [/FONT]
子程序 點集排序:
http://www.xdcad.net/forum/showthread.php?s=&threadid=518698
還有點問題
1.只能把第一實體打斷
2.對於閉合多義線,會將起點處打斷(本意只將交點打斷) |