jack1975 发表于 2003-1-13 16:34:00

在线求助各位高手 选择集的操作

我现在有一选择集,比如是有一些正交的线段组成,我现在要把各线段的端点移动到交点上去,请问,我如何遍历选择集的各实体并编辑之?
希望高手提供思路一二,不胜感激
谢谢!!!!!

leeyeafu 发表于 2003-1-14 08:42:00

遍历选择集

首先假定你的选择集为 ads_name e;(用acedSSGet或acedSSAdd函数获得)
利用acedSSLength()可获得选择集内实体数;用acedSSName()获得指定位置的实体。注意:这两个函数都应该使用long类型参数!
代码例子:
ads_name e;
......//获取选择集代码略
ads_name ent;//这个变量用于存放选择集内实体
long iLen;
if(acedSSLength(e,&iLen)!=RTNORM)
{acutPrintf("\n获取选择集长度出错!");
    return;}
for(long i=0;i<=iLen;i++)
{
   if(acedSSName(e,i,ent)!=RTNORM)
  { acutPrintf("\n获取选择集内第%d个实体出错!",i);
    return;   }
   ...../*现在你可以使用ads_name ent;若要使用AcDb类库,用acdbGetObjectId()函数获取实体ID,用acdbOpenObject()函数获取AcDb实体*/
}

jack1975 发表于 2003-1-14 08:57:00

谢谢……另外……

思路已知,谢谢,问题是在操作实体时的各种小问题,对于这种经验的东西,不知道有何参考?

另外,我现在有一直线(Line),同时该直线和其他直线有实交点、虚交点,我要首先找出各实交点,并利用交点把直线阿打断,并操作各线段,曾问过一人,只是提了一些思路,但想知道具体函数,请教?

leeyeafu 发表于 2003-1-14 09:44:00

其实我也只能提供思路

求交点的函数:(要使用AcDb类库)
Virtual Acad::ErrorStatus AcDbEntity::intersectWith(const AcDbEntity* ent,AcDb::intersect intType,AcGePoint3dArray& points,int thisGS=0,int otherGS=0) const;
该函数用于求解图形中两个实体间的交点。调用它时,要提供求交操作的另一个实体及求交点的方式,由points参数返回交点数组。其中求交点的方式可取以下值:kOnBothOperands(在两个实体上,即不延长对象,求实交点)、kExtendThis(延长调用者对象)、kExtendArg(延长目标对象)、kExtendBoth(两个对象都延长)。
该函数的最后两个参数用于指定自定义对象的GS标志,求直线交点不需要。
ARX不提供现成的打断函数,打断直线可用修改一条线,再添加一条线来完成操作。
页: [1]
查看完整版本: 在线求助各位高手 选择集的操作