明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 591|回复: 1

[提问] 如下生成中线的程序,如何修改,使得生成中线后程序不自动停止,可以继续选线生成

[复制链接]
发表于 2018-7-10 12:27 | 显示全部楼层 |阅读模式
如下生成中线的程序,如何修改,使得生成中线后程序不自动停止,可以继续选线生成中线

(defun c:SCZX( / e1 e2 ent1 ent2  pt1 pt2 ssl)
(setq ssL (ss->LST (ssget '((0 . "LINE")))))
  (while (setq  ent1 (car ssl))
         (setq pt1 (cdr (assoc 10 (entget ent1))))
         (setq pt2 (cdr (assoc 11 (entget ent1))))
         (setq ssl (cdr ssl))
         (setq ent2 (last (vl-sort ssl (function (lambda (e1 e2) (> (distance pt1 (vlax-curve-getClosestPointTo e1 pt1))    (distance pt1 (vlax-curve-getClosestPointTo e2 pt1)) ))))))
         (setq ssl (vl-remove ent2 ssl))
         (center-line  ent1 ent2 )
    )  
)

(defun ss->LST ( ss / i l )
    (if ss
        (repeat (setq i (sslength ss))
            (setq l (cons (ssname ss (setq i (1- i))) l))
        )
    )
)

(defun center-line (x1 x2 /  m1 m2 pt1 pt2 pt3 pt4)
(setq pt1 (cdr (assoc 10 (entget x1)))
       pt2 (cdr (assoc 11 (entget x1)))
       pt3 (cdr (assoc 10 (entget x2)))
       pt4 (cdr (assoc 11 (entget x2)))
)
  (if (inters pt1 pt4 pt2 pt3)
    (progn (setq m1 (mapcar (function (lambda ( a b ) (/ (+ a b) 2.0))) pt1 pt3)
                 m2 (mapcar (function (lambda ( a b ) (/ (+ a b) 2.0))) pt2 pt4))
    )
    (progn (setq m1 (mapcar (function (lambda ( a b ) (/ (+ a b) 2.0))) pt1 pt4)
                 m2 (mapcar (function (lambda ( a b ) (/ (+ a b) 2.0))) pt2 pt3))
    ))
  (entmakex (list (cons 0 "LINE")  (cons 10 m1)(cons 62 1)(cons 8 "中心线")(cons 11 m2)))


  )

发表于 2018-7-11 09:04 | 显示全部楼层
加个while就好  
可能不是最好的方法 不过能实现

(defun c:SCZX( / aa e1 e2 ent1 ent2  pt1 pt2 ssl)
  (setq aa (ssget '((0 . "LINE"))))
  (while aa
    (setq ssL (ss->LST aa))
    (while (setq  ent1 (car ssl))
      (setq pt1 (cdr (assoc 10 (entget ent1))))
      (setq pt2 (cdr (assoc 11 (entget ent1))))
      (setq ssl (cdr ssl))
      (setq ent2 (last (vl-sort ssl (function (lambda (e1 e2) (> (distance pt1 (vlax-curve-getClosestPointTo e1 pt1))    (distance pt1 (vlax-curve-getClosestPointTo e2 pt1)) ))))))
      (setq ssl (vl-remove ent2 ssl))
      (center-line  ent1 ent2 )
      )
    (princ "\n 继续选择:")
    (setq aa (ssget '((0 . "LINE"))))
    )
  (print)
  )
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-4-20 08:10 , Processed in 0.437965 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表