Fix crash on malformed python script
This commit is contained in:
@@ -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
|
||||
*/
|
||||
|
||||
@@ -162,6 +162,7 @@ protected:
|
||||
void updateChildrenSource(void);
|
||||
void updateChildrenLock(void);
|
||||
int getViewIndex(const char *viewTypeCStr) const;
|
||||
int getDefProjConv(void) const;
|
||||
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user