Dimension fixes
Prevent _M_range_check on wrong selection Allow unlinking of linked Dimension Allow Horiz/Vert projected Dims Improve error msg for invalid selction
This commit is contained in:
committed by
Yorik van Havre
parent
a662cad5be
commit
6abce56595
@@ -128,15 +128,23 @@ void DrawViewDimension::onChanged(const App::Property* prop)
|
||||
{
|
||||
if (!isRestoring()) {
|
||||
if (prop == &MeasureType) {
|
||||
// Base::Console().Message("TRACE -DVD::onChanged(MeasureType) - MeasureType: %d Measurehas3D: %d thisHas3D: %d\n",
|
||||
// MeasureType.getValue(),measurement->has3DReferences(),has3DReferences());
|
||||
if (MeasureType.isValue("True") && !measurement->has3DReferences()) {
|
||||
Base::Console().Warning("Dimension %s missing Reference to 3D model. Must be Projected.\n", getNameInDocument());
|
||||
MeasureType.setValue("Projected");
|
||||
}
|
||||
}
|
||||
if (prop == &References3D) { //have to rebuild the Measurement object
|
||||
clear3DMeasurements();
|
||||
// Base::Console().Message("TRACE -DVD::onChanged(References3D) - MeasureType: %d has3D: %d thisHas3D: %d\n",
|
||||
// MeasureType.getValue(),measurement->has3DReferences(),has3DReferences());
|
||||
clear3DMeasurements(); //Measurement object
|
||||
if (!(References3D.getValues()).empty()) {
|
||||
set3DMeasurement(References3D.getValues().at(0),References3D.getSubValues());
|
||||
set3DMeasurement(References3D.getValues().at(0),References3D.getSubValues()); //Measurement object
|
||||
} else {
|
||||
if (MeasureType.isValue("True")) { //empty 3dRefs, but True
|
||||
MeasureType.touch(); //run MeasureType logic for this case
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -301,8 +309,15 @@ double DrawViewDimension::getDimValue() const
|
||||
Base::Vector2D s1 = gen1->points[0];
|
||||
Base::Vector2D e1 = gen1->points[1];
|
||||
if (Type.isValue("Distance")) {
|
||||
//we don't do horiz/vertical edge to edge
|
||||
result = dist2Segs(s0,e0,s1,e1) / getViewPart()->Scale.getValue();
|
||||
} else if (Type.isValue("DistanceX")) {
|
||||
Base::Vector2D p1 = geom0->nearPoint(geom1);
|
||||
Base::Vector2D p2 = geom1->nearPoint(geom0);
|
||||
result = fabs(p1.fX - p2.fX) / getViewPart()->Scale.getValue();
|
||||
} else if (Type.isValue("DistanceY")) {
|
||||
Base::Vector2D p1 = geom0->nearPoint(geom1);
|
||||
Base::Vector2D p2 = geom1->nearPoint(geom0);
|
||||
result = fabs(p1.fY - p2.fY) / getViewPart()->Scale.getValue();
|
||||
}
|
||||
} else if (getRefType() == twoVertex) {
|
||||
int idx0 = DrawUtil::getIndexFromName(subElements[0]);
|
||||
@@ -432,27 +447,45 @@ int DrawViewDimension::getRefType() const
|
||||
{
|
||||
int refType = invalidRef;
|
||||
const std::vector<std::string> &subElements = References2D.getSubValues();
|
||||
if ((subElements.size() == 1) &&
|
||||
(DrawUtil::getGeomTypeFromName(subElements[0]) == "Edge")) {
|
||||
refType = oneEdge;
|
||||
if (subElements.size() == 1) {
|
||||
refType = getRefType1(subElements[0]);
|
||||
} else if (subElements.size() == 2) {
|
||||
if ((DrawUtil::getGeomTypeFromName(subElements[0]) == "Edge") &&
|
||||
(DrawUtil::getGeomTypeFromName(subElements[1]) == "Edge")) {
|
||||
refType = twoEdge;
|
||||
} else if ((DrawUtil::getGeomTypeFromName(subElements[0]) == "Vertex") &&
|
||||
(DrawUtil::getGeomTypeFromName(subElements[1]) == "Vertex")) {
|
||||
refType = twoVertex;
|
||||
} else if (((DrawUtil::getGeomTypeFromName(subElements[0]) == "Vertex") &&
|
||||
(DrawUtil::getGeomTypeFromName(subElements[1]) == "Edge")) ||
|
||||
((DrawUtil::getGeomTypeFromName(subElements[0]) == "Edge") &&
|
||||
(DrawUtil::getGeomTypeFromName(subElements[1]) == "Vertex")) ) {
|
||||
refType = vertexEdge;
|
||||
}
|
||||
//} else add different types here - Vertex-Face, ...
|
||||
refType = getRefType2(subElements[0],subElements[1]);
|
||||
}
|
||||
return refType;
|
||||
}
|
||||
|
||||
//static
|
||||
int DrawViewDimension::getRefType1(const std::string g1)
|
||||
{
|
||||
int refType = invalidRef;
|
||||
if (DrawUtil::getGeomTypeFromName(g1) == "Edge") {
|
||||
refType = oneEdge;
|
||||
}
|
||||
return refType;
|
||||
}
|
||||
|
||||
//static
|
||||
int DrawViewDimension::getRefType2(const std::string g1, const std::string g2)
|
||||
{
|
||||
int refType = invalidRef;
|
||||
if ((DrawUtil::getGeomTypeFromName(g1) == "Edge") &&
|
||||
(DrawUtil::getGeomTypeFromName(g2) == "Edge")) {
|
||||
refType = twoEdge;
|
||||
} else if ((DrawUtil::getGeomTypeFromName(g1) == "Vertex") &&
|
||||
(DrawUtil::getGeomTypeFromName(g2) == "Vertex")) {
|
||||
refType = twoVertex;
|
||||
} else if (((DrawUtil::getGeomTypeFromName(g1) == "Vertex") &&
|
||||
(DrawUtil::getGeomTypeFromName(g2) == "Edge")) ||
|
||||
((DrawUtil::getGeomTypeFromName(g1) == "Edge") &&
|
||||
(DrawUtil::getGeomTypeFromName(g2) == "Vertex")) ) {
|
||||
refType = vertexEdge;
|
||||
}
|
||||
//} else add different types here - Vertex-Face, ...
|
||||
|
||||
return refType;
|
||||
}
|
||||
|
||||
//!add 1 3D measurement Reference
|
||||
void DrawViewDimension::set3DMeasurement(DocumentObject* const &obj, const std::vector<std::string>& subElements)
|
||||
{
|
||||
@@ -466,6 +499,7 @@ void DrawViewDimension::set3DMeasurement(DocumentObject* const &obj, const std::
|
||||
//delete all previous measurements
|
||||
void DrawViewDimension::clear3DMeasurements()
|
||||
{
|
||||
//set sublinklist to empty?
|
||||
measurement->clear();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user