明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 4858|回复: 13

请问怎么增加扩展数据,而且可以根据扩展数据用ssget筛选。。。

  [复制链接]
发表于 2008-1-28 22:24:00 | 显示全部楼层 |阅读模式
研究了一个晚上,发现vb方面比较多。。。请问lisp怎么可以办到呢?
发表于 2008-1-28 23:11:00 | 显示全部楼层

    (ssadd [ename [ss]])     

如果调用此函数而未跟随任何参数的话, ssadd 将建立一个新的选择集, 而此选择集中没有任何东西。若其后跟随一个单独的图元名参数, ssadd 将建立一个包含此图元名的新选择集。假如其后不但有图元名且还有一个选择集, 那么它会将此指名的图元加入到这个选择集上。ssadd会返回新的选择集或修改后的选择集。请注意当增加一个图元到一个选择集上时, 新的图元是实际被增添到此已存在的选择集上的, 同时此选择集将返回如同选择集ss被返回一样的结果。如果选择集被设定了其他的变量上, 那么它们也会反映所增加的部分。如果我们所指名的图元已经在选择集内, ssadd 的动作会被忽略, 同时不会显示任何错误信息。

发表于 2008-1-29 19:54:00 | 显示全部楼层

我也很想知道,论坛上好象没见到过这方面的介绍,希望高手能出来指点下.

发表于 2008-2-13 19:12:00 | 显示全部楼层
发表于 2009-6-6 00:47:00 | 显示全部楼层

   

 (defun c:gc5 (/ j k sm dx zzzzz dx-ty xyz ddd -3ty ddd-ty zj-xyz)
    (princ "\n>>> 欢迎使用zzh-SCS小工具------")
    (princ "\n>>> 南溪高程加密之------   批量 + - 高程点的高程值 :")
        (princ "\n>>> 选取高程点(用鼠标框选):")
  (setvar "osmode" 0)
      (setq j (ssget))
      (setq zzzzz (getreal "\n>>> 请输入加减改正值:  "))
  (if (= (numberp zzzzz) T)
    (progn
   (if (/= j nil)
     (progn
       (setq k 0 sm (sslength j))
       (while (< k sm) 
         (setq dx (ssname j k))
  (setq dx-ty (entget dx'("*")))
 
  (if (= (cdr (assoc 0 dx-ty)) "TEXT")  (command "erase" dx ""))

   (if (= (cdr (assoc 0 dx-ty)) "INSERT")
     (progn
       (setq z (+ (nth 3 (assoc 10  dx-ty)) zzzzz))
       (setq xyz (list (nth 1 (assoc 10 dx-ty)) (nth 2 (assoc 10 dx-ty)) z ))
       (command "erase" dx "")
       (command "-layer" "m" "GCD" "")
       (command "-insert" "lc-gcd" xyz "0.5" "0.5" "0")
       (setq ddd (entlast))
     (setq ddd-ty (entget ddd)) 
     (setq -3ty (list -3 (list "SOUTH" (cons 1000 "202101"))))
     (entmod (append ddd-ty (list -3ty)))

      
    (setq zj-xyz (list (+ (nth 1 (assoc 10 dx-ty)) 3.325) (nth 2 (assoc 10 dx-ty))  z))
    (command "text" "s" "Standard" "j" "m" zj-xyz "1.0" "0" (rtos z 2 2))
       (setq ddd (entlast))
     (setq ddd-ty (entget ddd)) 
     (setq -3ty (list -3 (list "SOUTH" (cons 1000 "202111"))))
     (entmod (append ddd-ty (list -3ty))  )        ))
 
  (command "-layer" "m" "0" "")
       (setq k (+ k 1)))) )  ))
   (princ "\n>>> 南溪高程加密之------   批量 + - 高程点的高程值 :")
   (princ "\n>>>处理完毕.......   ^_^       ")
   (princ)
)

其中  (setq ddd-ty (entget ddd)) 
     (setq -3ty (list -3 (list "SOUTH" (cons 1000 "202111"))))
     (entmod (append ddd-ty (list -3ty))  )                                  就是增加扩展数据

下面代码()可以根据扩展数据用ssget筛选。。。

   (setq yt-j (ssget "x" '((-4 . "<and")
          (-4 . "<or")
          (-3 ("SOUTH" (1000 . "140001")))   ;阳台
          (-3 ("SOUTH" (1000 . "143130")))   ;檐廊
          (-3 ("SOUTH" (1000 . "141400")))   ;破房
          (-4 . "or>")
                                (6 . "X5")
           (0 . "LWPOLYLINE")
           (8 . "JMD")
    (-4 . "and>"))))

发表于 2009-6-6 12:37:00 | 显示全部楼层
本帖最后由 作者 于 2009-6-6 19:32:51 编辑

请教楼上,如何把以下lisp中的"TTT"和"CX"两个命令合并啊

目前的数据格式为:1,0,0,0,500,0,0,1279,0,-500,1679,0,-500

怎样才能让其成为:1,BW14-06,89,6,0,0,0,500,0,0,1279,0,-500,1679,0,-500

以上"BW14-06","89","6"均来自扩展数据

测试图纸

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2009-6-6 18:01:00 | 显示全部楼层

要把以下lisp中的"TTT"和"CX"两个命令合并

(DEFUN C:CX()............... defun 是可以用来自定义函数的 Autolsp函数

改成 (DEFUN CX()...........就可以了

  现在 cx 就是一个自定义函数

  加载后就可以随时调用它了, 方法为    (自定义函数名称)  即  (cx)

(cx)现在就相当于一个Autolsp函数,可以随时调用它,就像你使用ssget car等函数一样

不知有没有解决楼上的问题

发表于 2009-6-6 18:23:00 | 显示全部楼层
这样试试:
  1. (defun C:ttt (/ E FI I LST P PT SS STR)
  2. (setq fi '((0 . "*POLYLINE")))    ; Filter for ssget.
  3. (prompt " \n选取等高线:")
  4. (setq SS (ssget fi))
  5. (setq i -1)
  6. (setq p (getint " \n指定序号<1>:"))
  7. (if (= P nil) (setq p 1))
  8. (while (setq i (1+ i) e (ssname ss i))
  9.   (setq ccx (cx e))
  10.   (setq str (strcat (itoa p) "," ccx)
  11.         p   (1+ p)
  12.         ii  -1)
  13.   (repeat 4
  14.    (if (setq ii (1+ ii) pt (vlax-curve-getpointatparam e ii))
  15.     (setq str (strcat str (rtos(car pt) 2 3) "," (rtos(cadr pt) 2 3) "," (rtos(caddr pt) 2 3)))
  16.    )
  17.   )
  18.   (setq lst (cons str lst))
  19. )
  20. (setq Fn (getfiled "写出文件" "" "txt" 1))
  21. (setq F (open Fn "w"))
  22. (mapcar '(lambda (x) (write-line x f)) (reverse lst))
  23. (close f)
  24. (princ)
  25. )
  26. ;***************************
  27. (defun C:CX() (cx (car(entsel))))
  28. (defun cx (en)
  29. (setq XDATA (mapcar 'cdr (cdadr(assoc -3 (entget en '("PIPESOLID-*" "PIPEWAY-*"))))))
  30. )
发表于 2009-6-6 19:16:00 | 显示全部楼层
报告Z版,程序经您修改后运行时提示"; 错误: 参数类型错误: stringp ("AH111-01")"然后就不运行了,AH111-01是扩展数据,要怎么处理啊
发表于 2009-6-6 23:11:00 | 显示全部楼层
因无图形调试程序,所以只知道错误是字串出错了,不知道是在哪句程序出错。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-6-1 06:24 , Processed in 0.211480 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表