hosyn 发表于 2022-7-5 18:39:48

在上的每个夹点处放置一个挡块

该代码在pline的每个夹点中添加了圆圈:




(defun c:foo ()
   (vl-load-com)
   (setq *model-space* (vla-get-modelspace (vla-get-activedocument (vlax-get-acad-object))))
   (setq obj (vlax-ename->vla-object (car (entsel))))
   (setq c (vlax-get obj "Coordinates") i 0)
   (repeat (/ (length c) 2)
(setq x (nth i c) y (nth (1+ i) c))
(vla-addcircle *model-space* (vlax-3d-point (list x y 0.0)) 3.0)
(setq i (+ i 2))
   )
   (princ)
)




我怎样才能更改放置bloke而不是circle的代码???

rlx 发表于 2022-7-5 18:52:08

(命令“-insert”您的块(vlax-3d-point(list x y 0.0))1 1 0)而不是线(vla addcircle….)?
 
如果你有2d点,(列表x y)可能就足够了
 
 
gr.Rlx

Tharwat 发表于 2022-7-5 18:58:07

如果您是指法线块(非属性化)。
 

(defun c:test (/ isattributed blk s i)
;;        Tharwat 6/9/2015        ;;
(defun isattributed (doc name / yes)
   (vlax-for o (vla-item (vla-get-blocks doc) name)
   (if (eq "AcDbAttributeDefinition" (vla-get-objectname o))
       (setq yes t)
   )
   )
   yes
)
(if (and (/= ""
            (setq blk
                     (getstring
                     t
                     "\nSpecify Block name to place at each coordinates of a LWPolyline :"
                     )
            )
          )
          (tblsearch "BLOCK" blk)
          (if (not (isattributed
                     (vla-get-activedocument (vlax-get-acad-object))
                     blk
                   )
            )
            t
            (progn (princ "\nBlock name is attributed !!") nil)
          )
          (setq s (ssget '((0 . "LWPOLYLINE"))))
   )
   (repeat (setq i (sslength s))
   (foreach p (entget (ssname s (setq i (1- i))))
       (if (eq (car p) 10)
         (entmake (list '(0 . "INSERT") p (cons 2 blk)))
       )
   )
   )
   (princ
   "\nBlock name is not found or selection is not a LWPolyline "
   )
)
(princ)
)(vl-load-com)

hosyn 发表于 2022-7-5 18:59:59

Tharwat你是Greattttttttttttt
所以thanx非常好
若要询问运行代码中块的名称,如何修改??

BIGAL 发表于 2022-7-5 19:12:48

第1个(setq blk(getstring“\n输入块名称”))
 
第二个Rlx(命令”-插入“blokc”(vlax-3d-point(list x y 0.0))1 1 0)将出错,因为命令不喜欢vlax-3d-point,只保留为(list x y)

Tharwat 发表于 2022-7-5 19:16:32

 
我更新了上面的代码。

hosyn 发表于 2022-7-5 19:25:30

Thanxxxxxxxxxxxx对Tharwat和Bigal来说太多了

Tharwat 发表于 2022-7-5 19:27:38

没问题。

Lee Mac 发表于 2022-7-5 19:35:42

FWIW,代码可以压缩为:
(defun c:test ( / blk def enx idx sel vtx )
   (while
       (and (/= "" (setq blk (getstring t "\nBlock name: ")))
         (cond
               (   (null (setq def (tblsearch "block" blk)))
                   (princ "\nBlock not found.")
               )
               (   (= 2 (logand 2 (cdr (assoc 70 def))))
                   (princ "\nBlock is attributed.")
               )
         )
       )
   )
   (if (and (/= "" blk) (setq sel (ssget '((0 . "LWPOLYLINE")))))
       (repeat (setq idx (sslength sel))
         (setq enx (entget (ssname sel (setq idx (1- idx)))))
         (while (setq vtx (assoc 10 enx))
               (entmake (list '(0 . "INSERT") (cons 2 blk) vtx))
               (setq enx (cdr (member vtx enx)))
         )
       )
   )
   (princ)
)

rlx 发表于 2022-7-5 19:42:34

 
 
 
[列表]
[*]你说得对,我太快了,因为我在决定正常插入和vla插入块之间,并决定正常插入是最简单的(很晚了,正要睡觉……)下次尽量保持清醒
[/列表]
页: [1]
查看完整版本: 在上的每个夹点处放置一个挡块