找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 666|回复: 7

[ARX程序]:救命啊!!!!构建多义线的点序问题!!

[复制链接]
发表于 2004-8-5 11:22:37 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
前条件,框选了一个已炸的正多边形,取得这多边直线的选择集:

.........................
        acedSSLength(lineSSet, &setLength);        //取得选择集长度

        for(int k=0; k < setLength; k++)        //循环
        {       
                AcDbObjectId pEntId ;                //对象ID
                acedSSName(lineSSet, 0, temEnt);        //取得集时的第一个实体

                acdbGetObjectId(pEntId, temEnt);        //取得对象ID       
                acdbOpenObject(pEnt, pEntId, AcDb::kForRead);        //取得实体对象名

                pLine = AcDbLine::cast(pEnt);                    //给直线指针赋值

                arrPolylinePoints->append(pLine->startPoint(); //追加所有直线的起点到点组
        }
..........

        for(int j=0; j < arrPolylinePoints.length(); j++)
        {
                pPolyLine = new AcDb3dPolyline(AcDb::k3dSimplePoly,arrPolylinePoints, Adesk::kTrue);        //创建一条多义线
        }
...............

可创建出来的多边形和原来的不一样,而有会出现交叉线!!!!
现想应是点在构造选集时,读点,序出问题了,请问如何才能这些点按序排列了,由于自己的水平有限,尝试了好多方法都不成功,请那位前辈高人,指点一下小弟, 帮我写一下判断点序的主原码, 因为实在写不出来.搞了好几天了.快晕倒了...谢谢了.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2004-8-5 13:59:10 | 显示全部楼层
1、在炸开之前将Polyline所有点读出
2、将所有炸开后的线,首尾相连组成新的Polyline
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-8-5 18:09:27 | 显示全部楼层
现在问题是,早就已经炸开了,给出的是一个已经炸开的多边形,所以无法在之前读点,
像你那样说,首尾相连,你又怎么知道那个首该连那个尾???这就是点序的问题,我现在就是无法把这些点排序咯, 希望有人能写几句有帮助的代码给我看一下咯. 期待期待!!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-8-5 18:52:23 | 显示全部楼层
炸开后应该存在直线或弧线等,可以通过这些线来首尾相连!
你想通过点来连成多边形,除非你的点是有序的!否则不可能实现!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-8-5 19:03:30 | 显示全部楼层
不同首尾的点有相同的就连
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-8-26 22:09:18 | 显示全部楼层
你要折腾啥啊??
炸开了,然后连起来。。。。。。
寒。。。。

说说你的意图吧。。。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-8-27 10:42:41 | 显示全部楼层
问题可以解决,我提供三个思路:
1 . 读出所有线段,循环查找重合的端点,把这些线焊接起来,这个在论坛里可以搜索到
2. 读出所有起点组成坐标数组后,让他们组合成凸多边形(凸包),有现成算法,不适合凹多边形
3.如果这些线段是扎开的,它们的ID是连续的,根据这个也可以判断的
如果没有解决可以联系 zydms@163.com
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-8-27 10:55:31 | 显示全部楼层
很显然你的实体不是按照你的意图读出来的,比如说一个5边形,你读了任意一个实体的Startpoint,但读到第二个却不一定是和它相连的,依次这样下来肯定是有交叉的,所以说你在读实体之前,你应该确保你读到实体依次的(就是按照你的顺序),我自己感觉可能有比楼上更简洁的办法来实现的,楼上的方法也挺好。
//多义线是一个数组,你的意思是arrPolylinePoints.length()个多义线?
//你只是把最后一个加到数据库,其实有好多个你都没有用,浪费资源
//for(int j=0; j < arrPolylinePoints.length(); j++)
//{
pPolyLine = new AcDb3dPolyline(AcDb::k3dSimplePoly,arrPolylinePoints, Adesk::kTrue); //创建一条多义线
//}

PostToDatabase();//加入数据库
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-9-22 01:39 , Processed in 0.210274 second(s), 46 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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