defikol 发表于 2022-7-5 18:15:08

计算闭合多边形内的块数

你好,朋友们
 
我需要一个lisp来计算闭合多段线内的所有块。我不知道写Lisp程序。
任何帮助都将受到高度赞赏
谢谢

Tharwat 发表于 2022-7-5 18:38:37

试试这个:
 

(defun c:Test (/ s sn l i d lst p a b j k)
;; Tharwat 19.12. 2015 ;;
(princ "\nPick a LWpolyline ...")
(if (setq s (ssget "_+.:S:E" '((0 . "LWPOLYLINE"))))
   (progn (setq l (vlax-curve-getdistatparam
                  (setq sn (ssname s 0))
                  (fix (vlax-curve-getendparam sn))
                  )
                i (/ l 1000.)
                d i
          )
          (repeat 1000
            (setq lst (cons (vlax-curve-getpointatdist sn i) lst)
                  i   (+ i d)
            )
          )
          (vla-getboundingbox (vlax-ename->vla-object sn) 'j 'k)
          (if (and j k)
            (progn
            (vla-ZoomWindow
                (vlax-get-acad-object)
                j
                k
            )
            (sssetfirst nil (ssget "_CP" lst '((0 . "INSERT"))))
            )
          )
   )
)
(princ)
)(vl-load-com)

BIGAL 发表于 2022-7-5 18:50:55

Tharwat a alternative ssget“wp”lst I use a library function for the pline cords make lst then as per your code check for insert。在另一种ssget“wp”lst中,我使用库函数来制作pline跳线,然后根据您的代码检查插入。
 
2年前有一篇文章是关于普林的《寻找一切》。

defikol 发表于 2022-7-5 18:53:37

此lisp选择多段线内的所有块,而不是计数块。但我找到了我想要的lisp。谢谢大家

Tharwat 发表于 2022-7-5 19:07:07

选择块后,只需按Ctrl+1或按以下方式进行替换:
 
替换此:
 

(sssetfirst nil (ssget "_CP" lst '((0 . "INSERT"))))


(if (setq ss (ssget "_CP" lst '((0 . "INSERT"))))
(princ (strcat "\nNumber of Blocks: [ " (itoa (sslength ss)) " ]."))
)并定位变量“ss”

Lee Mac 发表于 2022-7-5 19:20:23

或者您可以使用此实用程序自动量化选择。
页: [1]
查看完整版本: 计算闭合多边形内的块数