明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 5752|回复: 15

按填充图案样式筛选出相同填充图案?问题已解决。

[复制链接]
发表于 2012-8-1 13:00:58 | 显示全部楼层 |阅读模式
本帖最后由 ★飞飛★ 于 2012-8-2 10:48 编辑

  这是本人编写的程序,在两种以上的填充图案时会陷入死循环状态,不能筛选出相同的填充图案来。请教这里的高手们给修改一下,谢谢!如本程序修改完善,将对外幕墙等相关按填充图案表示材质的工程的算量将是非常有用的东西,能节省大量宝贵的时间。

(defun c:sxt () ;按填充图案样式过滤选择相同填充图案
   (setvar "cmdecho" 0)
   (princ "\n点选填充图案样式名称:")
   (setq fil (ssget (list '(0 . "HATCH"))))
   (setq sn (ssname fil 0)) ;图元名1
   (setq eg (entget sn)) ;图元名1列表
   (setq s1 (cdr (assoc 2 eg)) ) ;图元名1中填充图案名称

(setq ss (ssget (list '(0 . "HATCH"))))
(setq len (sslength ss)) ;确定选中的个数
(setq n 0)
(while (<= n (- len 1))
  (progn
   (setq sn1 (ssname ss n)) ;图元名n
   (setq eg1 (entget sn1)) ;图元名n列表
   (setq s2 (cdr (assoc 2 eg1)) ) ;图元名n中填充图案名称
   (cond ((= s2 s1)
           (command "PSELECT" sn1 "")
           (setq n (+ 1 n))
         )
   ) ;cond
  ) ;progn
);while
  (setvar "cmdecho" 1)
  (princ)
)

本帖被以下淘专辑推荐:

  • · 学习|主题: 95, 订阅: 8
 楼主| 发表于 2012-8-2 10:46:49 | 显示全部楼层
本帖最后由 ★飞飛★ 于 2012-8-6 18:42 编辑

问题已解决。在此粘贴出代码,供童鞋们工作学习使用。
如果不能亮显出对象,出现提示“未知命令PSELECT”时,解决方法是:请童鞋自己按下Ctrl+1,调出对象特性选项板,然后关闭对象特性选项板就能可以用了。
  1. (defun c:sxt () ;按填充图案样式筛选出相同填充图案
  2. (setvar "cmdecho" 0)
  3. (princ "\n请点选需要过滤的填充图案:")
  4. (setq fil (ssget ":E:S" (list '(0 . "HATCH"))))
  5. (setq sn (ssname fil 0)) ;图元名1
  6. (setq eg (entget sn)) ;图元名1列表
  7. (setq s1 (assoc 2 eg)) ;图元名1中填充图案名称

  8. (princ "\n请选择对象范围,过滤填充图案:")
  9. (setq ss (ssget (list '(0 . "HATCH") s1)))
  10. (setq len (sslength ss)) ;确定选中的个数
  11. (setq n 0)
  12. (repeat len
  13.   (setq sn1 (ssname ss n)) ;图元名n
  14.   (setq eg1 (entget sn1)) ;图元名n列表
  15.   (setq s2 (cdr (assoc 2 eg1)) ) ;图元名n中填充图案名称
  16.   (if (= s2 (cdr s1))
  17.       (command "SELECT" ss "")
  18.       (setq n (1+ n))
  19.   );if
  20. );repeat
  21. (setvar "cmdecho" 1)
  22. (princ)
  23. )


回复 支持 1 反对 0

使用道具 举报

发表于 2023-5-22 16:33:18 | 显示全部楼层
;;;下面这个可以选择相同图案一起移动到指定点,你们试试吧,
(defun c:sxt () ;按填充图案样式筛选出相同填充图案
        (setvar "cmdecho" 0)
        (princ "\n点选填充样图:")
        (setq sample (ssget(list '(0 . "HATCH"))))       
       
        (while(and(princ "\n框选相同图案范围:")(setq ss (ssget (list '(0 . "HATCH") (assoc 2(entget(ssname sample 0)))))))
          (setq ptz (T-get-object-center-pt (ssname ss 0 )))
                (command "move" ss "" ptz pause)
        )       
        (setvar "cmdecho" 1)
        (princ)
)

(defun T-get-object-center-pt (name)
        (setq obj (vlax-ename->vla-object name))
        (vla-GetBoundingBox obj 't-min 't-max)
        (setq t-min (safearray-value t-min))
        (setq t-max (safearray-value t-max))
        (polar t-min (angle t-min t-max) (/ (distance t-min t-max) 2))
)

发表于 2022-3-19 20:34:12 | 显示全部楼层
★飞飛★ 发表于 2012-8-2 10:46
问题已解决。在此粘贴出代码,供童鞋们工作学习使用。
如果不能亮显出对象,出现提示“未知命令PSELECT” ...

感谢大佬分享,我这边试用了一下,您这个插件好像我选中了图案筛选后,按一下空格就又取消了选择呢,您知道是什么问题 吗
发表于 2012-8-1 20:07:23 | 显示全部楼层
(command "SELECT" sn1 "")
上句中的 PSELECT 是什么命令~?
 楼主| 发表于 2012-8-2 09:44:25 | 显示全部楼层
就是按Ctrl+1对象特性面板中的选择对象按钮,命令名为PSELECT,选择对象后就亮显的,之后就可以常规操作如移动,复制,删除等。
发表于 2012-10-30 23:06:13 | 显示全部楼层
下载了  待学习   
发表于 2012-12-24 21:29:22 | 显示全部楼层
好东西,学习了,感谢楼主
发表于 2012-12-26 10:04:46 | 显示全部楼层
楼主能继续开发下去,能自动计算填充面积就更好了
 楼主| 发表于 2014-10-19 15:39:50 | 显示全部楼层
bai2000 发表于 2012-12-26 10:04
楼主能继续开发下去,能自动计算填充面积就更好了

可以的,只是加一小段统计汇总面积的程序即可,会者不难,难点是筛选相同填充图案,呵呵
发表于 2014-11-11 13:29:57 来自手机 | 显示全部楼层
感谢大侠,今天正需要!
发表于 2015-7-13 19:50:18 | 显示全部楼层
顶上去,希望能等到填充面积
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-25 07:38 , Processed in 0.182306 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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