-// Copyright (C) 2014-2019 CEA/DEN, EDF R&D
+// Copyright (C) 2014-2022 CEA/DEN, EDF R&D
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
data()->addAttribute(TANGENT_POINT_ID(), ModelAPI_AttributeRefAttr::typeId());
data()->addAttribute(END_POINT_3_ID(), GeomDataAPI_Point2D::typeId());
+ data()->addAttribute(TRANSVERSAL_POINT_ID(), ModelAPI_AttributeRefAttr::typeId());
+ data()->addAttribute(END_POINT_4_ID(), GeomDataAPI_Point2D::typeId());
+
data()->addAttribute(REVERSED_ID(), ModelAPI_AttributeBoolean::typeId());
data()->addAttribute(RADIUS_ID(), ModelAPI_AttributeDouble::typeId());
SketchPlugin_Tools::resetAttribute(this, PASSED_POINT_REF_ID());
SketchPlugin_Tools::resetAttribute(this, TANGENT_POINT_ID());
SketchPlugin_Tools::resetAttribute(this, END_POINT_3_ID());
+ SketchPlugin_Tools::resetAttribute(this, TRANSVERSAL_POINT_ID());
+ SketchPlugin_Tools::resetAttribute(this, END_POINT_4_ID());
SketchPlugin_Tools::resetAttribute(this, REVERSED_ID());
SketchPlugin_Tools::resetAttribute(this, RADIUS_ID());
SketchPlugin_Tools::resetAttribute(this, ANGLE_ID());
true);
} else {
// coincident with connection point
+ const std::string& aPointAttr = anArcType == ARC_TYPE_BY_TANGENT_EDGE() ?
+ TANGENT_POINT_ID() : TRANSVERSAL_POINT_ID();
SketchPlugin_Tools::createCoincidenceOrTangency(this,
- TANGENT_POINT_ID(),
+ aPointAttr,
anArcFeature->attribute(SketchPlugin_Arc::START_ID()),
ObjectPtr(),
false);
// setting attributes of the start point constraint
AttributeRefAttrPtr aRefAttrA =
aStartPointConstraint->refattr(SketchPlugin_Constraint::ENTITY_A());
- AttributeRefAttrPtr aTgPntRefAttr = refattr(TANGENT_POINT_ID());
+ AttributeRefAttrPtr aTgPntRefAttr = refattr(aPointAttr);
FeaturePtr aTgFeature = ModelAPI_Feature::feature(aTgPntRefAttr->attr()->owner());
aRefAttrA->setObject(aTgFeature->lastResult());
AttributeRefAttrPtr aRefAttrB =
aFilledAttributeName = ARC_TYPE();
if(anArcType == ARC_TYPE_BY_TANGENT_EDGE()) {
aFilledAttributeName = TANGENT_POINT_ID();
- AttributeRefAttrPtr aRefAttr = std::dynamic_pointer_cast<ModelAPI_AttributeRefAttr>(
- attribute(aFilledAttributeName));
- FeaturePtr aCreatedFeature = aReentrantMessage->createdFeature();
+ AttributeRefAttrPtr aRefAttr = refattr(aFilledAttributeName);
aRefAttr->setAttr(aCreatedFeature->attribute(SketchPlugin_Arc::END_ID()));
}
+ else if (anArcType == ARC_TYPE_BY_TRANSVERSAL_LINE()) {
+ AttributeRefAttrPtr aRefAttr = refattr(TRANSVERSAL_POINT_ID());
+ AttributePtr anAttribute = aReentrantMessage->selectedAttribute();
+ if (anAttribute) {
+ aRefAttr->setAttr(anAttribute);
+ aFilledAttributeName = TRANSVERSAL_POINT_ID();
+ }
+ }
else {
ObjectPtr anObject = aReentrantMessage->selectedObject();
AttributePtr anAttribute = aReentrantMessage->selectedAttribute();
if (aRefAttr.get()) {
if (anAttribute.get()) {
if (!anAttribute->owner().get() || !anAttribute->owner()->data()->isValid()) {
- FeaturePtr aCreatedFeature = aReentrantMessage->createdFeature();
if (aCreatedFeature.get()) {
std::string anID = anAttribute->id();
std::string anArcID;
void SketchPlugin_MacroArc::fillByEdge(bool theTransversal)
{
- AttributeRefAttrPtr aTangentAttr = refattr(TANGENT_POINT_ID());
+ const std::string& aStartPoint = theTransversal ? TRANSVERSAL_POINT_ID() : TANGENT_POINT_ID();
+ const std::string& aEndPoint = theTransversal ? END_POINT_4_ID() : END_POINT_3_ID();
+
+ AttributeRefAttrPtr aTangentAttr = refattr(aStartPoint);
if (!aTangentAttr->isInitialized())
return;
return;
AttributePoint2DPtr anEndPointAttr =
- std::dynamic_pointer_cast<GeomDataAPI_Point2D>(attribute(END_POINT_3_ID()));
+ std::dynamic_pointer_cast<GeomDataAPI_Point2D>(attribute(aEndPoint));
if (!anEndPointAttr->isInitialized())
return;