dipenghao
发表于 2004-9-24 10:06:00
网格是类AcDbFace四个点形成的。
多段线是AcDbPolyline类形成的。
现在判断出两个实体相交,如果要求面积,可以首先形成面域或构造闭合多义线,都可以得到面积。现在的情况是如何构造??
easypower
发表于 2004-9-24 11:24:00
如果你不知道构成面域的实体,那你就得自己写算法实现求轮廓的函数,
或者你用acedCommand调边界来求。。。。。。
帮不了你,太复杂,没那么多时间的,
只能帮你提供参考意见
dipenghao
发表于 2004-9-27 16:51:00
实体知道。但是两个实体相交得到的面域可能不止一个。如何选择那个是?????
easypower
发表于 2004-9-27 17:06:00
“两个实体相交得到的面域可能不止一个“
不明白,请贴图说明
dipenghao
发表于 2004-9-28 07:32:00
命令: _region<BR>选择对象: 找到 1 个<BR>选择对象: 找到 1 个,总计 2 个<BR>选择对象:<BR>已提取 2 个 环。<BR>已创建 2 个 面域。
我用工具栏上的命令:(面域),分别选择了两个实体,结果提示已经创建了两个面域,?我的问题主要是要他们相交的部分 也就是一个AcDbFace(四个点)类和AcDbPolyline类的求交集的面积问题
easypower
发表于 2004-9-28 10:57:00
你用这两个面域,然后求交呀!!
funlxming
发表于 2004-9-28 13:22:00
版主说的只有在两个封闭时才能用。但楼主说的可不是这样,我觉得有个简单的办法,就是用boundary命令。我以前曾企图写个这样的算法,可是效果不太理想,便作罢了。
easypower
发表于 2004-9-28 13:45:00
是要封闭,搂主给的例子也是封闭的呀,
是可以用boundary,有一定限制
最好自己写算法
dipenghao
发表于 2004-9-28 14:23:00
我这样做的<BR> AcDbVoidPtrArray curveSegments,regions;<BR> curveSegments.append(pFace);<BR> curveSegments.append(pPoly);
AcDbRegion reg;<BR> if(Acad::eInvalidInput==reg.createFromCurves(curveSegments,regions))<BR> acutPrintf("不合法\n");
double regArea;<BR> reg.getArea(regArea);<BR> reg.close();<BR> acutPrintf("area=%0.3f\n",regArea);
可能是我理解错了。createFromCurves函数的该怎么使用??<BR>
easypower
发表于 2004-9-28 16:58:00
AcDbVoidPtrArray regions;<BR> AcDbRegion::createFromCurves(entities, regions);
if (regions.length() < 1) <BR> {<BR> return Acad::eInvalidInput;<BR> }<BR> AcDbRegion *pRegion = new AcDbRegion;<BR> assert(pRegion != NULL);
for (int i = 0; i < regions.length(); i++)<BR> {<BR> pRegion->booleanOper(AcDb::kBoolUnite,(AcDbRegion*)regions);//AcDb::kBoolUnite自己用什么类型自己查<BR> delete (AcRxObject*)regions;<BR> }
......