明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: 275437962

[讨论] 这个程序还有几个问题,大家帮忙解决一下!!!

[复制链接]
发表于 2013-12-29 21:55 | 显示全部楼层
本帖最后由 q3_2006 于 2013-12-30 07:14 编辑
275437962 发表于 2013-12-29 21:45
我看了,你是先选一组,然后再选所有要处理的,可是我执行程序不是这样的提示,没有要求我选全部的,只是 ...
  1. ;;;第二版,只能处理各组图元数量相同的情况
  2. (defun c:tt ( / a b bnm box dxf5 el en i l la lst lst_en lst_hand n pt ss ss0 ssx x y)
  3.         (defun lst2ss (lst_en / ss en)
  4.     (setq ss (ssadd))
  5.     (foreach en        lst_en
  6.         (if (= (type en) 'ename)
  7.             (ssadd en ss)        
  8.         )
  9.     )
  10.     (if        (= (sslength ss) 0)
  11.         nil
  12.         ss
  13.     )
  14. )
  15. (defun fd ( l n / a b )
  16.     (while l
  17.         (repeat n
  18.             (setq a (cons (car l) a)
  19.                   l (cdr l)
  20.             )
  21.         )
  22.         (setq b (cons (reverse a) b)
  23.               a nil
  24.         )
  25.     )
  26.     (reverse b)
  27. )
  28.         (vl-load-com)
  29.         (vl-cmdf "undo" "be")
  30.         (print "\n选择任意一组处理对象:")
  31.         (setq ss0 (ssget '((0 . "LINE")))
  32.                 n (sslength ss0)
  33.                 la (Vlax-Get (Vlax-Ename->Vla-Object (ssname ss0 0)) 'Layer )
  34.         )
  35.         (print "\n选择全部处理对象:")
  36.         (setq ss (ssget (list '(0 . "LINE")))
  37.                 bnm (getstring "\输入块名:")
  38.                 i 0
  39.             lst_hand '()
  40.       )
  41.       (repeat (sslength ss)
  42.         (setq en (ssname ss i)
  43.               dxf5 (cdr (assoc 5 (entget en)))
  44.         )
  45.         (setq lst_hand (cons dxf5 lst_hand))
  46.         (setq i (1+ i))
  47.       )
  48.       (setq lst_hand (vl-sort lst_hand (function (lambda (x y) (< x y)))))
  49.       (setq lst (fd (mapcar 'handent lst_hand) n))
  50.       (mapcar '(lambda(x)
  51.       (setq ssx (lst2ss x)
  52.               box (acet-geom-ss-extents ssx t)
  53.               pt (mapcar '* '(0.5 0.5 0.5) (mapcar '+ (car box) (cadr box)))
  54.       )
  55.       (command "erase" ssx "")
  56.       (command "-insert" bnm pt "" "" "")
  57.       (Vlax-Put-Property (Vlax-Ename->Vla-Object (entlast)) 'Layer la)
  58.       (vlax-for X
  59.      (vla-item (vla-get-blocks
  60.    (vla-get-activedocument (vlax-get-acad-object))
  61.         )
  62.         bnm
  63.      )
  64.     (setq el (cons (vlax-vla-object->ename X) el))
  65.   )
  66.   (mapcar '(lambda (x) (VLA-PUT-COLOR (Vlax-Ename->Vla-Object x) 0))el)
  67.        ) lst)
  68.         (vl-cmdf "undo" "e")
  69. )
发表于 2013-12-29 21:56 | 显示全部楼层
下线...有问题.明天再说..
 楼主| 发表于 2013-12-29 22:00 | 显示全部楼层
q3_2006 发表于 2013-12-29 21:56
下线...有问题.明天再说..

好的,早点休息!!谢谢了!!
 楼主| 发表于 2013-12-29 22:22 | 显示全部楼层
本帖最后由 275437962 于 2013-12-29 22:23 编辑
q3_2006 发表于 2013-12-29 21:55

兄弟,我试了,这个程序第一次执行可以,后退再试就会叠加的,而且我发现一个问题,如果这一个层里面有两类符号,就麻烦,框选会把两类符号一起选上,这样这两类符号就不能区别,我觉得不区别直线的长度和角度还是不行啊,我觉得你前面开发的思路是对的,只是再改一下,应该就好了!!!
我实际情况,是这一层里,有几类要处理的符号。

本帖子中包含更多资源

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

x
发表于 2013-12-30 07:11 | 显示全部楼层
275437962 发表于 2013-12-29 22:22
兄弟,我试了,这个程序第一次执行可以,后退再试就会叠加的,而且我发现一个问题,如果这一个层里面有两 ...

不是几类符号的问题,图示两图一个是4个图元组成,一个是3个,当然不能块处理.你自己可以变通一下,这种情况用第一版的程序来处理不就得了......另外,我的代码用了ET函数...你的CAD也需要安装ET工具才能正常运行...

本帖子中包含更多资源

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

x
发表于 2013-12-30 07:19 | 显示全部楼层
第一版和第二版已经注明(中间版全部删除),你可以选择处理方式,我只能做到这个程度了...
发表于 2013-12-30 08:38 | 显示全部楼层
好热闹.................
 楼主| 发表于 2013-12-30 10:28 | 显示全部楼层
q3_2006 发表于 2013-12-30 07:19
第一版和第二版已经注明(中间版全部删除),你可以选择处理方式,我只能做到这个程度了...

兄弟,就是的,我安装了ET扩展工具后,不管执行几次,也不会叠加了,不过我在想,后面的程度能不能改一下,就是在选择全部处理对象时,可以采用任意多边的方式选择,这样就好用了,呵呵,我是不是意想天开哦!!!
发表于 2013-12-30 10:41 | 显示全部楼层
275437962 发表于 2013-12-30 10:28
兄弟,就是的,我安装了ET扩展工具后,不管执行几次,也不会叠加了,不过我在想,后面的程度能不能改一下 ...

  1. ;;选择闭合多线形内及与多边形相交的对象处理
  2. (defun c:tt ( / a b c bnm box dxf5 el en i l la lst lst_en lst_hand n pt pts ss ss0 ssx x y)
  3.         (defun lst2ss (lst_en / ss en)
  4.     (setq ss (ssadd))
  5.     (foreach en        lst_en
  6.         (if (= (type en) 'ename)
  7.             (ssadd en ss)        
  8.         )
  9.     )
  10.     (if        (= (sslength ss) 0)
  11.         nil
  12.         ss
  13.     )
  14. )
  15. (defun fd ( l n / a b )
  16.     (while l
  17.         (repeat n
  18.             (setq a (cons (car l) a)
  19.                   l (cdr l)
  20.             )
  21.         )
  22.         (setq b (cons (reverse a) b)
  23.               a nil
  24.         )
  25.     )
  26.     (reverse b)
  27. )
  28.         (vl-load-com)
  29.         (vl-cmdf "undo" "be")
  30.         (print "\n选择任意一组处理对象:")
  31.         (setq ss0 (ssget '((0 . "LINE")))
  32.                 n (sslength ss0)
  33.                 la (Vlax-Get (Vlax-Ename->Vla-Object (ssname ss0 0)) 'Layer )
  34.         )
  35.         (setq c (car (entsel "\n选择闭合多边形:"))
  36.                 pts (mapcar        'cdr(vl-remove-if-not '(lambda (x) (= (car x) 10))(entget c)))
  37.                 ss (ssget "cp" pts '((0 . "LINE")))
  38.                 bnm (getstring "\输入块名:")
  39.                 i 0
  40.             lst_hand '()
  41.         )
  42.       (repeat (sslength ss)
  43.         (setq en (ssname ss i)
  44.               dxf5 (cdr (assoc 5 (entget en)))
  45.         )
  46.         (setq lst_hand (cons dxf5 lst_hand))
  47.         (setq i (1+ i))
  48.       )
  49.       (setq lst_hand (vl-sort lst_hand (function (lambda (x y) (< x y)))))
  50.       (setq lst (fd (mapcar 'handent lst_hand) n))
  51.       (mapcar '(lambda(x)
  52.       (setq ssx (lst2ss x)
  53.               box (acet-geom-ss-extents ssx t)
  54.               pt (mapcar '* '(0.5 0.5 0.5) (mapcar '+ (car box) (cadr box)))
  55.       )
  56.       (command "erase" ssx "")
  57.       (command "-insert" bnm pt "" "" "")
  58.       (Vlax-Put-Property (Vlax-Ename->Vla-Object (entlast)) 'Layer la)
  59.       (vlax-for X
  60.      (vla-item (vla-get-blocks
  61.    (vla-get-activedocument (vlax-get-acad-object))
  62.         )
  63.         bnm
  64.      )
  65.     (setq el (cons (vlax-vla-object->ename X) el))
  66.   )
  67.   (mapcar '(lambda (x) (VLA-PUT-COLOR (Vlax-Ename->Vla-Object x) 0))el)
  68.        ) lst)
  69.         (vl-cmdf "undo" "e")
  70. )
 楼主| 发表于 2013-12-30 10:52 | 显示全部楼层
本帖最后由 275437962 于 2013-12-30 10:54 编辑
q3_2006 发表于 2013-12-30 10:41

兄弟,再不弄了,我都快不好意思,这个多边形的很好,其实前面的我刚试了,在进行选择全部处理对象进,可以多次选择,其实已经满足要求了,只是有时不太稳定,偶尔会出现叠加的现象,我把CAD关闭重新启动就行了,还有就是原来两个符号距离近的,那么插入块的时候,这两个块的位置有些变化,不过已经很了不起了!!!从一开始,没有人理会,到后来,你不厌其烦的给解决,谢谢了,虽然中间出了点小插曲儿,呵呵,现在我觉得这不重要了!!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-9 07:48 , Processed in 4.378533 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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