一个六棱柱(有不同的色段),上面套了很多球,拖动柱子时能整体移动,请问通过什么方式,调用哪些接口可以做到?
有三种方法,一、把这些元素做成一个单元;二、把这些元素放到同一个命名组里边,移动元素的时候只要把Group锁打开就可以同时移动了;三、通过元素依赖实现,元素依赖在v8i的SDK文档里边有比较详细地介绍(如插图所示),在CE SDK文档里没找到,不知道是去掉了,还是我找的方法不对,您可以先看看V8iSDK的文档先理解一下原理。
1.能否具体说一下调用哪个接口可以绘制六棱柱、球?
2.如何绘制才能达到球被棱柱穿过的效果,见上图
3.如果球要沿棱柱上下移动,应该调用哪个接口,具体咋做可否给个例子?
我用的是NativeCode方式
下边的代码创建了一个三棱柱的,您可以参考一下。如何移动应该是在您别的帖子里边回复过了,这里就不再重新赘述了:)
ElementHandle CreateTriangleExtrusion(DPoint3d ptS, DPoint3d ptE) { EditElementHandle eleRtn; DgnModelRefP dgnModel = ISessionMgr::GetActiveDgnModelRefP(); double extrusionLen = ptS.Distance(ptE); DPoint3d ptArr[4]; double TriangleEdgeLen = 100000; ptArr[0].x = 0; ptArr[0].y = TriangleEdgeLen / 2 / sqrt(3) * 2; ptArr[0].z = 0; ptArr[1].x = TriangleEdgeLen / 2; ptArr[1].y = -TriangleEdgeLen / 2 / sqrt(3); ptArr[1].z = 0; ptArr[2].x = -TriangleEdgeLen / 2; ptArr[2].y = -TriangleEdgeLen / 2 / sqrt(3); ptArr[2].z = 0; ptArr[3] = ptArr[0]; bvector<Dpoint3d> vecPt; vecPt.push_back(ptArr[0]); vecPt.push_back(ptArr[1]); vecPt.push_back(ptArr[2]); vecPt.push_back(ptArr[3]); ICurvePrimitivePtr curPri = ICurvePrimitive::CreateLineString(vecPt); CurveVectorPtr curveVec = CurveVector::Create(CurveVector::BOUNDARY_TYPE_Outer); curveVec->Add(curPri); DVec3d dvec3d; dvec3d.x = 0; dvec3d.y = 0; dvec3d.z = extrusionLen; DgnExtrusionDetail dgnExtruDeta =DgnExtrusionDetail(curveVec,dvec3d, true); ISolidPrimitivePtr solidPrimi = ISolidPrimitive::CreateDgnExtrusion(dgnExtruDeta); DraftingElementSchema::ToElement(eleRtn, *solidPrimi, NULL, *dgnModel); return eleRtn; }
Answer Verified By: 周谦益 Zhou Qianyi
2.如何绘制才能达到球被棱柱穿过的效果?是两个实体求并?具体用哪个接口?
如果已知六边形的中心点坐标和边长,有什么接口可以直接创建吗?
是的,需要通过实体求交。首先您要通过SolidUtil::Create类下的静态成员函数创建出实体,然后通过SolidUtil::Modify类下的静态成员函数做实体之间的运算。具体怎么用结合上边我提供的创建三棱柱的代码您在代码里边一写代码就明白了。如果还有不明白的地方,欢迎随时到这里提问:)