- // // fix this edge
- // FeaturePtr aFix = theSketch->addFeature(SketchPlugin_ConstraintRigid::ID());
- // aFix->data()->refattr(SketchPlugin_Constraint::ENTITY_A())->
- // setObject(aMyFeature->lastResult());
- // // we need to flush created signal in order to fixed constraint is processed by solver
- // Events_Loop::loop()->flush(Events_Loop::eventByName(EVENT_OBJECT_CREATED));
- //}
- return aMyFeature->lastResult();
- }
- }
- }
- if (theShape.ShapeType() == TopAbs_VERTEX) {
- FeaturePtr aMyFeature = theSketch->addFeature(SketchPlugin_Point::ID());
-
- if (aMyFeature) {
- DataPtr aData = aMyFeature->data();
- AttributeSelectionPtr anAttr =
- std::dynamic_pointer_cast<ModelAPI_AttributeSelection>
- (aData->attribute(SketchPlugin_SketchEntity::EXTERNAL_ID()));
-
- ResultPtr aRes = std::dynamic_pointer_cast<ModelAPI_Result>(theObject);
- // if there is no object,
- // it means that this is the origin point: search it in the module document
- if (!aRes.get()) {
- ObjectPtr aPointObj = ModelAPI_Session::get()->moduleDocument()->objectByName(
- ModelAPI_ResultConstruction::group(), "Origin");
- if (aPointObj.get()) { // if initialization plugin performed well
- aRes = std::dynamic_pointer_cast<ModelAPI_Result>(aPointObj);
- }
- }
- // reference to itself with name "Origin" (but this may cause the infinitive cycling)
- if (!aRes.get()) {
- // If the point is selected not from Result object
- std::shared_ptr<GeomAPI_Shape> aShape =
- std::shared_ptr<GeomAPI_Shape>(new GeomAPI_Shape());
- aShape->setImpl(new TopoDS_Shape(theShape));
-
- std::shared_ptr<GeomAPI_Vertex> aVertex =
- std::shared_ptr<GeomAPI_Vertex>(new GeomAPI_Vertex(aShape));
- std::shared_ptr<GeomAPI_Pnt> aPnt = aVertex->point();
-
- std::shared_ptr<GeomAPI_Pnt2d> aPnt2d = convertTo2D(theSketch, aPnt);
- std::shared_ptr<GeomDataAPI_Point2D> aPoint =
- std::dynamic_pointer_cast<GeomDataAPI_Point2D>(
- aData->attribute(SketchPlugin_Point::COORD_ID()));
- aPoint->setValue(aPnt2d);
- if ((aPnt->x() < Precision::Confusion()) &&
- (aPnt->y() < Precision::Confusion()) &&
- (aPnt->z() < Precision::Confusion()))
- aData->setName("Origin");
-
- aMyFeature->execute();
- aRes = aMyFeature->firstResult();
- }
- if (anAttr.get() && aRes.get()) {
- std::shared_ptr<GeomAPI_Shape> aVert(new GeomAPI_Shape);
- aVert->setImpl(new TopoDS_Shape(theShape));
-
- anAttr->setValue(aRes, aVert);
- //if (theTemporary) {
- aMyFeature->execute();
-
- // // fix this edge
- // FeaturePtr aFix = theSketch->addFeature(SketchPlugin_ConstraintRigid::ID());
- // aFix->data()->refattr(SketchPlugin_Constraint::ENTITY_A())->
- // setObject(aMyFeature->lastResult());
- // // we need to flush created signal in order to fixed constraint is processed by solver
- // Events_Loop::loop()->flush(Events_Loop::eventByName(EVENT_OBJECT_CREATED));
- //}
- return aMyFeature->lastResult();
- }
- }
- }