diablo98 发表于 2022-7-6 12:10:22

在“角度到”下插入块

大家好,
 
我刚开始学习lisp,所以我需要一些插入块的帮助。。。
我有一个块(我想插入)以dwg格式存储,我想将该块插入到选定线的中点(你可以在附加图像中看到我想要的结果)。
我的块由两条平行线组成,我希望它们以与选定线平行的方式插入到选定线的中点。
到目前为止,我已经找到了这样的东西。。。这还不错,但我想选择一条线而不是插入点,用这个lisp用户定义插入角度,我希望我的块线始终与所选线垂直。
我喜欢在这个例子中,当我启动命令时,我不必首先打开我的块,在插入一个块后,我保持命令状态,以便插入另一个块。
 

(defun c:MyBlock (/ pt)
(while (setq pt (getpoint "\nPick Insertion point."))
   (command "-insert" "name_of_my_block" "_non" pt "" pause)
)
(princ)
)

 
所以如果有人能帮助我,我将非常感激。。。

Lee Mac 发表于 2022-7-6 12:20:36

也许:
 

(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))

diablo98 发表于 2022-7-6 12:22:53

这是非常接近。。。但我的方块的线条和线条平行,它们应该在插入线的前面。(这是一个结果的图像)
是否可以一次选择更多行,以便只执行一次命令就可以将块插入到每行中。。。或者在块被插入到所选行后,我可以选择另一行?
 
Thanx寻求帮助。。。我真的很感激!
 
附笔。
 
注意,它并没有将块插入到直线的中点,而是将块插入到我选择直线的点。。。

Lee Mac 发表于 2022-7-6 12:30:47

我不知道你们街区的方向。我发布的代码将插入块,旋转垂直于对象上单击点的切线向量。
 
至于重复-这本来就应该在那里,只是错过了一个“t”
 

Lee Mac 发表于 2022-7-6 12:38:44

以上代码已更新

Lee Mac 发表于 2022-7-6 12:43:12

 
对不起,我应该多读一点。。。没有意识到这是中点。。。

Lee Mac 发表于 2022-7-6 12:47:54

代码再次更新

diablo98 发表于 2022-7-6 12:57:12

我的方块是这样放置的。。。它是垂直的。。。如果这个帮助是你。。。

diablo98 发表于 2022-7-6 13:02:49

你就是那个男人!!!
它有效!!!
 
谢谢!

Lee Mac 发表于 2022-7-6 13:08:15

欢迎你,伙计,很高兴我们最后到了那里
页: [1] 2
查看完整版本: 在“角度到”下插入块