请问怎么增加扩展数据,而且可以根据扩展数据用ssget筛选。。。
研究了一个晚上,发现vb方面比较多。。。请问lisp怎么可以办到呢? <p class="MsoNormal" align="left" style="LINE-HEIGHT: 150%;"><font face="华文行楷" color="#000000" size="5" style="BACKGROUND-COLOR: #ffffff;"></font></p><p class="MsoNormal" align="left" style="LINE-HEIGHT: 150%;"><font style="BACKGROUND-COLOR: #ffffff;"><font color="#000000"><font face="华文行楷" size="5"> </font><font face="华文行楷" size="3"> </font><font size="3">(ssadd ]) </font> </font></font></p><p class="MsoNormal" align="left" style="LINE-HEIGHT: 150%; TEXT-ALIGN: left;"><font style="BACKGROUND-COLOR: #ffffff;"><font color="#000000"><font size="3">如果调用此函数而未跟随任何参数的话</font><font size="3">, ssadd </font><font size="3">将建立一个新的选择集</font><font size="3">, </font><font size="3">而此选择集中没有任何东西。若其后跟随一个单独的图元名参数</font><font size="3">, ssadd </font><font size="3">将建立一个包含此图元名的新选择集。假如其后不但有图元名且还有一个选择集</font><font size="3">, </font><font size="3">那么它会将此指名的图元加入到这个选择集上。</font><font size="3">ssadd</font><font size="3">会返回新的选择集或修改后的选择集。请注意当增加一个图元到一个选择集上时</font><font size="3">, </font><font size="3">新的图元是实际被增添到此已存在的选择集上的</font><font size="3">, </font><font size="3">同时此选择集将返回如同选择集</font><font size="3">ss</font><font size="3">被返回一样的结果。如果选择集被设定了其他的变量上</font><font size="3">, </font><font size="3">那么它们也会反映所增加的部分。如果我们所指名的图元已经在选择集内</font><font size="3">, </font><font size="3">则</font><font size="3">ssadd </font><font size="3">的动作会被忽略</font><font size="3">, </font><font size="3">同时不会显示任何错误信息。</font></font></font></p><p class="MsoNormal" style="LINE-HEIGHT: 150%;"><font color="#000000" size="3" style="BACKGROUND-COLOR: #ffffff;"></font></p> <p>我也很想知道,论坛上好象没见到过这方面的介绍,希望高手能出来指点下.</p> <p></p>http://www.mjtd.com/bbs/dispbbs.asp?BoardID=3&replyID=37432&id=55821&skin=0 你可以去看看 <p> </p><p> (defun c:gc5 (/ j k sm dx zzzzz dx-ty xyz ddd -3ty ddd-ty zj-xyz)<br/> (princ "\n>>> 欢迎使用zzh-SCS小工具------")<br/> (princ "\n>>> 南溪高程加密之------ 批量 + - 高程点的高程值 :")<br/> (princ "\n>>> 选取高程点(用鼠标框选):")<br/> (setvar "osmode" 0)<br/> (setq j (ssget))<br/> (setq zzzzz (getreal "\n>>> 请输入加减改正值: "))<br/> (if (= (numberp zzzzz) T)<br/> (progn<br/> (if (/= j nil)<br/> (progn<br/> (setq k 0 sm (sslength j))<br/> (while (< k sm) <br/> (setq dx (ssname j k))<br/> (setq dx-ty (entget dx'("*")))<br/> <br/> (if (= (cdr (assoc 0 dx-ty)) "TEXT") (command "erase" dx ""))</p><p> (if (= (cdr (assoc 0 dx-ty)) "INSERT")<br/> (progn<br/> (setq z (+ (nth 3 (assoc 10 dx-ty)) zzzzz))<br/> (setq xyz (list (nth 1 (assoc 10 dx-ty)) (nth 2 (assoc 10 dx-ty)) z ))<br/> (command "erase" dx "")<br/> (command "-layer" "m" "GCD" "")<br/> (command "-insert" "lc-gcd" xyz "0.5" "0.5" "0")<br/> (setq ddd (entlast)) <br/> (setq ddd-ty (entget ddd)) <br/> (setq -3ty (list -3 (list "SOUTH" (cons 1000 "202101"))))<br/> (entmod (append ddd-ty (list -3ty)))</p><p> <br/> (setq zj-xyz (list (+ (nth 1 (assoc 10 dx-ty)) 3.325) (nth 2 (assoc 10 dx-ty)) z))<br/> (command "text" "s" "Standard" "j" "m" zj-xyz "1.0" "0" (rtos z 2 2))<br/> (setq ddd (entlast))<br/> (setq ddd-ty (entget ddd)) <br/> (setq -3ty (list -3 (list "SOUTH" (cons 1000 "202111"))))<br/> (entmod (append ddd-ty (list -3ty)) ) ))<br/> <br/> (command "-layer" "m" "0" "")<br/> (setq k (+ k 1)))) ) ))<br/> (princ "\n>>> 南溪高程加密之------ 批量 + - 高程点的高程值 :")<br/> (princ "\n>>>处理完毕....... ^_^ ")<br/> (princ)<br/>)</p><p>其中 (setq ddd-ty (entget ddd)) <br/> (setq -3ty (list -3 (list "SOUTH" (cons 1000 "202111"))))<br/> (entmod (append ddd-ty (list -3ty)) ) 就是<strong>增加扩展数据</strong></p><p></p><p><strong>下面代码()可以根据扩展数据用ssget筛选。。。</strong></p><p> (setq yt-j (ssget "x" '((-4 . "<and")<br/> (-4 . "<or")<br/> (-3 ("SOUTH" (1000 . "140001"))) ;阳台<br/> (-3 ("SOUTH" (1000 . "143130"))) ;檐廊<br/> (-3 ("SOUTH" (1000 . "141400"))) ;破房<br/> (-4 . "or>")<br/> (6 . "X5")<br/> (0 . "LWPOLYLINE")<br/> (8 . "JMD")<br/> (-4 . "and>"))))</p> 本帖最后由 作者 于 2009-6-6 19:32:51 编辑 <br /><br /> <p>请教楼上,如何把以下lisp中的"TTT"和"CX"两个命令合并啊</p><p>目前的数据格式为:1,0,0,0,500,0,0,1279,0,-500,1679,0,-500</p><p>怎样才能让其成为:1,BW14-06,89,6,0,0,0,500,0,0,1279,0,-500,1679,0,-500</p><p>以上"BW14-06","89","6"均来自扩展数据</p><p></p><p>测试图纸</p> <p>要把以下lisp中的"TTT"和"CX"两个命令合并 </p><p></p><p>(DEFUN C:CX()............... defun 是可以用来自定义函数的 Autolsp函数</p><p>改成 (DEFUN CX()...........就可以了</p><p> 现在 cx 就是一个自定义函数</p><p> 加载后就可以随时调用它了, 方法为 (自定义函数名称) 即 (cx)</p><p>(cx)现在就相当于一个Autolsp函数,可以随时调用它,就像你使用ssget car等函数一样</p><p>不知有没有解决楼上的问题</p> 这样试试:(defun C:ttt (/ E FI I LST P PT SS STR)
(setq fi '((0 . "*POLYLINE"))) ; Filter for ssget.
(prompt " \n选取等高线:")
(setq SS (ssget fi))
(setq i -1)
(setq p (getint " \n指定序号<1>:"))
(if (= P nil) (setq p 1))
(while (setq i (1+ i) e (ssname ss i))
(setq ccx (cx e))
(setq str (strcat (itoa p) "," ccx)
p (1+ p)
ii-1)
(repeat 4
(if (setq ii (1+ ii) pt (vlax-curve-getpointatparam e ii))
(setq str (strcat str (rtos(car pt) 2 3) "," (rtos(cadr pt) 2 3) "," (rtos(caddr pt) 2 3)))
)
)
(setq lst (cons str lst))
)
(setq Fn (getfiled "写出文件" "" "txt" 1))
(setq F (open Fn "w"))
(mapcar '(lambda (x) (write-line x f)) (reverse lst))
(close f)
(princ)
)
;***************************
(defun C:CX() (cx (car(entsel))))
(defun cx (en)
(setq XDATA (mapcar 'cdr (cdadr(assoc -3 (entget en '("PIPESOLID-*" "PIPEWAY-*"))))))
)
报告Z版,程序经您修改后运行时提示"; 错误: 参数类型错误: stringp ("AH111-01")"然后就不运行了,AH111-01是扩展数据,要怎么处理啊 因无图形调试程序,所以只知道错误是字串出错了,不知道是在哪句程序出错。
页:
[1]
2