woodman78 发表于 2022-7-6 10:53:38

ssget或其他方式

我正在拼凑一个LISP,它允许用户在可以从LISP插入的注释旁边输入数字。我将其设置为在特定层上插入数字。如果有人删除或添加了一个层,并希望重新运行数字,则该层将被删除,并重新创建一个新的数字集。我意识到,如果有人在这一层上放了东西(即使有所有的警告不要这样做),这并不是最好的方法。我试着创建一个选择集,然后用其中的数字创建一个块。
 
有人能帮我编写代码吗?或者告诉我有没有更好的方法来完成这项工作?
 

(defun C:notenumbers (/ ECL EOM EOS ECC ECE EFS)
(setq ECL (getvar "clayer"))
(setq EOM (getvar "orthomode"))
(setq EOS (getvar "osmode"))
(setq ECC (getvar "cecolor"))
(setq ECE (getvar "cmdecho"))
(setq EFS (getvar "style"))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(command "laydel" "N" "CCC_SHEET_LAYOUT_Note_Numbers" "" "YES")
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
   (if (null (tblsearch "STYLE" "CCC_Note_Numbers"))
(progn
      (entmake
         (list
         (cons 0 "STYLE")
         (cons 100 "AcDbSymbolTableRecord")
         (cons 100 "AcDbTextStyleTableRecord")
         (cons 2 "CCC_Note_Numbers")
         (cons 3 "Verdana.ttf")
         (cons 40 0)
   (cons 74 1) ;Bold
         (cons 70 0)))))
;(command "_-style" "CCC_Note_Numbers" "verdana.ttf" "0" "1" "0" "N" "N")
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
   (if (null (tblsearch "layer" "CCC_SHEET_LAYOUT_Note_Numbers"))
      (progn
      (entmake
         (list
             (cons 0   "LAYER")
            (cons 100 "AcDbSymbolTableRecord")
             (cons 100 "AcDbLayerTableRecord")
             (cons 2    "CCC_SHEET_LAYOUT_Note_Numbers")
             (cons 62   7)
             (cons 70   0)
             (cons 37030)))))
;(command "_-layer" "s" "CCC_SHEET_LAYOUT_Note_Numbers" "")
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(setvar "textstyle" "CCC_Note_Numbers")
(setvar "clayer" "CCC_SHEET_LAYOUT_Note_Numbers")
(setvar "osmode" 4)
(setq myheight 2.5)
(setq mynumber 1)
(setq myincrement 1)
(setq mypoint (getpoint "\nPick point: "))
(while mypoint
(command "text" "j" "BL" mypoint myheight "0" (itoa mynumber))
(setq mynumber (+ mynumber myincrement))
(setq mypoint (getpoint "\nPick point: "))
       )
;(setq sel1 (ssget entlast))
                         ;(setq sel1 (ssadd ent sel1))
(alert (strcat sel1))
;(command "_-block" "notenos" "0,0" sel1)

(setvar "clayer" ECL)
)

CHLUCFENG 发表于 2022-7-6 11:52:05

你看到这个了吗。。。
 
http://www.cadtutor.net/forum/showthread.php?t=37420
 
李·麦克?对于你正在寻找的东西来说,这是一个很好的起点。

woodman78 发表于 2022-7-6 12:10:56

是的,我也下载了,但我正在寻找一些非常简单的在这种情况下。我办公室的人倾向于回避有很多选择的事情。
 
这就是为什么我想这样做。我是从另一个lisp中得到的,我认为这是沿着这些线的东西,这只是选择了所有的文本,而我只想选择我在这个lisp中创建的文本。
 
(setq sset (ssget "_X" '((0 . "TEXT"))) i 0)
(repeat (sslength sset)
   (setq ent (ssname sset i))
   (setq lst (entget ent))
   (setq i (1+ i))
页: [1]
查看完整版本: ssget或其他方式