动态块和Lisp
又是我问了另一个问题。我正在编写一个lisp来插入一个块,如果你选择的话,你可以用一个引线来标记它,它会自动填充另一个块和属性文本。具有属性文本的块是一个简单的动态块,具有一个额外的插入点。因此,当您要插入属性块时,只需按CTRL键,即可循环切换到右侧或左侧的to插入点。
我想在lisp中定义使用哪一边。这是我的逻辑。
P1(x1,y1)是要详细说明的块的插入点。
P2(x2,y2)是我的领导者登陆点
如果x2>=x1,则使用右侧(原始插入点),否则使用左侧(由动态块定义的第二个点)
第一部分很简单。我将使用P2作为插入点。这是第二种选择。我需要告诉autocad首先使用第二个点作为插入点,然后将其插入P2。这可能吗?
我想我可以做两块,一块是右侧插入,一块是左侧插入。我宁愿要一个,但如果我需要2个,我会的。
;;;---------------------------------------------------------
;;;
;;;under development
;;;
;;;---------------------------------------------------------
(defun C:FPJ1 (/ )
(setq CRcecho (getvar "cmdecho")) ;;;store curret sysvar
(setq CRdimas (getvar "dimassoc"))
(setvar "cmdecho" 0)
(setvar "dimassoc" 2)
(setq CRdmsty (getvar "DIMSTYLE"))
;------------------------------------------------------------------------
(setq *error* ;;;resets sysvar incase of
(lambda (msg) ;;;an error, esc, exit, cancel
(setvar "cmdecho" CRcecho)
(setvar "dimassoc" CRdimas)
(command "-dimstyle" "r" CRdmsty)
(princ msg)
(princ)))
;------------------------------------------------------------------------
(setq FPTag "C:/Documents and Settings/TEMP/My Documents/LISP/fpart/fpart")
(setq FPPaP "C:/Documents and Settings/TEMP/My Documents/LISP/fpart/F")
(or *FPnameG* (setq *FPnameG* "?"))
(setq CRuprec (getvar "LUPREC"))
(setq CRLunit (getvar "LUNITS"))
(or
(eq "" (setq tmp (getstring (strcat "\nF-Part to insert <" *FPnameG* ">: "))))
(setq *FPnameG* tmp))
(setq FPPath (strcat FPPaP *FPnameG*))
(initget "Yes No")
(setq TagAns (getkword (strcat "\nTag Fpart? <No>: ")))
(if (/= TagAns "Yes")
(progn
(setq FPP1 (getpoint "\nSpecify insertion point: "))
(command "-insert" FPPath FPP1 "1" "1" pause))
(progn
(setq FPAtTxt (strcase (strcat "F" (substr *FPnameG* 1 2) "." (substr *FPnameG* 3 2))))
(setq FPP1 (getpoint "\nSpecify insertion point: "))
(command "-insert" FPPath FPP1 "1" "1" pause)
(command "-dimstyle" "r" "leader")
(setq CRDSCL (getvar "DIMSCALE"))
(initget 6)
(setq FPDSCL (cond
((getreal (strcat "\nSpecify scale factor <" (rtos CRDSCL CRLunit CRuprec) ">: ")))
(CRDSCL)))
(setq FPLP1 (getpoint "\nSpecify point of leader landing"))
(if (<= (car FPLP1) (car FPP1))
(setq FPLP2 (list (- (car FPLP1) 0.125)(cadr FPLP1)))
(setq FPLP2 (list (+ (car FPLP1) 0.125)(cadr FPLP1)))
)
(princ "\n>>Press *Ctrl* to cycle insertion point")
(command "_.leader" FPP1 FPLP1 FPLP2 "" "" "b" FPTag pause FPDSCL FPDSCL "0" FPAtTxt)))
;--------------------------------------------------------------------------
(setvar "cmdecho" CRcecho) ;;;restore previous settings
(command "-dimstyle" "r" CRdmsty)
(princ)
) 哈哈,太棒了。现在,我试图查找您使用的一些命令,但它们没有列在acad帮助文件中。比如vla insertblock。它没有列出。在哪里可以获得这些命令的列表。 查看帮助ActiveX和VBA参考
作为Lisp的规则
方法->vla方法
属性->vla put\get属性
哈哈,很高兴你喜欢
正如GeoBuilder所说,在VLIDE中键入vla insertblock并双击它以高亮显示整个单词,然后单击帮助图标。
这可能会给你一些启示:
http://www.cadtutor.net/forum/showpost.php?p=258403&postcount=9 As,而不是“点击http://s51.radikal.ru/i131/1001/56/ae5c86e5dc13.jpg”高亮显示整个单词后,可以按Ctrl+F1组合键 或
在vlide编辑器上时
-点击apropos选项(A)
-键入函数名或第一个字母,如vla-vlax-等。。。或者使用可用的搜索选项
-并在apropos results下突出显示函数名
-然后单击帮助图标
最初的vital lisp中还剩下一些函数,如vlax get、vlax put等。。。。现在没有记录的
hth-
页:
[1]