本帖最后由 x_s_s_1 于 2011-12-7 00:23 编辑
请各位大侠指教,写了如下代码,速度奇慢无比,基本想法是在所有线交点上画圆,以前有朋友用VBA写过一个,是通过将图元写为DXF然后在DXF文件中操作的,速度很快。不知为何?按道理LISP写表应该快一些
 - (vl-load-com)
- ;;;以下代码来自bbs.mjtd.com
- ;;;计算曲线交点
- (defun Curveinters (en1 en2 / pl pts)
- (setq pl (vlax-invoke (vlax-ename->vla-object en2) 'IntersectWith (vlax-ename->vla-object en1) acExtendNone))
- (while pl
- (setq pts (append pts (list (list (car pl) (cadr pl) (caddr pl))))
- pl (cdr (cdr (cdr pl)))
- )
- )
- pts
- )
- ;;;曲线选择集交点
- (defun ssinters (ss / pts en1 en2)
- (while (> (sslength ss) 1)
- (setq en1 (ssname ss 0))
- (ssdel en1 ss)
- (setq n (sslength ss))
- (repeat n
- (setq en2 (ssname ss (setq n (1- n))))
- (setq pts (append pts (Curveinters en1 en2)))
- )
- )
- pts
- )
- ;;;删除表中重复图元.不支持表中表的重复图元.
- ;;; (gps->lst-delsame '(1 2 1 2 (1 1) (1 2 1 2 1) 1 2 (1 1) (1 2)))
- ;;; -->(1 2 (1 1) (1 2 1 2 1) (1 2))
- (defun gps->lst-delsame (lst / lstitem lstnew)
- (foreach lstitem lst
- (if (not (member lstitem lstnew))
- (setq lstnew (append lstnew (list lstitem)))
- )
- )
- lstnew
- )
- ;;;以上代码来自bbs.mjtd.com
- (setq ss (ssget))
- (setq ptlst (gps->lst-delsame (ssinters ss)))
- (foreach pt ptlst (command "circle" pt 100))
|