镜像命令
我有一个从www.afralisp修改的lisp。net和它做了我现在想要的一切,但我不知道如何问用户,如果他们想镜像块!我希望它发生在块被放置之后,这样你就可以看到那里的块。它的例子是hosebib,旁边有HB,看看它是如何从上到下的。我想我会把停顿改成点,并把它们作为我镜像的一条线,但我从来没有这样做过,所以我不知道如何让它们指向参考。如果有人能帮助我,我会非常感激!!!!
我不确定块上的插入点在哪里,但当我使用P&ID LISP时,我使用旋转来翻转块,只使用ip作为基点:
(command "_rotate" (entlast) "" ip "180")
或者,用户可以选择:
(initget "Yes No")
(setq ans (getkword "\nRotate Block? <No>: "))
(if (= ans "Yes")
(command "_rotate" (entlast) "" ip "180.0"))
镜像插入的标准方法是将DXF组41更改为其当前值的负值-大卫
我想我说错了对不起。下面是另一张图片。我有一块洋红的,我需要它来问我是否喜欢镜像后,它的地方。我的插入点是P1,P2是决定块角度的第二个点。我需要它来询问我是否喜欢沿P1和P2镜像块,并得到洋红色块旁边的灰色块的最终结果。我希望这有帮助!!!!
那么也许:
(initget "Yes No")
(setq ans (getkword "\nMirror Block? <No>: "))
(if (= ans "Yes")
(command "_mirror" (entlast) p1 p2 "n"))
我运行lisp hosebib。它要求插入点(即示例1中的p1),然后需要第二个点来定义块的角度。(这将是示例1中的p2)。完成后,完成运行的lisp看起来像示例2。我想知道问“镜像块?”[是/否]。如果我点击yes,最终产品将类似于示例3,在镜像线点使用p1和p2。如果我点击“否”,它将取消,什么也不做。我希望这对我正在寻找的东西有所帮助。
HoseBib。lsp 看着你的Lisp程序,似乎你只允许水平线-这是你希望它保持的方式吗?
此外,还有一种更简单的断线方法,无需使用属性,如果您知道要插入的块的确切长度,并且您的基点是其中一个断点(实际情况),则无需深入研究可能导致潜在错误的属性。
李 我认为您目前的Lisp程序可以简化为:
(defun c:hb2(/ vlst ovar ent1 ip ent2 ip1 ip2 att1)
(setq vlst '("OSMODE" "BLIPMODE" "CMDECHO" "ATTDIA" "ATTREQ")
ovar (mapcar 'getvar vlst))
(mapcar 'setvar vlst '(544 0 0 0 0))
(while (and (setq ent1 (entsel "\nSelect Block Insertion Point")
ip (osnap (cadr ent1) "_nea")))
(setvar "OSMODE" 0)
(setq ent2 (car ent1))
(command "-insert" "HBAB" "s" (max 1 (getvar "dimscale")) ip "")
(setq att1 (entnext (entlast))
ip1(cdr (assoc 10 (entget att1)))
ip2(cdr (assoc 10 (entget (entnext att1)))))
(command "_break" ent1 "f" ip1 ip2)
(setvar "OSMODE" 544))
(mapcar 'setvar vlst ovar)
(princ))
然而,这可以用于任何角度的线:
(defun c:hb(/ *error* ovar vlst ent ip edata ang att1 blk ip1 ip2 ans)
(defun *error*(msg)
(if ovar (mapcar 'setvar vlst ovar)) (princ))
(setq vlst '("OSMODE" "BLIPMODE" "CMDECHO" "ATTDIA" "ATTREQ")
ovar (mapcar 'getvar vlst))
(if (or (tblsearch "BLOCK" "HBAB") (findfile "HBAB.dwg"))
(progn
(mapcar 'setvar vlst '(544 0 0 0 0))
(while (setq ent (entsel "\nSelect Block Insertion Point"))
(setq ip (osnap (cadr ent) "_nea"))
(setvar "OSMODE" 0)
(setq edata (entget (car ent))
ang (angle (dxf 10 edata) (dxf 11 edata)))
(command "-insert" "HBAB" "s" (max 1 (getvar "dimscale")) ip (* 180.0 (/ ang pi)))
(setq att1 (entnext (setq blk (entlast)))
ip1(dxf 10 (entget att1))
ip2(dxf 10 (entget (entnext att1))))
(command "Break" ent "f" ip1 ip2)
(initget "Yes No")
(setq ans (getkword "\nMirror Block? <No>: "))
(if (= ans "Yes")
(command "_mirror" blk "" ip1 ip2 "_Y"))
(setvar "OSMODE" 544)))
(princ "\n<!> Block Not Found <!>"))
(mapcar 'setvar vlst ovar)
(princ))
(defun dxf(code elist)
(cdr (assoc code elist)))
还包括错误捕获以检查块名,并添加了镜像选项。
页:
[1]
2