Fix crash on malformed python script

This commit is contained in:
wandererfan
2019-05-13 09:03:04 -04:00
committed by WandererFan
parent d42c79c146
commit 75d43757c4
2 changed files with 41 additions and 6 deletions

View File

@@ -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");
@@ -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");
@@ -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();
}
@@ -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();
}
@@ -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");
}
}
@@ -1144,7 +1171,6 @@ void DrawProjGroup::spinCCW()
updateSecondaryDirs();
}
std::vector<DrawProjGroupItem*> DrawProjGroup::getViewsAsDPGI()
{
std::vector<DrawProjGroupItem*> result;
@@ -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
*/

View File

@@ -162,6 +162,7 @@ protected:
void updateChildrenSource(void);
void updateChildrenLock(void);
int getViewIndex(const char *viewTypeCStr) const;
int getDefProjConv(void) const;
};