选择集-单独
我使用两种方法:1.(setq ss1(ssget’((0。“点”))和(setq ss2(ssget’((0。“文本”))创建2个单独的选择集
2.(setq ss1(ssget'((0。“点,文本”)),然后我使用repeat。。。制作两个列表,一个用于文本,一个用于点。
是否可以仅使用1次ssget函数生成2个选择集?
我的问题似乎很愚蠢。。。很抱歉
谢谢 好吧,你的第二选择是你完成这项任务的唯一方式。无论如何。最好在重复循环内使用IF/COND处理对象,以消除创建另一个选择集的需要。
(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 请给我一点帮助。。。对于新的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)))
不管好坏
(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))) @布拉姆斯:你用的是什么编辑器?似乎您在AutoLISP代码中粘贴了一些控件标记。
还是你试着给台词编号?!? 我是从这里抄来的http://www.theswamp.org/index.php?to...9927#msg469927 很好,Pbe!
不客气,
IMO致力于将slection一分为二,它还可以处理while/repeat循环中的实体。
代码到底是关于什么的?你能和我们分享一下吗,也许有一种更有效的方式来实现你的目标。 我可以分享我的“杰作”,没问题。。。
该代码必须将点和文本移动到正确的高度。我选择点和文本-与点具有相同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