whosa 发表于 2022-7-5 17:42:59

我用了align。。。。如果门很少,那没关系。。。当我需要添加60个不同的门时,这很耗时。我做了一个dinamic bock,但仍然是一个缓慢的方法

Grrr 发表于 2022-7-5 17:45:39

这可能有助于:

(defun C:test ;| credits to: Lee Mac |; ( / *error* cm SelBname bn p Blk ll ur msg SS cen Grrr mc )

(defun *error* (m) (redraw)(and cm (setvar 'cmdecho cm)) (and m (print m)) (princ))
(defun SelBname ( / e bn )
        (setvar 'errno 0)
        (while (/= 52 (getvar 'errno))
                (setq e (car (entsel "\nSelect block to reinsert <exit>: ")))
                (cond
                        ( (= 7 (getvar 'errno)) (princ "\nMissed, try again.") (setvar 'errno 0) )
                        ( (and (= 'ENAME (type e)) (/= (cdr (assoc 0 (entget e))) "INSERT"))
                                (princ "\nThis is not a block.") (setq e nil)
                        )
                        ( (and e (not (alert "Visit lee-mac.com")) (setq bn (vla-get-EffectiveName (vlax-ename->vla-object e))) (setvar 'errno 52)) )
                ); cond
        ); while
        bn
); defun SelBname

(redraw) (setq bn (SelBname))
(while
        (and
                (setq cm (getvar 'cmdecho)) (setvar 'cmdecho 0)
                bn
                (last (setq p (list (getpoint "\nSpecify insertion point <exit>: "))))
                (last (setq p (append p (list (getpoint (last p) "\nSpecify second point <exit>: ")))))
                (not (apply 'grdraw (append p (list 1 7))))
                (setq Blk
                        (vla-InsertBlock
                                (vlax-get-property
                                        (vla-get-ActiveDocument (vlax-get-acad-object))
                                        (if (= 1 (getvar 'CVPORT)) 'Paperspace 'Modelspace)
                                ) ; AcSpc
                                (vlax-3D-point (car p)) bn 1. 1. 1. 0.
                        )       
                )
        )
        (progn
                (vla-GetBoundingBox Blk 'll 'ur)
                (vla-ScaleEntity Blk (vlax-3D-point (car p))
                        (/ (apply 'distance p) (abs (apply '- (mapcar 'car (mapcar 'vlax-safearray->list (list ll ur))))) )
                )
                (vla-put-Rotation Blk (apply 'angle p))
                (setq msg "\nPress to change orientation, to exit: ")
                (and msg (princ msg)) (setvar 'errno 0)
                (setq SS (ssadd))
                (ssadd (handent (vla-get-Handle Blk)) SS)
                (setq cen (apply 'mapcar (cons '(lambda (a b) (/ (+ a b) 2.)) p)))
                (while (/= 52 (getvar 'errno))
                        (setq Grrr (grread T))
                        (cond
                                ((= (car Grrr) 2)
                                        (cond
                                                ((= (cadr Grrr) (ascii "\t"))
                                                        (and msg (princ msg))
                                                        (and (not mc) (setq mc 0))
                                                        (setq mc (rem (+ mc 1) 4))
                                                        (cond
                                                                ( (or (= mc 1) (= mc 3) )
                                                                        (command "_.MIRROR" SS "" "_non" cen "_non" (polar cen (+ (apply 'angle p) (/ PI 2.)) (apply 'distance p)) "_Y")
                                                                )
                                                                ( (or (= mc 2) (= mc 0) )
                                                                        (command "_.MIRROR" SS "" "_non" cen "_non" (polar cen (apply 'angle p) (apply 'distance p)) "_Y")
                                                                )
                                                        )
                                                )
                                                ((= (cadr Grrr) (ascii "\r"))
                                                        (princ "\nExiting.") (redraw) (setvar 'errno 52)
                                                )
                                        ); cond
                                )
                                ((= (car Grrr) 25)
                                        (princ "\nExiting.") (redraw) (setvar 'errno 52)
                                )
                        ); cond
                ); while
        ); progn
); while/if
(and cm (setvar 'cmdecho cm))
(princ)
);| defun |; (vl-load-com) (princ)

您只需要指定2个点,点击Tab键并在完成后输入。

BIGAL 发表于 2022-7-5 17:47:55

如果你看看这张图片,它是通过切开一段墙,然后在2D+中插入门的细节来完成的。宽度只是输入。它需要一个起点和一个旋入或旋出的方向来绘制门框。现在它的副本权利,所以没有代码,但总包仍然存在,如果你想要更多的信息给我一个下午。
 
如果我要重做这个任务,我会使用一个更容易调整大小的动态挡门。

whosa 发表于 2022-7-5 17:55:37

 
我收到了这个错误
 
错误的参数类型:numberp:#

Grrr 发表于 2022-7-5 17:59:30

 
这很奇怪,我这边一切都很好。
通过遵循本教程,您可以提供一些帮助,以找出代码在哪里失败。
页: 1 [2]
查看完整版本: 车门Lisp程序