马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
已知一點點集位於多義線上,請教怎樣將點按多義線的起點,點1 點2 點3...... 點n多義線終點的順序排序.
思路:
用(vlax-curve-getDistAtPoint splineObj getPt) 求各點離起點的距離,將點集按與起點的距離從小到排列.
但不知道怎麽實現.請大家指點一下.謝謝!
將EACHY版主的函數改一下:
http://www.xdcad.net/forum/showthread.php?s=&threadid=452597
說實話,eachy版主的這個東東我看得不是很明白.我只是依葫蘆畫瓢.

- [FONT=courier new]
- (defun th1-getnearestpt (ename pts / ll p1 p2 d)
- (setq ll (vl-sort (mapcar
- '(lambda (x)
- (list (vlax-curve-getdistatpoint ename x) ename x)
- )
- pts
- ) '(lambda (e1 e2)
- (< (car e1) (car e2))
- )
- )
- )
- (setq p1 (cdar ll)
- d (caar ll)
- ll (cdr ll)
- )
- (while (equal (car (setq p2 (car ll))) d 1e-5)
- (if (not (vl-position (last p2) p1))
- (setq p1 (append
- p1
- (list (last p2))
- )
- )
- )
- (setq ll (cdr ll))
- )
- p1
- )
- ;;;返回(ename 離起點正方向最近的點)
- [/FONT]
从列表中移去指定的元素子程序:

- [FONT=courier new]
- (defun th-drop (lst item)
- (append
- (reverse (cdr (member item (reverse lst))))
- (cdr (member item lst))
- )
- )
- [/FONT]
將點集排序

- [FONT=courier new]
- (defun th-getnin2maxpts (ename ptlist / k l nearestpt ptlistmin2max)
- (if (and
- ename
- ptlisti
- )
- (progn
- (setq k -1
- l (1- (length ptlisti))
- )
- (setq ptlistmin2max '())
- (while (< k l)
- (setq nearestpt (cadr (th1-getnearestpt ename ptlisti)))
- (setq ptlisti (th-drop ptlisti nearestpt))
- (setq ptlistmin2max (cons nearestpt ptlistmin2max))
- (setq k (1+ k))
- )
- (setq ptlistmin2max (reverse ptlistmin2max))
- )
- )
- )
- [/FONT]
|