- // A point from trihedron
- Handle(Geom_Point) aPnt = aPoint->Component();
- BRep_Builder aBuilder;
- TopoDS_Vertex aVertex;
- aBuilder.MakeVertex(aVertex, aPnt->Pnt(), Precision::Confusion());
- if (!aVertex.IsNull())
- thePrs.setShape(aVertex);
+ // An origin point from trihedron
+ ResultPtr aOrigin;
+ for (int i = 0; i < aSize; i++) {
+ aObj = aDoc->object(ModelAPI_ResultConstruction::group(), i);
+ if (aObj->data()->name() == "Origin") {
+ aOrigin = std::dynamic_pointer_cast<ModelAPI_ResultConstruction>(aObj);
+ break;
+ }
+ }
+ if (aOrigin.get()) {
+ thePrs->setObject(aOrigin);
+ thePrs->setShape(aOrigin->shape());
+ return;
+ }
+ }
+ }
+#else
+ /// find axis direction
+ Handle(AIS_TrihedronOwner) aTrihedronOwner = Handle(AIS_TrihedronOwner)::DownCast(theOwner);
+ if (!aTrihedronOwner.IsNull()) {
+ const Prs3d_DatumParts& aPart = aTrihedronOwner->DatumPart();
+ std::string aName;
+ switch (aPart) {
+ case Prs3d_DP_Origin: aName = "Origin"; break;
+ case Prs3d_DP_XAxis: aName = "OX"; break;
+ case Prs3d_DP_YAxis: aName = "OY"; break;
+ case Prs3d_DP_ZAxis: aName = "OZ"; break;
+ default: break;
+ }
+ if (aName.length() > 0) {
+ DocumentPtr aDoc = ModelAPI_Session::get()->moduleDocument();
+ int aSize = aDoc->size(ModelAPI_ResultConstruction::group());
+ ObjectPtr aObj;
+ ResultPtr aResult;
+ for (int i = 0; i < aSize; i++) {
+ aObj = aDoc->object(ModelAPI_ResultConstruction::group(), i);
+ if (aObj->data()->name() == aName) {
+ aResult = std::dynamic_pointer_cast<ModelAPI_ResultConstruction>(aObj);
+ break;
+ }
+ }
+ if (aResult.get()) {
+ thePrs->setObject(aResult);
+ thePrs->setShape(aResult->shape());
+ return;
+ }