明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 944|回复: 16

[提问] 请教一下,选择了一个样板块,之后怎么框选和这个样板块一样的其他块

[复制链接]
发表于 2021-11-12 12:06:16 | 显示全部楼层 |阅读模式
本帖最后由 蜀国的大熊猫 于 2021-11-12 14:26 编辑

首先非常感谢您抽出划水的时间来看我的帖子。

目前我有一个这样的需求需要实现,本来已经找贱人工具箱的作者定制,但是有QQ 网址等水印,用着有点不舒服。

因为自己学开发的,所以四处学习,找到了LISP,但是我这个面向对象的思想实在是转不过这个面向表的编程。

后来找到了明经社区,社区大神还是很多啊,感觉自己实现有希望了。

步骤如下:

1、选择一个对齐原点,(其实就相当于拾取了一个位置,作为我的初始坐标中心)
(setq duiqi_yuandian (getpoint "选择原点"))


2、选择一个样板块
(setq block_yangli (entsel "选择一个样板块"))


3、根据这个样板块选择一样的块
(setq selected_blocks (ssget '((0 . "INSERT"))))


4、回车导出这些被选中的块坐标,这个坐标是基于第一步的原点的坐标
(setq locationFile (getfiled "坐标文件保存为" "C:/点位坐标" "txt" 1))


到目前为止,东拼西凑的写了四个简单步骤,但是里面的逻辑真的无从下手。

所以请教一下您,

1、如何根据我的样板块,在ssget里选中同样的块

2、如何根据我第一步的原点,导出这些块的坐标

不胜感激!

附件是写好的插件效果。

本帖子中包含更多资源

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

x
 楼主| 发表于 2021-11-13 01:26:26 | 显示全部楼层
start4444 发表于 2021-11-12 14:40
试过了,步骤是这样了,但是结果也是不清楚那个坐标对应是那个块啊,你要这个文件有啥用。。。
他提取的 ...

大哥 , 我这个写的差不多了。 还剩最后一步卡着了。
我获取了样例块之后 也根据这个样例块 把想同的选中了,如下
(setq blocks_selected (ssget (list '(0 . "INSERT") (cons 2 block_name))))

接下我循环遍历这个blocks_selected的时候 始终获取不到坐标,帮忙看下吧。

repeat 我也试了。
foreach 我也试了。

但就是一直报错。

      (foreach block blocks_selected

        (setq block_x (rtos (nth 0 block) 2 3))
        (setq block_y (rtos (nth 1 block) 2 3))
        (setq zuobiao (strcat "[" block_x "," block_y "]"))
        (write-line zuobiao locationFile)
      )
发表于 2021-11-14 20:44:49 | 显示全部楼层
蜀国的大熊猫 发表于 2021-11-13 01:26
大哥 , 我这个写的差不多了。 还剩最后一步卡着了。
我获取了样例块之后 也根据这个样例块 把想同的选 ...

选集就用repeat吧
(setq i 0)
(repeat (sslength blocks_selected)
        (setq en (ssname blocks_selected i)
                    i (1+ i)
                    block_x (rtos (car (cdr(assoc 10 (entget en))))2 3)
                    block_y (rtos (cadr (cdr(assoc 10 (entget en))))2 3)
              zuobiao (strcat "[" block_x "," block_y "]")       
        )
(write-line zuobiao locationFile)
)  
 楼主| 发表于 2021-11-12 14:01:14 | 显示全部楼层
start4444 发表于 2021-11-12 13:56
1,提取样板块的块名,再用  (setq selected_blocks (ssget '((0 . "INSERT") (2 . 样板块名)))) 可以选到 ...

感谢感谢。

我现在一头雾水的还有一个问题就是怎么获取他的属性。比如这个块的xy,我在js或者java直接就是 obj.x 或者 obj.y
能否推荐个什么网址,或者文档能让我看到这些属性的获取方法?

我其实只需要块的中心点坐标 就行
发表于 2021-11-12 13:56:51 | 显示全部楼层
1,提取样板块的块名,再用  (setq selected_blocks (ssget '((0 . "INSERT") (2 . 样板块名)))) 可以选到同名块选集.
2, 你说块的坐标是基点坐标吧,先提取块基点xy,再各自减去所选原点xy ,应该就得到相对坐标位置了,对选集内的块都处理一下把得出的点坐标组合成表,最后你还得把表的内容逐一写入txt文件。
另外有个问题你要考虑哪个点坐标是对应哪个块的?
 楼主| 发表于 2021-11-12 14:04:02 | 显示全部楼层
start4444 发表于 2021-11-12 13:56
1,提取样板块的块名,再用  (setq selected_blocks (ssget '((0 . "INSERT") (2 . 样板块名)))) 可以选到 ...

另外 我刚刚也找到这个 帖子,
同种的块一部分修改块名

http://bbs.mjtd.com/forum.php?mo ... mp;highlight=%BF%E9

这里的一部分逻辑我基本是可以复用的
发表于 2021-11-12 14:25:31 | 显示全部楼层
蜀国的大熊猫 发表于 2021-11-12 14:01
感谢感谢。

我现在一头雾水的还有一个问题就是怎么获取他的属性。比如这个块的xy,我在js或者java直接 ...

这些操作都不复杂,就是步骤有点多,在论坛都有,你慢慢找找吧
把你定制那个做个动画发上来人家看了就一清二楚最终效果了
 楼主| 发表于 2021-11-12 14:26:59 | 显示全部楼层
start4444 发表于 2021-11-12 14:25
这些操作都不复杂,就是步骤有点多,在论坛都有,你慢慢找找吧
把你定制那个做个动画发上来人家看了就一 ...

对的 对的,附件就是,已经上传了,如果您有时间的话,就帮忙看下吧
发表于 2021-11-12 14:40:52 | 显示全部楼层
蜀国的大熊猫 发表于 2021-11-12 14:26
对的 对的,附件就是,已经上传了,如果您有时间的话,就帮忙看下吧

试过了,步骤是这样了,但是结果也是不清楚那个坐标对应是那个块啊,你要这个文件有啥用。。。
他提取的也是块基点,不是块中心,如果你的块基点不是中心点那坐标就不对了
发表于 2021-11-12 14:48:48 | 显示全部楼层
按块名进行选择
 楼主| 发表于 2021-11-12 14:53:51 | 显示全部楼层
start4444 发表于 2021-11-12 14:40
试过了,步骤是这样了,但是结果也是不清楚那个坐标对应是那个块啊,你要这个文件有啥用。。。
他提取的 ...

我是搞物联网可视化的,我们需要把这些设备点位标记到三维模型里,因为三维模型是按照CAD来的,所以我在cad里选一个点,导出设备基于这个点的坐标。然后去三维里选同样位置,就把坐标换算到三维中去。
 楼主| 发表于 2021-11-12 14:56:03 | 显示全部楼层
start4444 发表于 2021-11-12 14:40
试过了,步骤是这样了,但是结果也是不清楚那个坐标对应是那个块啊,你要这个文件有啥用。。。
他提取的 ...

至于这个块的点是给的基准点还是中心点的坐标,其实偏差不大,以忽略不计。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-2-21 03:14 , Processed in 0.180946 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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