老师好:
我这里准备实现一个关于倒角的功能,看到论坛之前的帖子,说可以考虑 使用mdlElmdscr_fillet 在二维图中,
我的代码是 这样创建的
CurveVectorPtr pCurveVec = CurveVector::Create(CurveVector::BOUNDARY_TYPE_Open );//BOUNDARY_TYPE_Outer BOUNDARY_TYPE_Open pCurveVec->Add(ICurvePrimitive::CreateLineString (pts2,14) );
DraftingElementSchema::ToElement(eeh1, *pCurveVec, nullptr, ACTIVEMODEL->Is3d(), *ACTIVEMODEL);
eeh1.AddToModel();
问题如下:
1、他绘制出来是一个 带有扣槽的矩形可以理解为,我想对 扣槽中的两个临边 做圆倒角,是不是可以认为这是一个二维图,因此可以采用 mdlElmdscr_fillet 进行操作?
2、 如果可以用的话,他的第一个参数 可以理解为 输出用的,那么第二个的作用就不清楚了、
3、根据对第三个参数和第四个参数的理解,他们应该是临边元素的意思,不知道这么理解对不对,如果对的话,是不是说明我我线串创建的 这一个元素 ,需要使用多个元素创建区分 要倒角的这两个临边啊?
4、第六个参数Dpoint3d * ,是不是代表 圆心位置的数组?那么这个圆心位置 有没有通用的计算方法?
5、mdlElmdscr_fillet 原则上 根据 圆心、两个临边的交点 是可以 绘制出 一个 优弧 和 一个劣弧的,我们 要怎么区分 哪一个是我们想要的呢?或者说怎么筛选出来我们需要的弧呢?
辛苦老师 ,百忙之中 给予 支持 和帮助,如果能够给出一个示例 分析 ,就更完美了!!!
第一个参数是返回的弧元素,第二个参数是用来设置一些符号化的属性,例如颜色、线宽等,3,、4是用来倒角的两条直线,5参数设置倒角的半径,如果两条直线相交的话,在交点处会有四种倒角情况,这两条直线把平面分成了四个区域,6参数的点在哪个区域倒角就在这个区域内。
mdlElmdscr_fillet是C时代的旧函数,C++时代推荐你直接用CurveCurve::CollectFilletArcs。它使用的是全新的PrimitiveCurve或CurveVector对象,而不再是老的MSElement或MSElementDescr了。
MDL中存在着两个时代的API,很容易把新用户搞晕。
您对第六个参数的描述 是: 该参数点 在哪个区域,倒角 就在哪个区域。是该区域内的任意一点吗?不是特指的 圆心点吗?
Bentley 二次开发小白一枚
半径都已经有了,这个圆心都是定的了。另外还是推荐用符老师说的接口,能用c++ class的就用,没有再考虑这些老的c style的函数。
符老师好:
帮我看一下我的测试代码,一个是用的老版本的 一个是 新的 ,都存在问题,辛苦您了!您看我在使用过程中 哪里存在问题 。辛苦了!!!
void testDaoJiao(DPoint3dR basePt) { DPoint3d pts2[2]; pts2[0]=basePt;pts2[1]=basePt; pts2[1].x=basePt.x+100000; EditElementHandle eeh1,eeh2,eeh3,eeh4; CurveVectorPtr pCurveVec = CurveVector::Create(CurveVector::BOUNDARY_TYPE_Open );//BOUNDARY_TYPE_Outer BOUNDARY_TYPE_Open pCurveVec->Add(ICurvePrimitive::CreateLineString (pts2,2) ); DraftingElementSchema::ToElement(eeh1, *pCurveVec, nullptr, ACTIVEMODEL->Is3d(), *ACTIVEMODEL); pts2[0]=basePt;pts2[1]=basePt; pts2[0].y=basePt.y-10000; pts2[1].x=basePt.x+100000; pts2[1].y=basePt.y+15000; CurveVectorPtr pCurveVec1 = CurveVector::Create(CurveVector::BOUNDARY_TYPE_Open );//BOUNDARY_TYPE_Outer BOUNDARY_TYPE_Open pCurveVec1->Add(ICurvePrimitive::CreateLineString (pts2,2) ); DraftingElementSchema::ToElement(eeh2, *pCurveVec1, nullptr, ACTIVEMODEL->Is3d(), *ACTIVEMODEL); Dpoint3d pp; pp.x=basePt.x+100; pp.y=basePt.y+100; pp.z=basePt.z; //准备倒角 。 bvector<CurveCurve::FilletDetail> arcs; CurveCurve::CollectFilletArcs(*pCurveVec , *pCurveVec1 , 1000 , true , arcs );//使用这个方法后,没有看到倒角后的效果。 if(arcs.size()==0) return ; eeh1.AddToModel(); eeh2.AddToModel(); /* //使用mdlElmdscr_fillet 方法 使用该方法 存在 崩溃的现象,老师可以帮忙看一下! ElementPropertiesSetterPtr setter = ElementPropertiesSetter::Create(); setter->SetLinestyle(3, NULL);//设置线性 虚线 setter->SetWeight(10);//设置线宽度 setter->SetColor(2);//设置线性颜色 setter->Apply(eeh4);//线形应用 if(SUCCESS==mdlElmdscr_fillet(eeh3.GetElementP() , eeh4.GetElementP() , eeh1.GetElementDescrP() , eeh2.GetElementDescrP() , 1000, &pp , NULL) ) { if(eeh3.IsValid() ) { eeh1.AddToModel(); eeh2.AddToModel(); eeh3.AddToModel(); } } */ return ; }