x_s_s_1 发表于 2011-12-7 00:02:15

请教求大量线交点是读写DXF文件速度快还是LISP中写表快

本帖最后由 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))

x_s_s_1 发表于 2011-12-7 01:08:22

不好意思,是我自己脑袋被门挤了,进入误区了,解题方式有误,应该直接求直线端点,交点的组合太多了

500w008 发表于 2011-12-7 08:16:15

hhh454 发表于 2012-5-30 20:09:03

能把你的求交点的代码,贴出来吗?我也在学习求交点的代码

x_s_s_1 发表于 2012-6-2 10:12:20

hhh454 发表于 2012-5-30 20:09 static/image/common/back.gif
能把你的求交点的代码,贴出来吗?我也在学习求交点的代码

求交点的代码上面有,我后来的处理方法是提取直线端点就行了
页: [1]
查看完整版本: 请教求大量线交点是读写DXF文件速度快还是LISP中写表快