brams 发表于 2022-7-6 07:52:42

选择集-单独

我使用两种方法:
1.(setq ss1(ssget’((0。“点”))和(setq ss2(ssget’((0。“文本”))创建2个单独的选择集
2.(setq ss1(ssget'((0。“点,文本”)),然后我使用repeat。。。制作两个列表,一个用于文本,一个用于点。
是否可以仅使用1次ssget函数生成2个选择集?
我的问题似乎很愚蠢。。。很抱歉
谢谢

pBe 发表于 2022-7-6 07:59:56

好吧,你的第二选择是你完成这项任务的唯一方式。无论如何。最好在重复循环内使用IF/COND处理对象,以消除创建另一个选择集的需要。

BlackBox 发表于 2022-7-6 08:04:16


(defun _GetSelPoints(/ *error*)

(defun *error*(msg)
   (and oldNomutt (setvar 'nomutt oldNomutt))
   (cond ((not msg))                                                   ; Normal exit
         ((member msg '("Function cancelled" "quit / exit abort")))    ; <esc> or (quit)
         ((princ (strcat "\n** Error: " msg " ** "))))               ; Fatal error, display it
   (if result result (princ)))

((lambda (oldNomutt / startPoint endPoint result)
    (if (and (not (prompt "\nSelect objects: "))
             (setvar 'nomutt 1)
             (not (initget 1024))
             (setq startPoint (getpoint))
             (not (initget 1056))
             (setq endPoint (getcorner startPoint)))
      (progn (setq result (list startPoint endPoint)) (*error* nil))
      (*error* "Nothing selected")))
   (getvar 'nomutt)))

 
林奇:http://www.theswamp.org/index.php?topic=41872.msg469927#msg469927

brams 发表于 2022-7-6 08:09:39

请给我一点帮助。。。对于新的autolisp用户
 
似乎是我在寻找的。请举例说明如何将您的函数与ssget一起使用。。。要制作两组点和文本的选择集,只需选择一次对象——我的意思是,一个“矩形”。
 

<li style="">(defun _GetSelPoints(/ *error*)
<li style="">
<li style="">(defun *error*(msg)
<li style="">    (and oldNomutt (setvar 'nomutt oldNomutt))
<li style="">    (cond ((not msg))                                                   ; Normal exit
<li style="">          ((member msg '("Function cancelled" "quit / exit abort")))    ; <esc> or (quit)
<li style="">          ((princ (strcat "\n** Error: " msg " ** "))))               ; Fatal error, display it
<li style="">    (if result result (princ)))
<li style="">
<li style="">((lambda (oldNomutt / startPoint endPoint result)
<li style="">   (if (and (not (prompt "\nSelect objects: "))
<li style="">            (setvar 'nomutt 1)
<li style="">            (not (initget 1024))
<li style="">            (setq startPoint (getpoint))
<li style="">            (not (initget 1056))
<li style="">            (setq endPoint (getcorner startPoint)))
<li style="">       (progn (setq result (list startPoint endPoint)) (*error* nil))
<li style="">       (*error* "Nothing selected")))
<li style="">    (getvar 'nomutt)))

pBe 发表于 2022-7-6 08:15:47

不管好坏
(defun c:sepsel ()
      (setq textsel(ssadd)PointSel (ssadd)
             ss       (ssget '((0 . "POINT,TEXT"))))
            (while (setq e (ssname ss 0))
(if (eq (cdr (assoc 0 (entget e))) "POINT")
   (ssadd e PointSel)(ssadd e textsel))
                     (ssdel e ss)))

MSasu 发表于 2022-7-6 08:16:54

@布拉姆斯:你用的是什么编辑器?似乎您在AutoLISP代码中粘贴了一些控件标记。
还是你试着给台词编号?!?

brams 发表于 2022-7-6 08:20:31

我是从这里抄来的http://www.theswamp.org/index.php?to...9927#msg469927

brams 发表于 2022-7-6 08:27:18

很好,Pbe!

pBe 发表于 2022-7-6 08:34:05

 
不客气,
 
IMO致力于将slection一分为二,它还可以处理while/repeat循环中的实体。
 
代码到底是关于什么的?你能和我们分享一下吗,也许有一种更有效的方式来实现你的目标。

brams 发表于 2022-7-6 08:35:57

我可以分享我的“杰作”,没问题。。。
该代码必须将点和文本移动到正确的高度。我选择点和文本-与点具有相同x和y的文本。。。应该是成对的。如果文本是209.324,那么我将在该标高处移动该点,并且我将移动该点-该点在该标高处具有相同的x值和y值。是关于土地测量师的“杰作”-点的高程错误。如果我选择成对的点和文本(相同的x和y),我的代码似乎工作正常,但当我选择不成对的文本和点时,会出现一些错误。。。我不知道为什么-如果可能的话请帮忙。抱歉的代码,看起来很糟糕-仍在工作中。。。。
 


(defun c:pz (/ ldata layer punct)
(princ "\nSELECTEAZA PUNCTELE SI TEXTELE")
(setq ss (ssget '((0 . "POINT,TEXT"))))
(setq i 0)
(repeat (sslength ss)
   (setq ename (ssname ss i))
   (setq data (entget ename))
   (setq entName (cdr (assoc -1 data)))
   (setq Nume (cdr (assoc 0 data)))
   (setq ldata (cons data ldata))
   (setq i (1+ i))
) ;_ end of repeat
(setq ltest ldata)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(setq i 0)
(setq listat nil)
(repeat (length ldata)
   (setq entName (cdr (assoc -1 (nth i ldata))))
   (setq Nume (cdr (assoc 0 (nth i ldata))))
   (if    (= Nume "TEXT")
   (progn
   (setq pct (cdr (assoc 10 (nth i ldata))))
   (setq z (atof (cdr (assoc 1 (nth i ldata)))))
   (setq ztext (caddr pct))
   (setq listat (cons (list pct z ztext entName) listat))
   ) ;_ end of progn
   ) ;_ end of if
   (setq i (1+ i))
) ;_ end of repeat
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(setq i 0)
(setq listap nil)
(repeat (length ldata)
   (setq entName (cdr (assoc -1 (nth i ldata))))
   (setq Nume (cdr (assoc 0 (nth i ldata))))
   (if    (= Nume "POINT")
   (progn
   (setq punct (cdr (assoc 10 (nth i ldata))))
   (setq layer (cdr (assoc 8 (nth i ldata))))
   (setq culoare (cdr (assoc 62 (nth i ldata))))
   (setq listap (cons (list punct layer culoare entName) listap))
   ) ;_ end of progn
   ) ;_ end of if
   (setq i (1+ i))
) ;_ end of repeat
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(setq listam nil)
(setq listaep nil)
(setq listaet nil)
(setq i 0)
(repeat (length listap)
   (setq text (nth i listat))
   (foreach punct listap
   (if (and (= (car (car text)) (car (car punct)))
          (= (cadr (car text)) (cadr (car punct)))
   ) ;_ end of and
   (setq p    (list
         (list
         (car (car punct))
         (cadr (car punct))
         (cadr text)
         ) ;_ end of list
         (setq la (cadr punct))
         (setq cul (caddr punct))
         (setq entitatep (cadddr punct))
         (setq entitatet (cadddr text))
         (setq pt (car text))
       ) ;_ end of list
   ) ;_ end of setq
   ) ;_ end of if
   ) ;_ end of foreach
   (setq listam (cons p listam))
   (setq listaep (cons entitatep listaep))
   (setq listaet (cons entitatet listaet))
   (setq i (1+ i))
) ;_ end of repeat
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(setq i 0)
(repeat (length listam)
   (entmake (list (cons 0 "POINT")
          (cons 8 (cadr (nth i listam)))
          (if
            (/= (caddr (nth i listam)) nil)
             (cons 62 (caddr (nth i listam)))
             (cons 62 256)
          ) ;_ end of if
          (cons 10 (car (nth i listam)))
      ) ;_ end of list
   ) ;_ end of entmake
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
   (command "_.move"
      (cadddr (cdr (nth i listam)))
      ""
      (setq pti (cadddr (cdr (cdr (nth i listam)))))
      (setq ptf (car (nth i listam)))
      (list
          (car (car (nth i listat)))
          (cadr (car (nth i listat)))
          (cadr (nth i listat))
      ) ;_ end of list
   ) ;_ end of command
   (setq i (1+ i))
) ;_ end of repeat
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(setq sse (ssadd))
(foreach ent listaep (ssadd ent sse))
(command "erase" sse "")
(princ)
) ;_ end of defun
页: [1] 2
查看完整版本: 选择集-单独