Miller87 发表于 2022-7-5 20:40:17

 
我发现这是你的旧代码,稍加修改就可以了。
仍然存在一些错误,并且没有进行优化。
 

(defun c:VHlines ( / _Ang *error* kw e i sn ss )
;;; Tharwat 13. Dec. 2012;;;
;;; modified by miller87 27/04/2015
(defun _Ang (e) (angle (cddr (assoc 10 e)) (cddr (assoc 11 e))))
(defun *error* (msg) (princ "\n Error...*Cancelled*"))
(if (and (progn
               (setq kw "Vertical"
               )
          )
          (setq s(ssadd)
                ss (ssget "_x" (list '(0 . "LINE") (cons 410 (getvar 'ctab))))
          )
   )
   (progn
   (repeat (setq i (sslength ss))
       (setq sn (ssname ss (setq i (1- i)))
             e(entget sn)
       )
       (cond ((eq kw "Vertical")
            (if (or (equal (_Ang e) (* pi 0.5)) (equal (_Ang e) (* pi 1.5)))
                (ssadd sn s)
            )
             )
             ((eq kw "Horizontal")
            (if (or (equal (_Ang e) pi) (equal (_Ang e) 0.))
                (ssadd sn s)
            )
             )
             (t
            (if (or (equal (_Ang e) (* pi 0.5)) (equal (_Ang e) (* pi 1.5)) (equal (_Ang e) pi) (equal (_Ang e) 0.))
                (ssadd sn s)
            )
             )
       )
   )
   (sssetfirst nil s)
   )
)
(princ)
)

David Bethel 发表于 2022-7-5 20:46:57

也许 吧:
 

(defun c:mvert (/ ss i en ed p1 p2 z1 z2 ll ip bn)
(and (setq ss (ssget "X" '((0 . "LINE"))))
   (setq i 0)
   (while (setq en (ssname ss i))
            (setq ed (entget en)
                  p1 (cdr (assoc 10 ed))
                  p2 (cdr (assoc 11 ed)))
            (and (equal (carp1) (carp2) 1e-8)
               (equal (cadr p1) (cadr p2) 1e-8)
               (setq z1 (caddr p1)
                     z2 (caddr p2)
                     ll (abs (- z1 z2))
                     ip (list (car p1) (cadr p2) (+ (min z1 z2) (* ll 0.5)))
                     bn (strcat "M" (rtos ll 2 0)))
               (tblsearch "BLOCK" bn)
               (entmake (list (cons 0 "INSERT")(cons 2 bn)(cons 10 ip))))
            (setq i (1+ i))))
(prin1))

 
 
插入角度没有意义,因为所有线点值都是WCS。
 
-大卫

Miller87 发表于 2022-7-5 20:50:23

作品
我用我的块的正确名称进行了修改:
50M、100M、150M、200M、250M、300M
以下是最终结果:

(defun c:mvert (/ )
(and (setq ss (ssget "X" '((0 . "LINE"))))
   (setq i 0)
   (while (setq en (ssname ss i))
            (setq ed (entget en)
                  p1 (cdr (assoc 10 ed))
                  p2 (cdr (assoc 11 ed)))
            (and (equal (carp1) (carp2) 1e-
               (equal (cadr p1) (cadr p2) 1e-
               (setq z1 (caddr p1)
                     z2 (caddr p2)
                     ll (/ (abs (- z1 z2)) 10.0)
                lll (* ll 10.0)
                     ip (list (car p1) (cadr p2) (+ (min z1 z2) (* lll 0.5)))
                     bn (strcat(rtos ll 2 0) "M"))
               (tblsearch "BLOCK" bn)
               (entmake (list (cons 0 "INSERT")(cons 2 bn)(cons 10 ip))))
            (setq i (1+ i))))
(prin1)

)

 
我可以更改块的名称,但操纵lisp更令人愉快!!
谢谢David

David Bethel 发表于 2022-7-5 20:53:27

英雄联盟
 
我确实假设块表定义存在。
 
您始终可以添加块创建或插入调用
 
-戴维斯
页: 1 [2]
查看完整版本: 在li的中点插入块