yunlong300 发表于 2005-1-13 17:21:00

[求助]如何获取内部函数运行中选取到的图元名?

例如:在lisp中运行剪切命令<br>
(command "trim" pause "" pause "" "")<br>
如何才能在程序中得知所选择的剪切边的图元名?<br>
<br>

meflying 发表于 2005-1-13 17:35:00

(ssget "p")

yunlong300 发表于 2005-1-14 14:26:00

请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]
查看完整版本: [求助]如何获取内部函数运行中选取到的图元名?