jake77777 发表于 2022-7-6 10:22:26

将块插入到多线端点

因此,专门处理mlines。。我希望只在端点插入代码中指定的块。。李帮了大忙。。实际上,就在今天,我用下面的方法在除了端点之外的所有地方插入一个块,这非常适合插入FTG!这个潜在的代码可以帮助我们在我们用多线绘制的所有梁/HDR的末端插入一个点荷载/#的螺柱(一个4“实心方形块)。这将是一个很大的帮助,因为我一个人一天就完成了大约200个。这可能需要点击3下即可完成。祈祷吧。感谢任何帮助。

---------
;;-----------------=={ Block At Vertices }==------------------;;
;;                                                            ;;
;;Inserts a Block at each vertex of selected Polylines,   ;;
;;with the exclusion of start/end vertices                  ;;
;;------------------------------------------------------------;;
;;Author: Lee McDonnell, 2010                               ;;
;;                                                            ;;
;;Copyright © 2010 by Lee McDonnell, All Rights Reserved.   ;;
;;Contact: Lee Mac @ TheSwamp.org, CADTutor.net             ;;
;;------------------------------------------------------------;;

(defun c:BlockAtVertices ( / *error* _StartUndo _EndUndo _Insert _AngleAtParam doc block ss )
(vl-load-com)
;; © Lee Mac 2010

(setq block "endtick.dwg") ;; << Block Name

(defun *error* ( msg )
   (and doc (_EndUndo doc))
   (or (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*")
       (princ (strcat "\n** Error: " msg " **")))
   (princ)
)

(defun _StartUndo ( doc ) (_EndUndo doc)
   (vla-StartUndoMark doc)
)

(defun _EndUndo ( doc )
   (if (= 8 (logand 8 (getvar 'UNDOCTL)))
   (vla-EndUndoMark doc)
   )
)

(defun _Insert ( block point rotation )
   (entmakex
   (list
       (cons 0 "INSERT")
       (cons 2block)
       (cons 10 point)
       (cons 50 rotation)
   )
   )
)

(defun _AngleatParam ( entity param )
   (angle '(0. 0. 0.) (vlax-curve-getFirstDeriv entity param))
)      

(setq doc (vla-get-ActiveDocument (vlax-get-acad-object)))

(cond
   ( (= 4 (logand 4 (cdr (assoc 70 (tblsearch "LAYER" (getvar 'CLAYER))))))

   (princ "\n** Current Layer Locked **")
   )
   ( (not
       (or
         (and (tblsearch "BLOCK" (vl-filename-base block))
         (setq block (vl-filename-base block))
         )
         (and
         (setq block
             (findfile
               (strcat block
               (if (eq "" (vl-filename-extension block)) ".dwg" "")
               )
             )
         )
         (
             (lambda ( / ocm )
               (setq ocm (getvar 'CMDECHO)) (setvar 'CMDECHO 0)
               (command "_.-insert" block) (command)
               (setvar 'CMDECHO ocm)
               
               (tblsearch "BLOCK" (setq block (vl-filename-base block)))
             )
         )
         )
       )
   )

   (princ "\n** Block not Found **")
   )
   ( (not (setq ss (ssget '((0 . "*POLYLINE")))))

   (princ "\n*Cancel*")
   )
   (t

   (_StartUndo doc)
   
   (
       (lambda ( i / e )
         (while (setq e (ssname ss (setq i (1+ i))))
         (
             (lambda ( param end )
               (while (< (setq param (1+ param)) end)
               (_Insert block (vlax-curve-getPointatParam e param) (_AngleAtParam e param))
               )
             )
             (vlax-curve-getStartParam e) (vlax-curve-getEndParam e)
         )
         )
       )
       -1
   )

   (_EndUndo doc)
   )
)

(princ)
)
---------

 
阅读第5页中的文章。“那很有趣。”议论哈哈哈
 
谢谢李!尝试一下,没有报告任何错误,尽管块似乎没有出现。希望能想出点什么。。如果必要的话,我可以引爆它们?不是最首选的方法,但肯定是一种选择。。一如既往,非常感谢。

jake77777 发表于 2022-7-6 10:31:33

我完全忘记了这个线程,有充分的理由,发布的代码是草率的垃圾。
 
http://www.cadtutor.net/forum/showthread.php?46891-在选定多边形的每个顶点插入一个点

alanjt 发表于 2022-7-6 10:32:19

 
确保检查代码顶部的块名称。我将它设置为一个块,用于测试。它可能在命令行中说“Block not found”。

Lee Mac 发表于 2022-7-6 10:39:30

不,我是听说过的。。当我在处理它时,我删除了代码末尾的以下代码片段。。它将插入块,同样就在顶点处。。所以它是在识别障碍。。
 

(defun c:aaa ()
   (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) 3)
   (setq x (nth i c) y (nth (1+ i) c) z (nth (+ 2 i) c))
   (vla-addtext *model-space* (rtos z 2) (vlax-3d-point (list x y 0.0)) 3.0)
   (setq i (+ i 3))
   )
   (princ)
)

Lee Mac 发表于 2022-7-6 10:43:47

对我来说似乎很有效——请记住,它忽略了MLine的端点。

jake77777 发表于 2022-7-6 10:48:42

哈哈,你帮我太多了!只有端点有什么办法吗?我发布的这些参考代码与昨天的代码非常相似。。可以看到混乱。

alanjt 发表于 2022-7-6 10:51:29

-----------------=={Block At EndPoints}==----------------;;;;在多段线的起点/终点插入块;;;;或多行;;;;------------------------------------------------------------;;;;作者:李·麦克唐纳,2010;;;;版权所有©2010 Lee McDonnell,保留所有权利;;;;联系人:Lee Mac@TheSwamp。组织,CADTutor。net;;;;-----------------------------------------------------------------;;(defun c:BlockAtEnds(/*error*\u StartUndo \u EndUndo \u Insert \u MAssoc doc block ss)(vl load com);;©Lee Mac 2010(setq block“endtick.dwg”);;

Lee Mac 发表于 2022-7-6 10:58:28

帮了这么多,谢谢

jake77777 发表于 2022-7-6 11:00:09

不客气。

Lee Mac 发表于 2022-7-6 11:04:05

页: [1] 2
查看完整版本: 将块插入到多线端点