whosa 发表于 2022-7-5 16:56:10

车门口齿不清

你好
 
我想通过Lisp添加门。
 
我想自动添加一些像附上的图片(黄色门块)。
 
提前感谢
 
Santo

ReMark 发表于 2022-7-5 17:00:52

块是否将插入任何特定层?如果是这样,该层是否存在或必须创建?你们有多少种不同的门挡?是否需要缩放块?街区在哪里?
 
你有没有想过创建一个工具选项板并用最常用的块填充它?然后可以拖放块,而不是通过lisp程序插入。

whosa 发表于 2022-7-5 17:08:13

我只有一个门框,每次都会对其进行缩放/定位。图层位于dwg块上
 
这是一个持续的耗时过程。
 
我想要一些类似于:
 
第一次点击:在门的开始处
第二次点击:门的末端
第三次单击:方向
 
方块贴在这根柱子上
[附件]59979

ReMark 发表于 2022-7-5 17:12:40

一个街区?将其放在工具选项板上。最简单、最快速的解决方案。

whosa 发表于 2022-7-5 17:13:45

是的,我在工具选项板上有。问题是我每次都要对它进行缩放和定位

ReMark 发表于 2022-7-5 17:18:04

你的图纸是按全尺寸绘制的,还是像在绘图板上那样按比例绘制的?
 
顺便提一下您上面的附件无效(即-不好)。

whosa 发表于 2022-7-5 17:24:50

满标度。bit门的开度/方向不同,每次我都需要调整挡块。
 
门图纸

Grrr 发表于 2022-7-5 17:27:17

日常练习:

; Block on Line, Grrr
(defun C:test ;| credits to: Lee Mac |; ( / b bn p e )
(setvar 'errno 0)
(while (/= 52 (getvar 'errno))
        (setq b (car (entsel "\nSelect block to reinsert <exit>: ")))
        (cond
                ( (= 7 (getvar 'errno))
                        (princ "\nMissed, try again.") (setvar 'errno 0)
                )
                ( (and (= 'ENAME (type b)) (/= (cdr (assoc 0 (entget b))) "INSERT"))
                        (princ "\nThis is not a block.") (setq b nil)
                )
                (b
                        (setq bn (vla-get-EffectiveName (vlax-ename->vla-object b)))
                        (while (/= 52 (getvar 'errno))
                                (and
                                        (setq p (getpoint "\nSelect a line to insert on it: <exit>"))
                                        (setq e (car (nentselp p)))
                                )
                                (cond
                                        ((not p)
                                                (setvar 'errno 52)
                                        )
                                        ((not e)
                                                (princ "\nMissed, try again.")
                                        )
                                        (
                                                (and p
                                                        (vl-catch-all-error-p
                                                                (vl-catch-all-apply 'vlax-curve-getFirstDeriv
                                                                (list e (vl-catch-all-apply 'vlax-curve-getParamAtPoint (list e p))))
                                                        )
                                                )
                                                (princ "\nThis object is not a curve.")
                                        )
                                        (T
                                                (and bn p e
                                                        (vla-InsertBlock
                                                                (vlax-get-property
                                                                        (vla-get-ActiveDocument (vlax-get-acad-object))
                                                                        (if (= 1 (getvar 'CVPORT)) 'Paperspace 'Modelspace)
                                                                ) ; AcSpc
                                                                (vlax-3D-point p)
                                                                bn
                                                                1.
                                                                1.
                                                                1.
                                                                (alg-ang e p)
                                                        )
                                                        (setvar 'errno 52)
                                                )
                                        )
                                        )
                                )
                                )
                        (T nil)
        ); cond
); while
(princ)
);| defun |; (vl-load-com) (princ)

; BIGAL's example of "vlax-curve-getFirstDeriv" usage:
(defun alg-ang (obj pnt)
(angle '(0. 0. 0.) (vlax-curve-getFirstDeriv obj (vlax-curve-getParamAtPoint obj pnt)) )
); defun

whosa 发表于 2022-7-5 17:30:32

此lisp仅用于方向,不用于缩放。对我来说没有帮助。
 
附件I添加了block whit参数的新版本
 
旋转-缩放-翻转
 
 
door_智能。图纸

Grrr 发表于 2022-7-5 17:35:18

您知道align命令吗?
它只需要4分,输入“是”或“否”即可。
页: [1] 2
查看完整版本: 车门Lisp程序