将块插入到多线端点
因此,专门处理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页中的文章。“那很有趣。”议论哈哈哈
谢谢李!尝试一下,没有报告任何错误,尽管块似乎没有出现。希望能想出点什么。。如果必要的话,我可以引爆它们?不是最首选的方法,但肯定是一种选择。。一如既往,非常感谢。 我完全忘记了这个线程,有充分的理由,发布的代码是草率的垃圾。
http://www.cadtutor.net/forum/showthread.php?46891-在选定多边形的每个顶点插入一个点
确保检查代码顶部的块名称。我将它设置为一个块,用于测试。它可能在命令行中说“Block not found”。 不,我是听说过的。。当我在处理它时,我删除了代码末尾的以下代码片段。。它将插入块,同样就在顶点处。。所以它是在识别障碍。。
(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)
) 对我来说似乎很有效——请记住,它忽略了MLine的端点。 哈哈,你帮我太多了!只有端点有什么办法吗?我发布的这些参考代码与昨天的代码非常相似。。可以看到混乱。 -----------------=={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”);; 帮了这么多,谢谢 不客气。
页:
[1]
2