明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2956|回复: 17

[已解答] 删除闭合图形上多余节点如何实现?

[复制链接]
发表于 2013-12-8 21:25 | 显示全部楼层 |阅读模式
我想实现删除闭合图形上多余节点(闭合图形上一条直线上的多余节点),我本来的实现思路是,获取对象列表里面节点坐标,判断相邻三个点的角度关系来判断,如果三个点坐标不在同一条直线上,就将中间点坐标放入新的坐标列表里面。然后依次循环下去,直到判断完所有的节点坐标。最后根据新的坐标列表,利用(command "pl")来重画图形。
但是,突然想到如果闭合图形是由多段线和圆弧组成的,那我用(command "pl")重画的图形就不对了。
请高手给个思路。怎么解决带圆弧的闭合图形。
发表于 2013-12-9 02:33 | 显示全部楼层
本帖最后由 llsheng_73 于 2013-12-9 02:49 编辑

由于多线段可以有凸度,所以最好不要用得出坐标点去掉多余的之后去绘制它,个人感觉那样会很麻烦
我的想法是首先通过entget得到它的所有数据endata,定位它的90组码一是得到它的总点数(一会修改的时候还要改它的值)从它后边开始,碰到组码10就可以得出它的坐标,略过40,41组看42组判断有无凸度,如果有跳过这个点,如果没有再往后得到两个点,这样就会有三个点,只要中间那个点上没有凸度就可以进一步去判断它们是否在同一直线段上,如果是,去掉中间这个点并且在endata里边去掉它以及对应的40、41、42组再往后得到一个点来进行判断,始终保持三个点一起进行判断,最终就能把直线段中间的点都去掉了,当然取每次第二个点的时候还得判断一下它是否与前一点距离小到可以认为是同一个点(这个只能通过距离来判断)不然计算角度时可能会出错,最后把90组的值改一下,再entmod
另外个人认为判断三个点是否在同一直线可能通过计算中间那个点到另两点所组成的直线的距离更好些,或者计算三个点的面积也可以
当然对于非LWPOLYLINE多线段,它的坐标点得通过entnext来得到直到碰到一个结束标志为止,由于平时没有处理过那类多线段,具体怎么处理我也说不上来
发表于 2013-12-9 09:13 | 显示全部楼层
直线(Line) 上的多余节点可试试 OverKill
发表于 2013-12-9 11:13 | 显示全部楼层
先来张图示,说明要求怎么干,这样更形象,文字太多,语文没有学好,不容易看懂
发表于 2013-12-9 21:13 | 显示全部楼层
command函数 不过建议用entmake好操作。
  1. (command "pline" pause "non" "@67.5,0" "non" "@0,0.9" "a" "non" "@-3.6,3.6" "l" "non" "@-24.3,0" "a" "non" "@-3.6,3.6" "l"
  2.          "non" "@0,83.8" "a" "non" "@3.6,3.6" "l" "non" "@24.3,0" "a" "non" "@3.6,3.6" "l" "non" "@0,0.9" "non" "@-67.5,0" "non" "@0,-0.9"
  3.          "a" "non" "@3.6,-3.6" "l" "non" "@24.3,0" "a" "non" "@3.6,-3.6" "l" "non" "@0,-83.8" "a" "non" "@-3.6,-3.6" "l"
  4.          "non" "@-24.3,0" "a" "non" "@-3.6,-3.6" "l" "c")
 楼主| 发表于 2013-12-9 21:30 | 显示全部楼层
Andyhon 发表于 2013-12-9 09:13
直线(Line) 上的多余节点可试试 OverKill

什么意思?没看懂。。。
 楼主| 发表于 2013-12-9 21:40 | 显示全部楼层
llsheng_73 发表于 2013-12-9 02:33
由于多线段可以有凸度,所以最好不要用得出坐标点去掉多余的之后去绘制它,个人感觉那样会很麻烦
我的想法 ...

这个方法可以试试
 楼主| 发表于 2013-12-9 21:40 | 显示全部楼层
edata 发表于 2013-12-9 21:13
command函数 不过建议用entmake好操作。

这个真心看不懂
发表于 2013-12-9 22:06 | 显示全部楼层
我来看MM的 发表于 2013-12-9 21:30
什么意思?没看懂。。。

以 Line 命令 绘制水平相接的的若干线段
再执行 OVerKill ==> 选取 若干线段
 楼主| 发表于 2013-12-9 22:23 | 显示全部楼层
Andyhon 发表于 2013-12-9 22:06
以 Line 命令 绘制水平相接的的若干线段
再执行 OVerKill ==> 选取 若干线段

弱弱的问下“OVerKill ”这个是什么?

点评

安装ET后的一个命令  发表于 2013-12-10 08:09
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-20 04:33 , Processed in 0.355674 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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