明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1517|回复: 4

[基础] [求助]求选择集里面所有线的端点有没有已知点

[复制链接]
发表于 2009-10-21 14:56:00 | 显示全部楼层 |阅读模式
请问各位大虾,怎样求选择集里面所有线(包括直线,线段,圆弧)的端点有没有已知点,这个程序要怎样写呀,本人学LSP没多久,还有劳各位指点,谢谢
发表于 2009-10-21 19:54:00 | 显示全部楼层
遍历选择集,逐个读出或计算的端点,求出已知点到计算出的端点间的距离,如果该距离小于一个略大于零的数,则选择集中的端点有已知点。
 楼主| 发表于 2009-10-22 08:17:00 | 显示全部楼层
请问版主这个编程是怎样写的,可以帮忙学一下吗?
发表于 2009-10-22 08:35:00 | 显示全部楼层

思路是:先将已知点加入一个列表1中,再将选择集里面所有线(包括直线,线段,圆弧)的端点加入一个列表2中,将列表3赋值等于列表2。遍历列表2中的元素,判断是否属于列表1,如属于,将列表3中该元素删除。遍历完成后,最后得到的列表3就是选择集里面所有线(包括直线,线段,圆弧)的端点没有已知点的列表。

下面是一个类似的例子,可参考

;;; =================================================================
;;; 优化中心线点X坐标
(defun TT-10 (ss xxx / ent ent1 i ptzhongxinx ptzhongxiny ssguol2 x1 x2 y1 y2)
  (setq ssguol2 '("ACAD_ISO04W100" "ACAD_ISO08W100"
         "CENTER" "CENTER2"
         "CENTERX2" "DASHDOT"
         "DASHDOT2" "DASHDOTX2"
        )
  )                                    ; 下面程序将中心线图层加入一个列表
  (setq ssguol2 (append
                  SSguol2
                  (TT-01 "ACAD_ISO04W100")
                  (TT-01 "ACAD_ISO08W100")
                  (TT-01 "CENTER")
                  (TT-01 "CENTER2")
                  (TT-01 "CENTERX2")
                  (TT-01 "DASHDOT")
                  (TT-01 "DASHDOT2")
                  (TT-01 "DASHDOTX2")
                )
  )                                    ; 下面程序将选择集中随层的中心线加入一个列表
  (SETQ i 0
        PTzhongxinX '()
        PTzhongxinY '()
  )
  (while (< i (sslength ss))
    (setq ent (ssname ss i))
    (setq ent1 (entget ent))
    (if (or
          (and
            (member (cdr (assoc 8 ent1)) ssguol2)
            (/= (cdr (assoc 0 ent1)) "INSERT")
            (= (assoc 6 ent1) nil)
          )
          (member (cdr (assoc 6 ent1)) ssguol2)
        )
      (progn
        (setq X1 (car (cdr (assoc 10 ent1)))
              Y1 (cadr (cdr (assoc 10 ent1)))
              X2 (car (cdr (assoc 11 ent1)))
              Y2 (cadr (cdr (assoc 11 ent1)))
        )
        (if (= Y1 Y2)
          (progn
            (setq PTzhongxinX (cons (list X1 Y1 0.0) PTzhongxinX))
            (setq PTzhongxinX (cons (list X2 Y2 0.0) PTzhongxinX))
          )
        )
        (if (= X1 X2)
          (progn
            (setq PTzhongxinY (cons (list X1 Y1 0.0) PTzhongxinY))
            (setq PTzhongxinY (cons (list X2 Y2 0.0) PTzhongxinY))
          )
        )
      )
    )
    (SETQ i (+ 1 i))
  )
  (SETQ i 0)
  (while (< i (length PTzhongxinX))
    (if (member (nth i PTzhongxinX) xxx)
      (SETQ xxx (vl-remove (nth i PTzhongxinX) xxx))
    )
    (SETQ i (+ 1 i))
  )
  xxx
)

 楼主| 发表于 2009-10-22 10:01:00 | 显示全部楼层

谢谢楼上的朋友

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-10-1 17:40 , Processed in 0.172631 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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