code review: move transaction to outside from loop, fix several bugs, fix whitespaces

This commit is contained in:
wmayer 2014-08-05 00:33:51 +02:00
parent 1011dd4175
commit be3299a46d
4 changed files with 222 additions and 213 deletions

View File

@ -1633,11 +1633,11 @@ void SketchObject::getGeoVertexIndex(int VertexId, int &GeoId, PointPos &PosId)
int SketchObject::getVertexIndexGeoPos(int GeoId, PointPos PosId) const int SketchObject::getVertexIndexGeoPos(int GeoId, PointPos PosId) const
{ {
for(int i=0;i<VertexId2GeoId.size();i++) {
for(int i=0;i<VertexId2GeoId.size();i++) if(VertexId2GeoId[i]==GeoId && VertexId2PosId[i]==PosId)
if(VertexId2GeoId[i]==GeoId && VertexId2PosId[i]==PosId) return i;
return i; }
return -1; return -1;
} }

View File

@ -529,7 +529,7 @@ void CmdSketcherConstrainCoincident::activated(int iMsg)
const std::vector<std::string> &SubNames = selection[0].getSubNames(); const std::vector<std::string> &SubNames = selection[0].getSubNames();
Sketcher::SketchObject* Obj = dynamic_cast<Sketcher::SketchObject*>(selection[0].getObject()); Sketcher::SketchObject* Obj = dynamic_cast<Sketcher::SketchObject*>(selection[0].getObject());
const std::vector< Sketcher::Constraint * > &vals = Obj->Constraints.getValues(); const std::vector< Sketcher::Constraint * > &vals = Obj->Constraints.getValues();
if (SubNames.size() < 2) { if (SubNames.size() < 2) {
QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Wrong selection"), QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Wrong selection"),
QObject::tr("Select two or more vertexes from the sketch.")); QObject::tr("Select two or more vertexes from the sketch."));
@ -552,33 +552,39 @@ void CmdSketcherConstrainCoincident::activated(int iMsg)
getIdsFromName(SubNames[0], Obj, GeoId1, PosId1); getIdsFromName(SubNames[0], Obj, GeoId1, PosId1);
// undo command open // undo command open
bool constraintsAdded = false;
openCommand("add coincident constraint"); openCommand("add coincident constraint");
for (std::size_t i=1; i<SubNames.size(); i++) { for (std::size_t i=1; i<SubNames.size(); i++) {
getIdsFromName(SubNames[i], Obj, GeoId2, PosId2); getIdsFromName(SubNames[i], Obj, GeoId2, PosId2);
// check if any of the coincident constraints exist // check if any of the coincident constraints exist
bool constraintExists=false; bool constraintExists=false;
for (std::vector< Sketcher::Constraint * >::const_iterator it= vals.begin(); for (std::vector< Sketcher::Constraint * >::const_iterator it= vals.begin(); it != vals.end(); ++it) {
it != vals.end(); ++it) { if ((*it)->Type == Sketcher::Coincident &&
if ( (*it)->Type == Sketcher::Coincident && ( (*it)->First == GeoId1 && (*it)->FirstPos == PosId1 &&
( (*it)->First == GeoId1 && (*it)->FirstPos == PosId1 && (*it)->Second == GeoId2 && (*it)->SecondPos == PosId2 ) ||
(*it)->Second == GeoId2 && (*it)->SecondPos == PosId2 ) || ( (*it)->First == GeoId2 && (*it)->FirstPos == PosId2 &&
( (*it)->First == GeoId2 && (*it)->FirstPos == PosId2 && (*it)->Second == GeoId1 && (*it)->SecondPos == PosId1 ) ) {
(*it)->Second == GeoId1 && (*it)->SecondPos == PosId1 ) ) { constraintExists=true;
constraintExists=true; break;
break; }
} }
}
if (!constraintExists) {
if (!constraintExists) constraintsAdded = true;
Gui::Command::doCommand( Gui::Command::doCommand(
Doc,"App.ActiveDocument.%s.addConstraint(Sketcher.Constraint('Coincident',%d,%d,%d,%d)) ", Doc,"App.ActiveDocument.%s.addConstraint(Sketcher.Constraint('Coincident',%d,%d,%d,%d)) ",
selection[0].getFeatName(),GeoId1,PosId1,GeoId2,PosId2); selection[0].getFeatName(),GeoId1,PosId1,GeoId2,PosId2);
}
} }
// finish the transaction and update // finish or abort the transaction and update
commitCommand(); if (constraintsAdded)
commitCommand();
else
abortCommand();
updateActive(); updateActive();
// clear the selection (convenience) // clear the selection (convenience)

View File

@ -47,18 +47,19 @@ using namespace Sketcher;
bool isSketcherAcceleratorActive(Gui::Document *doc, bool actsOnSelection ) bool isSketcherAcceleratorActive(Gui::Document *doc, bool actsOnSelection )
{ {
if (doc) if (doc) {
// checks if a Sketch Viewprovider is in Edit and is in no special mode // checks if a Sketch Viewprovider is in Edit and is in no special mode
if (doc->getInEdit() && doc->getInEdit()->isDerivedFrom(SketcherGui::ViewProviderSketch::getClassTypeId())) if (doc->getInEdit() && doc->getInEdit()->isDerivedFrom(SketcherGui::ViewProviderSketch::getClassTypeId())) {
if (dynamic_cast<SketcherGui::ViewProviderSketch*>(doc->getInEdit()) if (dynamic_cast<SketcherGui::ViewProviderSketch*>(doc->getInEdit())
->getSketchMode() == ViewProviderSketch::STATUS_NONE) ->getSketchMode() == ViewProviderSketch::STATUS_NONE) {
if (!actsOnSelection) if (!actsOnSelection)
return true; return true;
else{ else if (Gui::Selection().countObjectsOfType(Sketcher::SketchObject::getClassTypeId()) > 0)
if(Gui::Selection().countObjectsOfType(Sketcher::SketchObject::getClassTypeId()) > 0) return true;
return true; }
} }
}
return false; return false;
} }
@ -87,62 +88,61 @@ void CmdSketcherCloseShape::activated(int iMsg)
// only one sketch with its subelements are allowed to be selected // only one sketch with its subelements are allowed to be selected
if (selection.size() != 1) { if (selection.size() != 1) {
QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Wrong selection"), QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Wrong selection"),
QObject::tr("Select an edge from the sketch.")); QObject::tr("Select at least two edges from the sketch."));
return; return;
} }
// get the needed lists and objects // get the needed lists and objects
const std::vector<std::string> &SubNames = selection[0].getSubNames(); const std::vector<std::string> &SubNames = selection[0].getSubNames();
if (SubNames.size() < 2) {
QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Wrong selection"),
QObject::tr("Select at least two edges from the sketch."));
return;
}
Sketcher::SketchObject* Obj = dynamic_cast<Sketcher::SketchObject*>(selection[0].getObject()); Sketcher::SketchObject* Obj = dynamic_cast<Sketcher::SketchObject*>(selection[0].getObject());
int GeoIdFirst=-1; int GeoIdFirst=-1;
int GeoIdLast=-1; int GeoIdLast=-1;
// undo command open
openCommand("add coincident constraint");
// go through the selected subelements // go through the selected subelements
for (unsigned int i=0; i<(SubNames.size()-1); i++ ) { for (unsigned int i=0; i<(SubNames.size()-1); i++ ) {
// only handle edges // only handle edges
if (SubNames[i].size() > 4 && SubNames[i].substr(0,4) == "Edge" && if (SubNames[i].size() > 4 && SubNames[i].substr(0,4) == "Edge" &&
SubNames[i+1].size() > 4 && SubNames[i+1].substr(0,4) == "Edge" ) { SubNames[i+1].size() > 4 && SubNames[i+1].substr(0,4) == "Edge" ) {
int GeoId1 = std::atoi(SubNames[i].substr(4,4000).c_str()) - 1; int GeoId1 = std::atoi(SubNames[i].substr(4,4000).c_str()) - 1;
int GeoId2 = std::atoi(SubNames[i+1].substr(4,4000).c_str()) - 1; int GeoId2 = std::atoi(SubNames[i+1].substr(4,4000).c_str()) - 1;
if(GeoIdFirst==-1)
GeoIdFirst=GeoId1;
GeoIdLast=GeoId2;
const Part::Geometry *geo1 = Obj->getGeometry(GeoId1); if(GeoIdFirst==-1)
const Part::Geometry *geo2 = Obj->getGeometry(GeoId2); GeoIdFirst=GeoId1;
if ( (geo1->getTypeId() != Part::GeomLineSegment::getClassTypeId() &&
geo1->getTypeId() != Part::GeomArcOfCircle::getClassTypeId() ) ||
(geo2->getTypeId() != Part::GeomLineSegment::getClassTypeId() &&
geo2->getTypeId() != Part::GeomArcOfCircle::getClassTypeId()) ) {
QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Impossible constraint"),
QObject::tr("One selected edge is not connectable"));
return;
}
// undo command open
openCommand("add coincident constraint");
Gui::Command::doCommand(
Doc,"App.ActiveDocument.%s.addConstraint(Sketcher.Constraint('Coincident',%d,%d,%d,%d)) ",
selection[0].getFeatName(),GeoId1,Sketcher::end,GeoId2,Sketcher::start);
// finish the transaction and update GeoIdLast=GeoId2;
commitCommand();
const Part::Geometry *geo1 = Obj->getGeometry(GeoId1);
const Part::Geometry *geo2 = Obj->getGeometry(GeoId2);
if ((geo1->getTypeId() != Part::GeomLineSegment::getClassTypeId() &&
geo1->getTypeId() != Part::GeomArcOfCircle::getClassTypeId() ) ||
(geo2->getTypeId() != Part::GeomLineSegment::getClassTypeId() &&
geo2->getTypeId() != Part::GeomArcOfCircle::getClassTypeId()) ) {
QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Impossible constraint"),
QObject::tr("One selected edge is not connectable"));
abortCommand();
return;
}
Gui::Command::doCommand(
Doc,"App.ActiveDocument.%s.addConstraint(Sketcher.Constraint('Coincident',%d,%d,%d,%d)) ",
selection[0].getFeatName(),GeoId1,Sketcher::end,GeoId2,Sketcher::start);
} }
} }
// Close Last Edge with First Edge // Close Last Edge with First Edge
// undo command open
openCommand("add coincident constraint");
Gui::Command::doCommand( Gui::Command::doCommand(
Doc,"App.ActiveDocument.%s.addConstraint(Sketcher.Constraint('Coincident',%d,%d,%d,%d)) ", Doc,"App.ActiveDocument.%s.addConstraint(Sketcher.Constraint('Coincident',%d,%d,%d,%d)) ",
selection[0].getFeatName(),GeoIdLast,Sketcher::end,GeoIdFirst,Sketcher::start); selection[0].getFeatName(),GeoIdLast,Sketcher::end,GeoIdFirst,Sketcher::start);
// finish the transaction and update // finish the transaction and update
commitCommand(); commitCommand();
@ -183,47 +183,51 @@ void CmdSketcherConnect::activated(int iMsg)
// only one sketch with its subelements are allowed to be selected // only one sketch with its subelements are allowed to be selected
if (selection.size() != 1) { if (selection.size() != 1) {
QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Wrong selection"), QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Wrong selection"),
QObject::tr("Select an edge from the sketch.")); QObject::tr("Select at least two edges from the sketch."));
return; return;
} }
// get the needed lists and objects // get the needed lists and objects
const std::vector<std::string> &SubNames = selection[0].getSubNames(); const std::vector<std::string> &SubNames = selection[0].getSubNames();
if (SubNames.size() < 2) {
QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Wrong selection"),
QObject::tr("Select at least two edges from the sketch."));
return;
}
Sketcher::SketchObject* Obj = dynamic_cast<Sketcher::SketchObject*>(selection[0].getObject()); Sketcher::SketchObject* Obj = dynamic_cast<Sketcher::SketchObject*>(selection[0].getObject());
// undo command open
openCommand("add coincident constraint");
// go through the selected subelements // go through the selected subelements
for (unsigned int i=0; i<(SubNames.size()-1); i++ ) { for (unsigned int i=0; i<(SubNames.size()-1); i++ ) {
// only handle edges // only handle edges
if (SubNames[i].size() > 4 && SubNames[i].substr(0,4) == "Edge" && if (SubNames[i].size() > 4 && SubNames[i].substr(0,4) == "Edge" &&
SubNames[i+1].size() > 4 && SubNames[i+1].substr(0,4) == "Edge" ) { SubNames[i+1].size() > 4 && SubNames[i+1].substr(0,4) == "Edge" ) {
int GeoId1 = std::atoi(SubNames[i].substr(4,4000).c_str()) - 1; int GeoId1 = std::atoi(SubNames[i].substr(4,4000).c_str()) - 1;
int GeoId2 = std::atoi(SubNames[i+1].substr(4,4000).c_str()) - 1; int GeoId2 = std::atoi(SubNames[i+1].substr(4,4000).c_str()) - 1;
const Part::Geometry *geo1 = Obj->getGeometry(GeoId1); const Part::Geometry *geo1 = Obj->getGeometry(GeoId1);
const Part::Geometry *geo2 = Obj->getGeometry(GeoId2); const Part::Geometry *geo2 = Obj->getGeometry(GeoId2);
if ( (geo1->getTypeId() != Part::GeomLineSegment::getClassTypeId() && if ((geo1->getTypeId() != Part::GeomLineSegment::getClassTypeId() &&
geo1->getTypeId() != Part::GeomArcOfCircle::getClassTypeId() ) || geo1->getTypeId() != Part::GeomArcOfCircle::getClassTypeId()) ||
(geo2->getTypeId() != Part::GeomLineSegment::getClassTypeId() && (geo2->getTypeId() != Part::GeomLineSegment::getClassTypeId() &&
geo2->getTypeId() != Part::GeomArcOfCircle::getClassTypeId()) ) { geo2->getTypeId() != Part::GeomArcOfCircle::getClassTypeId())) {
QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Impossible constraint"), QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Impossible constraint"),
QObject::tr("One selected edge is not connectable")); QObject::tr("One selected edge is not connectable"));
return; abortCommand();
} return;
}
// undo command open
openCommand("add coincident constraint");
Gui::Command::doCommand(
Doc,"App.ActiveDocument.%s.addConstraint(Sketcher.Constraint('Coincident',%d,%d,%d,%d)) ",
selection[0].getFeatName(),GeoId1,Sketcher::end,GeoId2,Sketcher::start);
// finish the transaction and update
commitCommand();
Gui::Command::doCommand(
Doc,"App.ActiveDocument.%s.addConstraint(Sketcher.Constraint('Coincident',%d,%d,%d,%d)) ",
selection[0].getFeatName(),GeoId1,Sketcher::end,GeoId2,Sketcher::start);
} }
} }
// finish the transaction and update
commitCommand();
updateActive(); updateActive();
// clear the selection (convenience) // clear the selection (convenience)
@ -282,18 +286,17 @@ void CmdSketcherSelectConstraints::activated(int iMsg)
int GeoId = std::atoi(it->substr(4,4000).c_str()) - 1; int GeoId = std::atoi(it->substr(4,4000).c_str()) - 1;
// push all the constraints // push all the constraints
int i=1; int i=1;
for (std::vector< Sketcher::Constraint * >::const_iterator it= vals.begin(); for (std::vector< Sketcher::Constraint * >::const_iterator it= vals.begin();
it != vals.end(); ++it,++i) { it != vals.end(); ++it,++i) {
if ( (*it)->First == GeoId || (*it)->Second == GeoId || (*it)->Third == GeoId){ if ( (*it)->First == GeoId || (*it)->Second == GeoId || (*it)->Third == GeoId){
ss.str(std::string()); ss.str(std::string());
ss << "Constraint" << i; ss << "Constraint" << i;
Gui::Selection().addSelection(doc_name.c_str(), obj_name.c_str(), ss.str().c_str()); Gui::Selection().addSelection(doc_name.c_str(), obj_name.c_str(), ss.str().c_str());
} }
} }
} }
} }
} }
bool CmdSketcherSelectConstraints::isActive(void) bool CmdSketcherSelectConstraints::isActive(void)

View File

@ -1,141 +1,141 @@
<RCC> <RCC>
<qresource> <qresource>
<file>icons/Constraint_TangentToStart.svg</file> <file>icons/small/Constraint_Concentric_sm.xpm</file>
<file>icons/Sketcher_CreateFillet.svg</file> <file>icons/small/Constraint_EqualLength_sm.xpm</file>
<file>icons/Sketcher_CreateLine.svg</file> <file>icons/small/Constraint_ExternalAngle_sm.xpm</file>
<file>icons/Sketcher_SelectConstraints.svg</file> <file>icons/small/Constraint_Horizontal_sm.xpm</file>
<file>icons/Sketcher_CreateArc.svg</file> <file>icons/small/Constraint_InternalAngle_sm.xpm</file>
<file>icons/Sketcher_CreateCircle.svg</file> <file>icons/small/Constraint_Length_sm.xpm</file>
<file>icons/Sketcher_CreateSlot.svg</file> <file>icons/small/Constraint_Lock_sm.xpm</file>
<file>icons/Sketcher_CloseShape.svg</file> <file>icons/small/Constraint_Parallel_sm.xpm</file>
<file>icons/Constraint_PointOnPoint.svg</file> <file>icons/small/Constraint_Perpendicular_sm.xpm</file>
<file>icons/Sketcher_Sketch.svg</file>
<file>icons/Sketcher_Element_Circle_Edge.svg</file>
<file>icons/Sketcher_Element_Line_EndPoint.svg</file>
<file>icons/Sketcher_DraftLine.svg</file>
<file>icons/Sketcher_External.svg</file>
<file>icons/Sketcher_Element_Line_StartingPoint.svg</file>
<file>icons/Sketcher_ConstrainDistance.svg</file>
<file>icons/Sketcher_LeaveSketch.svg</file>
<file>icons/Sketcher_AlterFillet.svg</file>
<file>icons/Sketcher_CreateHexagon.svg</file>
<file>icons/Sketcher_Create3PointArc.svg</file>
<file>icons/Sketcher_SelectHorizontalAxis.svg</file>
<file>icons/Sketcher_ConstrainParallel.svg</file>
<file>icons/Sketcher_ConnectLines.svg</file>
<file>icons/Sketcher_SelectVerticalAxis.svg</file>
<file>icons/Sketcher_Element_Arc_MidPoint.svg</file>
<file>icons/Constraint_Parallel.svg</file>
<file>icons/Constraint_Concentric.svg</file>
<file>icons/Sketcher_ProfilesHexagon1.svg</file>
<file>icons/Sketcher_ConstrainHorizontal.svg</file>
<file>icons/Constraint_InternalAngle.svg</file>
<file>icons/Constraint_PointOnStart.svg</file>
<file>icons/Sketcher_ConstrainCoincident.svg</file>
<file>icons/Constraint_PointOnEnd.svg</file>
<file>icons/Sketcher_CreateText.svg</file>
<file>icons/Sketcher_Element_Circle_MidPoint.svg</file>
<file>icons/Sketcher_MapSketch.svg</file>
<file>icons/Constraint_PointOnObject.svg</file>
<file>icons/Constraint_PointOnMidPoint.svg</file>
<file>icons/Sketcher_NewSketch.svg</file>
<file>icons/Sketcher_ConstrainLock.svg</file>
<file>icons/Constraint_Perpendicular.svg</file>
<file>icons/Constraint_Symmetric.svg</file>
<file>icons/Constraint_PointToObject.svg</file>
<file>icons/Sketcher_CreateHeptagon.svg</file>
<file>icons/Sketcher_Trimming.svg</file>
<file>icons/Sketcher_Element_Arc_Edge.svg</file>
<file>icons/Sketcher_CreateTriangle.svg</file>
<file>icons/Sketcher_Element_Arc_StartingPoint.svg</file>
<file>icons/Sketcher_Element_Line_Edge.svg</file>
<file>icons/Constraint_EqualLength.svg</file>
<file>icons/Sketcher_CreateRectangle.svg</file>
<file>icons/Constraint_ExternalAngle.svg</file>
<file>icons/Constraint_Length.svg</file>
<file>icons/Sketcher_EditSketch.svg</file>
<file>icons/Constraint_Vertical.svg</file>
<file>icons/Constraint_TangentToEnd.svg</file>
<file>icons/Constraint_VerticalDistance.svg</file>
<file>icons/Sketcher_CreateOctagon.svg</file>
<file>icons/Sketcher_CreatePoint.svg</file>
<file>icons/Constraint_Horizontal.svg</file>
<file>icons/Sketcher_CreatePentagon.svg</file>
<file>icons/Sketcher_ConstrainVertical.svg</file>
<file>icons/Sketcher_Element_Arc_EndPoint.svg</file>
<file>icons/Sketcher_AlterConstruction.svg</file>
<file>icons/Constraint_HorizontalDistance.svg</file>
<file>icons/Sketcher_CreateSquare.svg</file>
<file>icons/Constraint_Radius.svg</file>
<file>icons/Sketcher_ViewSketch.svg</file>
<file>icons/Sketcher_Element_Point_StartingPoint.svg</file>
<file>icons/Sketcher_Create3PointCircle.svg</file>
<file>icons/Sketcher_SelectOrigin.svg</file>
<file>icons/Sketcher_Element_SelectionTypeInvalid.svg</file>
<file>icons/Constraint_Tangent.svg</file>
<file>icons/Sketcher_CreatePolyline.svg</file>
<file>icons/small/Constraint_Radius_sm.xpm</file>
<file>icons/small/Constraint_HorizontalDistance_sm.xpm</file>
<file>icons/small/Constraint_PointOnEnd_sm.xpm</file> <file>icons/small/Constraint_PointOnEnd_sm.xpm</file>
<file>icons/small/Constraint_PointOnMidPoint_sm.xpm</file>
<file>icons/small/Constraint_PointOnObject_sm.xpm</file>
<file>icons/small/Constraint_PointOnPoint_sm.xpm</file>
<file>icons/small/Constraint_PointOnStart_sm.xpm</file>
<file>icons/small/Constraint_PointToObject_sm.xpm</file>
<file>icons/small/Constraint_Radius_sm.xpm</file>
<file>icons/small/Constraint_Tangent_sm.xpm</file>
<file>icons/small/Constraint_TangentToEnd_sm.xpm</file>
<file>icons/small/Constraint_TangentToStart_sm.xpm</file>
<file>icons/small/Constraint_Vertical_sm.xpm</file>
<file>icons/small/Constraint_HorizontalDistance_sm.xpm</file>
<file>icons/small/Constraint_VerticalDistance_sm.xpm</file>
<file>icons/small/Constraint_Symmetric_sm.xpm</file>
<file>icons/small/Sketcher_Element_Line_EndPoint_sm.xpm</file> <file>icons/small/Sketcher_Element_Line_EndPoint_sm.xpm</file>
<file>icons/small/Sketcher_ConnectLines.xpm</file> <file>icons/small/Sketcher_ConnectLines.xpm</file>
<file>icons/small/Constraint_PointToObject_sm.xpm</file>
<file>icons/small/Sketcher_Element_Arc_Edge_sm.xpm</file> <file>icons/small/Sketcher_Element_Arc_Edge_sm.xpm</file>
<file>icons/small/Sketcher_SelectHorizontalAxis.xpm</file> <file>icons/small/Sketcher_SelectHorizontalAxis.xpm</file>
<file>icons/small/Sketcher_Element_Line_Edge_sm.xpm</file> <file>icons/small/Sketcher_Element_Line_Edge_sm.xpm</file>
<file>icons/small/Constraint_Parallel_sm.xpm</file>
<file>icons/small/Constraint_InternalAngle_sm.xpm</file>
<file>icons/small/Sketcher_Element_Arc_EndPoint_sm.xpm</file> <file>icons/small/Sketcher_Element_Arc_EndPoint_sm.xpm</file>
<file>icons/small/Constraint_PointOnPoint_sm.xpm</file>
<file>icons/small/Sketcher_SelectVerticalAxis.xpm</file> <file>icons/small/Sketcher_SelectVerticalAxis.xpm</file>
<file>icons/small/Constraint_VerticalDistance_sm.xpm</file>
<file>icons/small/Constraint_Length_sm.xpm</file>
<file>icons/small/Constraint_PointOnStart_sm.xpm</file>
<file>icons/small/Constraint_PointOnObject_sm.xpm</file>
<file>icons/small/Sketcher_Element_SelectionTypeInvalid_sm.xpm</file> <file>icons/small/Sketcher_Element_SelectionTypeInvalid_sm.xpm</file>
<file>icons/small/Constraint_Concentric_sm.xpm</file>
<file>icons/small/Constraint_Perpendicular_sm.xpm</file>
<file>icons/small/Constraint_PointOnMidPoint_sm.xpm</file>
<file>icons/small/Constraint_Lock_sm.xpm</file>
<file>icons/small/Constraint_ExternalAngle_sm.xpm</file>
<file>icons/small/Sketcher_CloseShape.xpm</file> <file>icons/small/Sketcher_CloseShape.xpm</file>
<file>icons/small/Sketcher_Element_Point_StartingPoint_sm.xpm</file> <file>icons/small/Sketcher_Element_Point_StartingPoint_sm.xpm</file>
<file>icons/small/Constraint_Horizontal_sm.xpm</file>
<file>icons/small/Sketcher_Element_Circle_MidPoint_sm.xpm</file> <file>icons/small/Sketcher_Element_Circle_MidPoint_sm.xpm</file>
<file>icons/small/Constraint_TangentToStart_sm.xpm</file>
<file>icons/small/Sketcher_Element_Arc_StartingPoint_sm.xpm</file> <file>icons/small/Sketcher_Element_Arc_StartingPoint_sm.xpm</file>
<file>icons/small/Constraint_EqualLength_sm.xpm</file>
<file>icons/small/Sketcher_SelectOrigin.xpm</file> <file>icons/small/Sketcher_SelectOrigin.xpm</file>
<file>icons/small/Sketcher_Element_Circle_Edge_sm.xpm</file> <file>icons/small/Sketcher_Element_Circle_Edge_sm.xpm</file>
<file>icons/small/Constraint_TangentToEnd_sm.xpm</file>
<file>icons/small/Constraint_Symmetric_sm.xpm</file>
<file>icons/small/Sketcher_Element_Arc_MidPoint_sm.xpm</file> <file>icons/small/Sketcher_Element_Arc_MidPoint_sm.xpm</file>
<file>icons/small/Sketcher_SelectConstraints.xpm</file> <file>icons/small/Sketcher_SelectConstraints.xpm</file>
<file>icons/small/Sketcher_Element_Line_StartingPoint_sm.xpm</file> <file>icons/small/Sketcher_Element_Line_StartingPoint_sm.xpm</file>
<file>icons/small/Constraint_Vertical_sm.xpm</file> <file>icons/Constraint_Concentric.svg</file>
<file>icons/small/Constraint_Tangent_sm.xpm</file> <file>icons/Constraint_EqualLength.svg</file>
<file>translations/Sketcher_es-ES.qm</file> <file>icons/Constraint_ExternalAngle.svg</file>
<file>translations/Sketcher_nl.qm</file> <file>icons/Constraint_Horizontal.svg</file>
<file>translations/Sketcher_uk.qm</file> <file>icons/Constraint_InternalAngle.svg</file>
<file>translations/Sketcher_sv-SE.qm</file> <file>icons/Constraint_Length.svg</file>
<file>icons/Constraint_Parallel.svg</file>
<file>icons/Constraint_Perpendicular.svg</file>
<file>icons/Constraint_PointOnEnd.svg</file>
<file>icons/Constraint_PointOnMidPoint.svg</file>
<file>icons/Constraint_PointOnObject.svg</file>
<file>icons/Constraint_PointOnPoint.svg</file>
<file>icons/Constraint_PointOnStart.svg</file>
<file>icons/Constraint_PointToObject.svg</file>
<file>icons/Constraint_Radius.svg</file>
<file>icons/Constraint_Tangent.svg</file>
<file>icons/Constraint_TangentToEnd.svg</file>
<file>icons/Constraint_TangentToStart.svg</file>
<file>icons/Constraint_Vertical.svg</file>
<file>icons/Constraint_HorizontalDistance.svg</file>
<file>icons/Constraint_VerticalDistance.svg</file>
<file>icons/Constraint_Symmetric.svg</file>
<file>icons/Sketcher_ConstrainCoincident.svg</file>
<file>icons/Sketcher_ConstrainDistance.svg</file>
<file>icons/Sketcher_ConstrainHorizontal.svg</file>
<file>icons/Sketcher_ConstrainLock.svg</file>
<file>icons/Sketcher_ConstrainParallel.svg</file>
<file>icons/Sketcher_ConstrainVertical.svg</file>
<file>icons/Sketcher_CreateArc.svg</file>
<file>icons/Sketcher_Create3PointArc.svg</file>
<file>icons/Sketcher_CreateCircle.svg</file>
<file>icons/Sketcher_Create3PointCircle.svg</file>
<file>icons/Sketcher_CreateLine.svg</file>
<file>icons/Sketcher_CreatePoint.svg</file>
<file>icons/Sketcher_CreatePolyline.svg</file>
<file>icons/Sketcher_CreateRectangle.svg</file>
<file>icons/Sketcher_CreateSlot.svg</file>
<file>icons/Sketcher_CreateFillet.svg</file>
<file>icons/Sketcher_CreateTriangle.svg</file>
<file>icons/Sketcher_CreateSquare.svg</file>
<file>icons/Sketcher_CreatePentagon.svg</file>
<file>icons/Sketcher_CreateHexagon.svg</file>
<file>icons/Sketcher_CreateHeptagon.svg</file>
<file>icons/Sketcher_CreateOctagon.svg</file>
<file>icons/Sketcher_CreateText.svg</file>
<file>icons/Sketcher_DraftLine.svg</file>
<file>icons/Sketcher_Trimming.svg</file>
<file>icons/Sketcher_External.svg</file>
<file>icons/Sketcher_EditSketch.svg</file>
<file>icons/Sketcher_LeaveSketch.svg</file>
<file>icons/Sketcher_MapSketch.svg</file>
<file>icons/Sketcher_NewSketch.svg</file>
<file>icons/Sketcher_Sketch.svg</file>
<file>icons/Sketcher_ViewSketch.svg</file>
<file>icons/Sketcher_AlterConstruction.svg</file>
<file>icons/Sketcher_ProfilesHexagon1.svg</file>
<file>icons/Sketcher_AlterFillet.svg</file>
<file>icons/Sketcher_CloseShape.svg</file>
<file>icons/Sketcher_ConnectLines.svg</file>
<file>icons/Sketcher_Element_Circle_Edge.svg</file>
<file>icons/Sketcher_Element_Line_EndPoint.svg</file>
<file>icons/Sketcher_Element_Line_StartingPoint.svg</file>
<file>icons/Sketcher_Element_Arc_MidPoint.svg</file>
<file>icons/Sketcher_Element_Circle_MidPoint.svg</file>
<file>icons/Sketcher_Element_Arc_Edge.svg</file>
<file>icons/Sketcher_Element_Arc_StartingPoint.svg</file>
<file>icons/Sketcher_Element_Line_Edge.svg</file>
<file>icons/Sketcher_Element_Arc_EndPoint.svg</file>
<file>icons/Sketcher_Element_Point_StartingPoint.svg</file>
<file>icons/Sketcher_SelectOrigin.svg</file>
<file>icons/Sketcher_Element_SelectionTypeInvalid.svg</file>
<file>icons/Sketcher_SelectHorizontalAxis.svg</file>
<file>icons/Sketcher_SelectVerticalAxis.svg</file>
<file>icons/Sketcher_SelectConstraints.svg</file>
<file>translations/Sketcher_af.qm</file>
<file>translations/Sketcher_de.qm</file> <file>translations/Sketcher_de.qm</file>
<file>translations/Sketcher_it.qm</file>
<file>translations/Sketcher_pl.qm</file>
<file>translations/Sketcher_fi.qm</file> <file>translations/Sketcher_fi.qm</file>
<file>translations/Sketcher_tr.qm</file>
<file>translations/Sketcher_ru.qm</file>
<file>translations/Sketcher_fr.qm</file> <file>translations/Sketcher_fr.qm</file>
<file>translations/Sketcher_hr.qm</file> <file>translations/Sketcher_hr.qm</file>
<file>translations/Sketcher_af.qm</file> <file>translations/Sketcher_it.qm</file>
<file>translations/Sketcher_nl.qm</file>
<file>translations/Sketcher_no.qm</file> <file>translations/Sketcher_no.qm</file>
<file>translations/Sketcher_pl.qm</file>
<file>translations/Sketcher_ru.qm</file>
<file>translations/Sketcher_uk.qm</file>
<file>translations/Sketcher_tr.qm</file>
<file>translations/Sketcher_sv-SE.qm</file>
<file>translations/Sketcher_zh-TW.qm</file> <file>translations/Sketcher_zh-TW.qm</file>
<file>translations/Sketcher_zh-CN.qm</file>
<file>translations/Sketcher_ro.qm</file>
<file>translations/Sketcher_ja.qm</file>
<file>translations/Sketcher_pt-BR.qm</file> <file>translations/Sketcher_pt-BR.qm</file>
<file>translations/Sketcher_sk.qm</file>
<file>translations/Sketcher_hu.qm</file>
<file>translations/Sketcher_cs.qm</file> <file>translations/Sketcher_cs.qm</file>
<file>translations/Sketcher_sk.qm</file>
<file>translations/Sketcher_es-ES.qm</file>
<file>translations/Sketcher_zh-CN.qm</file>
<file>translations/Sketcher_ja.qm</file>
<file>translations/Sketcher_ro.qm</file>
<file>translations/Sketcher_hu.qm</file>
<file>translations/Sketcher_pt-PT.qm</file> <file>translations/Sketcher_pt-PT.qm</file>
</qresource> </qresource>
</RCC> </RCC>