在“角度到”下插入块
大家好,我刚开始学习lisp,所以我需要一些插入块的帮助。。。
我有一个块(我想插入)以dwg格式存储,我想将该块插入到选定线的中点(你可以在附加图像中看到我想要的结果)。
我的块由两条平行线组成,我希望它们以与选定线平行的方式插入到选定线的中点。
到目前为止,我已经找到了这样的东西。。。这还不错,但我想选择一条线而不是插入点,用这个lisp用户定义插入角度,我希望我的块线始终与所选线垂直。
我喜欢在这个例子中,当我启动命令时,我不必首先打开我的块,在插入一个块后,我保持命令状态,以便插入另一个块。
(defun c:MyBlock (/ pt)
(while (setq pt (getpoint "\nPick Insertion point."))
(command "-insert" "name_of_my_block" "_non" pt "" pause)
)
(princ)
)
所以如果有人能帮助我,我将非常感激。。。
也许:
(defun c:ins (/ *error* bNme doc spc ent uflag mpt ang)
(vl-load-com)
(setq bNme "test" ) ;; Block Name
(defun *error* (msg)
(and uflag (vla-EndUndoMark doc))
(or (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*")
(princ (strcat "\n** Error: " msg " **")))
(princ))
(setq doc (vla-get-ActiveDocument
(vlax-get-Acad-Object))
spc (if (zerop
(vla-get-activespace doc))
(if (= (vla-get-mspace doc) :vlax-true)
(vla-get-modelspace doc)
(vla-get-paperspace doc))
(vla-get-modelspace doc)))
(if (or (tblsearch "BLOCK" bNme)
(setq bNme (findfile (strcat bNme ".dwg"))))
(while
(progn
(setq ent (entsel "\nPick Line for insertion: "))
(cond ((eq 'ENAME (type (car ent)))
(if (vl-catch-all-error-p
(vl-catch-all-apply 'vlax-curve-getEndParam (list (car ent))))
(princ "\n** Invalid Object Selected **")
(progn
(setq uflag (not (vla-StartUndoMark doc)))
(setq mpt (vlax-curve-getPointatParam (car ent)
(/ (vlax-curve-getEndParam (car ent)) 2.))
ang (angle '(0 0 0) (vlax-curve-getFirstDeriv (car ent)
(vlax-curve-getParamatPoint (car ent) mpt))))
(vla-InsertBlock spc (vlax-3D-point mpt) bNme 1. 1. 1. ang)
(setq uflag (vla-EndUndoMark doc)) t))))))
(princ "\n** Block Definition not Found **"))
(princ))
这是非常接近。。。但我的方块的线条和线条平行,它们应该在插入线的前面。(这是一个结果的图像)
是否可以一次选择更多行,以便只执行一次命令就可以将块插入到每行中。。。或者在块被插入到所选行后,我可以选择另一行?
Thanx寻求帮助。。。我真的很感激!
附笔。
注意,它并没有将块插入到直线的中点,而是将块插入到我选择直线的点。。。
我不知道你们街区的方向。我发布的代码将插入块,旋转垂直于对象上单击点的切线向量。
至于重复-这本来就应该在那里,只是错过了一个“t”
李 以上代码已更新
对不起,我应该多读一点。。。没有意识到这是中点。。。 代码再次更新 我的方块是这样放置的。。。它是垂直的。。。如果这个帮助是你。。。
你就是那个男人!!!
它有效!!!
谢谢! 欢迎你,伙计,很高兴我们最后到了那里
页:
[1]
2