Skip to content

Commit

Permalink
Fix crash on malformed python script
Browse files Browse the repository at this point in the history
  • Loading branch information
WandererFan committed May 13, 2019
1 parent d42c79c commit 75d4375
Show file tree
Hide file tree
Showing 2 changed files with 41 additions and 6 deletions.
46 changes: 40 additions & 6 deletions src/Mod/TechDraw/App/DrawProjGroup.cpp
Expand Up @@ -71,8 +71,10 @@ DrawProjGroup::DrawProjGroup(void)
Source.setScope(App::LinkScope::Global);
ADD_PROPERTY_TYPE(Anchor, (0), group, App::Prop_None, "The root view to align projections with");
Anchor.setScope(App::LinkScope::Global);


ProjectionType.setEnums(ProjectionTypeEnums);
ADD_PROPERTY(ProjectionType, ((long)0));
ADD_PROPERTY(ProjectionType, ((long)getDefProjConv()));

ADD_PROPERTY_TYPE(AutoDistribute ,(autoDist),agroup,App::Prop_None,"Distribute Views Automatically or Manually");
ADD_PROPERTY_TYPE(spacingX, (15), agroup, App::Prop_None, "Horizontal spacing between views");
Expand Down Expand Up @@ -390,6 +392,10 @@ App::DocumentObject * DrawProjGroup::addProjection(const char *viewProjType)
DrawProjGroupItem *view( nullptr );
std::pair<Base::Vector3d,Base::Vector3d> vecs;

DrawPage* dp = findParentPage();
if (dp == nullptr) {
Base::Console().Error("DPG:addProjection - %s - DPG is not on a page!\n",getNameInDocument());
}

if ( checkViewProjType(viewProjType) && !hasProjection(viewProjType) ) {
std::string FeatName = getDocument()->getUniqueObjectName("ProjItem");
Expand Down Expand Up @@ -690,8 +696,16 @@ int DrawProjGroup::getViewIndex(const char *viewTypeCStr) const
int result = 4; //default to front view's position
// Determine layout - should be either "First Angle" or "Third Angle"
const char* projType;
DrawPage* dp = findParentPage();
if (ProjectionType.isValue("Default")) {
projType = findParentPage()->ProjectionType.getValueAsString();
if (dp != nullptr) {
projType = dp->ProjectionType.getValueAsString();
} else {
Base::Console().Warning("DPG: %s - can not find parent page. Using default Projection Type. (1)\n",
getNameInDocument());
int projConv = getDefProjConv();
projType = ProjectionTypeEnums[projConv + 1];
}
} else {
projType = ProjectionType.getValueAsString();
}
Expand Down Expand Up @@ -745,7 +759,17 @@ void DrawProjGroup::arrangeViewPointers(DrawProjGroupItem *viewPtrs[10]) const
// Determine layout - should be either "First Angle" or "Third Angle"
const char* projType;
if (ProjectionType.isValue("Default")) {
projType = findParentPage()->ProjectionType.getValueAsString();
DrawPage* dp = findParentPage();
if (dp != nullptr) {
projType = dp->ProjectionType.getValueAsString();
} else {
Base::Console().Error("DPG:arrangeViewPointers - %s - DPG is not on a page!\n",
getNameInDocument());
Base::Console().Warning("DPG:arrangeViewPointers - using system default Projection Type\n",
getNameInDocument());
int projConv = getDefProjConv();
projType = ProjectionTypeEnums[projConv + 1];
}
} else {
projType = ProjectionType.getValueAsString();
}
Expand Down Expand Up @@ -793,12 +817,15 @@ void DrawProjGroup::arrangeViewPointers(DrawProjGroupItem *viewPtrs[10]) const
} else if (strcmp(viewTypeCStr, "FrontBottomRight") == 0) {
viewPtrs[thirdAngle ? 9 : 0] = oView;
} else {
throw Base::TypeError("Unknown view type in DrawProjGroup::arrangeViewPointers()");
Base::Console().Warning("DPG: %s - unknown view type: %s. \n",
getNameInDocument(),viewTypeCStr);
throw Base::TypeError("Unknown view type in DrawProjGroup::arrangeViewPointers.");
}
}
}
} else {
throw Base::ValueError("Unknown view type in DrawProjGroup::arrangeViewPointers()");
Base::Console().Warning("DPG: %s - unknown Projection convention: %s\n",getNameInDocument(),projType);
throw Base::ValueError("Unknown Projection convention in DrawProjGroup::arrangeViewPointers");
}
}

Expand Down Expand Up @@ -1144,7 +1171,6 @@ void DrawProjGroup::spinCCW()
updateSecondaryDirs();
}


std::vector<DrawProjGroupItem*> DrawProjGroup::getViewsAsDPGI()
{
std::vector<DrawProjGroupItem*> result;
Expand All @@ -1156,6 +1182,14 @@ std::vector<DrawProjGroupItem*> DrawProjGroup::getViewsAsDPGI()
return result;
}

int DrawProjGroup::getDefProjConv(void) const
{
Base::Reference<ParameterGrp> hGrp = App::GetApplication().GetUserParameter().GetGroup("BaseApp")->
GetGroup("Preferences")->GetGroup("Mod/TechDraw/General");
int defProjConv = hGrp->GetInt("ProjectionAngle",0);
return defProjConv;
}

/*!
*dumps the current iso DPGI's
*/
Expand Down
1 change: 1 addition & 0 deletions src/Mod/TechDraw/App/DrawProjGroup.h
Expand Up @@ -162,6 +162,7 @@ class TechDrawExport DrawProjGroup : public TechDraw::DrawViewCollection
void updateChildrenSource(void);
void updateChildrenLock(void);
int getViewIndex(const char *viewTypeCStr) const;
int getDefProjConv(void) const;

};

Expand Down

0 comments on commit 75d4375

Please sign in to comment.