明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1769|回复: 16

[已解答] 求助各位大神,帮忙想一个思路

[复制链接]
发表于 2015-12-25 11:21 | 显示全部楼层 |阅读模式
本帖最后由 xufansw 于 2015-12-25 11:20 编辑

问题:如图片所示,选中图片左边最外面的框,程序自动将框里面的对象进行分图层(效果如图片右边所示),小弟想了好久也没想出什么办法,求各位大神指点迷津。

本帖子中包含更多资源

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

x
 楼主| 发表于 2018-10-17 19:28 | 显示全部楼层
这个已经解决了,可以用KLayout软件处理。
发表于 2015-12-25 13:30 | 显示全部楼层
  1. (defun c:tt (/ DXF-10 ENT GET LA LEN N NN SEL)
  2.   (vl-load-com)
  3.   (defun TABLE (S / D R)
  4.     (while (setq D (tblnext S (null D)))
  5.       (setq R (cons (cdr (assoc 2 D)) R))
  6.     )
  7.   )
  8.   (princ "\n功能 [选择封闭给里的所有对象]")
  9.   (setq La (TABLE "LAYER"))
  10.   (and
  11.     (setq sel (car (entsel "\n选择封闭多线段:")))
  12.     (setq ent (entget sel))
  13.     (setq dxf-10 (vl-remove-if '(lambda (x) (/= (car x) 10)) ent))
  14.   )  
  15.   (if (and dxf-10 (setq get (ssget "_wP" (mapcar 'cdr dxf-10) '((0 . "LWPOLYLINE")))))
  16.     (progn
  17.       (setq n        0
  18.             len        (sslength get)
  19.       )
  20.       (repeat len
  21.         (setq
  22.           nn (vlax-ename->vla-object (ssname get (setq len (1- len))))
  23.         )
  24.         (vla-put-Layer nn (nth n la))
  25.         (setq n (1+ n))
  26.       )
  27.     )
  28.   )
  29.   (princ)
  30. )
 楼主| 发表于 2015-12-25 14:23 | 显示全部楼层
琴剑江山_10184 发表于 2015-12-25 13:30

大哥,可能是我没表达清楚,就像这个图片,一开始所有的框都在一个图层里,要实现的是,把最外面那个框放在【图层1】里,假如这时候隐藏掉【图层1】中所有的对象,再把最外面的框放到【图层2】里(就像图片里在【图层2】中就有3个框),假如再隐藏掉【图层3】中所有的对象,再把再把最外面的框放到【图层4】里,以此类推,直到所有对象都隐藏掉结束。

需要注意一点,不知道会产生多少个图层。

本帖子中包含更多资源

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

x
发表于 2015-12-25 14:51 | 显示全部楼层
遍历所有框,再框范围内再找框,如果有的话,就把框内框改到下一级图层里。然后再继续(当然把上级图层的框关闭)。
一级级的把框内的框往下级图层里挤。
 楼主| 发表于 2015-12-25 15:26 | 显示全部楼层
mikewolf2k 发表于 2015-12-25 14:51
遍历所有框,再框范围内再找框,如果有的话,就把框内框改到下一级图层里。然后再继续(当然把上级图层的框 ...

大哥,一开始我就这么想着去写的,我发现有点问题。

我按照您的意思举个例子哈。
k1范围内找框,找到了6个框k2、k3、k4、k5、k7,将这6个框放到下一个【图层2】里,k1图层关闭。

下一步程序该怎么做呢?或者说怎么保证程序从【图层2】里的对象选到框k2或者k3再去进行上面的步骤呢?而且还要保证k2和k3是同一个同层,k4和k5是同一个图层。

本帖子中包含更多资源

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

x
发表于 2015-12-25 15:43 | 显示全部楼层
1得到多个框的选择集
2遍历选择集内每个框,取出没有被其它框包围的框——图层1,选择集去掉这部分框
3遍历选择集内每个框,没有被其它框包围的框——图层2,选择集去掉这部分框
4、如此循环直到选择集为空,循环几次就有几层
发表于 2015-12-25 15:51 | 显示全部楼层
以下是我的分析:
1. K1(A层)范围内找,找到K2-K7,K2-K7放入B层。
2. 关闭A层,有K2-K7,在K2-K7范围内找,把所有框内的框放入C层。结果是K2、K3在B层,K4-K7在C层。在找K6的时候,里面没东西,不操作;找到K2的时候,里面的K4、K6都会被找到,都会被改到下层。
3. 关闭B层,有K4-K7,重复上述操作,把K6、K7放入D层。
4. 关闭C层,有K6、K7。经过查找,没有框内物体了。程序结束。
发表于 2015-12-29 16:34 | 显示全部楼层
wzg356 发表于 2015-12-25 15:43
1得到多个框的选择集
2遍历选择集内每个框,取出没有被其它框包围的框——图层1,选择集去掉这部分框
3遍 ...

这个方法好~
发表于 2015-12-31 13:35 | 显示全部楼层
这程序有啥用?图层分这么多,而且是这么个分层原则,对于以后的使用来说也是个麻烦。
发表于 2015-12-31 13:41 | 显示全部楼层
如果不用数学方法,可以用选择的话,给你一个选择次数最少的方法,效率会高很多
1.所有对象加xdata  数据为1
2.用每个对象的节点ssget "_wP"选一次,被选中的对像xdata加1
3.遍历全部对象,xdata 为1的放图层1 ,2的放图层2... ...
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-26 20:31 , Processed in 0.341272 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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