[求助]如何获取内部函数运行中选取到的图元名?
例如:在lisp中运行剪切命令<br>(command "trim" pause "" pause "" "")<br>
如何才能在程序中得知所选择的剪切边的图元名?<br>
<br> (ssget "p") 请meflying斑竹帮忙看一下下面的程序,翻了好几天的资料也没找到解决方法。
;;命 令:bbb
;;功 能:增强连续尺寸标注,根据基准标注的倾斜角度自动调整后序标注的倾斜角度。
;;编 写:2005.1.12
(defun c:bbb ( / ODCMD ODOSM ODTVA dim_select ss pt1 ent en1 el1 ANG ANG1 P10 P13 P14 EL EN ENT LOOPMK)
(setq odcmd (getvar "cmdecho")
odosm (getvar "osmode")
odtva (getvar "TEXTEVAL")
);;setq
(setvar "osmode" 16383)
(setvar "TEXTEVAL" 1)
(defun dim_select () ;;选择连续标注
(while (and (setq ent(entsel "\n选择连续标注:")
en (car ent)
el (entget en)
);;setq
(/= (cdr (assoc 0 el)) "DIMENSION") ;;如果不是标注
(member'(100 . "AcDbRadialDimension") el) ;;如果是半径标注
(member '(100 . "AcDbDiametricDimension") el) ;;如果是直径标注
);;and
(princ "\n需要线性、坐标或角度关联标注。")
);;while
(if (member '(100 . "AcDbAlignedDimension") el)
(setq p10 (cdr (assoc 10 el)) ;;返回标注的定义点:尺寸线的位置点(在 WCS 中)
p14 (cdr (assoc 14el)) ;;返回线性标注和角度标注的定义点:第二条尺寸界线原点(在WCS 中)
);;setq
(setq loopmk nil)
);;if
);;defun
(command "._undo" "_be")
(setq loopmk T)
(dim_select) ;;选择连续标注
(setvar "cmdecho" 1)
;;下面这几句不知道如何处理。
;;系统帮助中,连续标注命令"DIMCONTINUE"中有解释:
;;"如果在当前任务中未创建标注,AutoCAD 将提示用户选择线性标注、坐标标注或角度标注,以用作连续标注的基准。
;;否则,AutoCAD 将跳过该提示,并在当前任务中使用上一次创建的标注对象。"
;;问题:1、最后创建的标注如果被删除,以前无论是否创建的有标注,"DIMCONTINUE"命令均提示选择标注。
;;帮助中所说"上一次创建的标注对象"看来只能存放一个标注图元名,如果该图元被删除,则要求进行选择。
;;现在问题来了,如何取得"上一次创建的标注对象"的图元名?
;;2、如果不能取得"上一次创建的标注对象"的图元名,
;;怎样才能让"DIMCONTINUE"命令忽略"上一次创建的标注对象"而每次都要求进行选择?
;;; (if (= (cdr (assoc 0 (entget (entlast)))) "DIMENSION")
;;; (command "._DIMCONTINUE" "" ent)
(command "._DIMCONTINUE" ent)
;;; (command "._DIMCONTINUE" "_S" ent)
;;; );;if
(while (and (> (getvar "cmdactive") 0)
(< (getvar "cmdactive") 4)
loopmk
);;and
(command pause)
(setq en1 (entlast)
el1 (entget en1)
);;setq
(if (and (equal en en1)
(member '(100 . "AcDbAlignedDimension") el)
);;and
(progn
(setq p10 (cdr (assoc 10 el))
p14 (cdr (assoc 14 el))
);;setq
);;progn
(if (and (member '(100 . "AcDbAlignedDimension") el1)
p10 p14
);;and
(progn
(command "" "")
(command "._dimedit" "O" en1 "" p14 p10) ;;调整标注的倾斜角度
(setq en en1)
(command "._DIMCONTINUE")
);;progn
);;if
);;if
);;while
(setvar "cmdecho" odcmd)
(setvar "osmode" odosm)
(setvar "TEXTEVAL" odtva)
(command "._undo" "_e")
(princ)
);;defun
页:
[1]