From 85a975f1127542473b1a3f959025f71cb401e0f5 Mon Sep 17 00:00:00 2001 From: dbv Date: Thu, 9 Apr 2015 11:03:41 +0300 Subject: [PATCH] 0026035: Length dimension can't be built between two vertices in Draw Fixed drawing length dimension for two vertices in Draw Fixed exception when trying to draw length dimension for face-point or point-face Fixed drawing length dimension for edge-vertex/point and vertex/point-edge --- .../ViewerTest_RelationCommands.cxx | 50 ++++++++++++++----- tests/bugs/vis/bug26035_1 | 29 +++++++++++ tests/bugs/vis/bug26035_2 | 24 +++++++++ tests/bugs/vis/bug26035_3 | 26 ++++++++++ tests/bugs/vis/bug26035_4 | 26 ++++++++++ tests/bugs/vis/bug26035_5 | 25 ++++++++++ tests/bugs/vis/bug26035_6 | 25 ++++++++++ 7 files changed, 193 insertions(+), 12 deletions(-) create mode 100644 tests/bugs/vis/bug26035_1 create mode 100644 tests/bugs/vis/bug26035_2 create mode 100644 tests/bugs/vis/bug26035_3 create mode 100644 tests/bugs/vis/bug26035_4 create mode 100644 tests/bugs/vis/bug26035_5 create mode 100644 tests/bugs/vis/bug26035_6 diff --git a/src/ViewerTest/ViewerTest_RelationCommands.cxx b/src/ViewerTest/ViewerTest_RelationCommands.cxx index befd5d89f6..d15dafe84f 100644 --- a/src/ViewerTest/ViewerTest_RelationCommands.cxx +++ b/src/ViewerTest/ViewerTest_RelationCommands.cxx @@ -550,20 +550,46 @@ static int VDimBuilder (Draw_Interpretor& /*theDi*/, } else if (aShapes.Extent() == 2) { - if (aShapes.First()->Type() == AIS_KOI_Shape && aShapes.Last()->Type() == AIS_KOI_Shape) - aDim = new AIS_LengthDimension ((Handle(AIS_Shape)::DownCast(aShapes.First ()))->Shape(), - (Handle(AIS_Shape)::DownCast(aShapes.Last ()))->Shape(), - aWorkingPlane); - else// AIS_Point + TopoDS_Shape aShape1, aShape2; + + // Getting shapes + if (aShapes.First()->DynamicType() == STANDARD_TYPE (AIS_Point)) + { + Handle(AIS_Point) aPoint1 = Handle(AIS_Point)::DownCast (aShapes.First ()); + aShape1 = aPoint1->Vertex(); + } + else if (aShapes.First()->Type() == AIS_KOI_Shape) + { + aShape1 = (Handle(AIS_Shape)::DownCast (aShapes.First()))->Shape(); + } + + if (aShapes.Last()->DynamicType() == STANDARD_TYPE (AIS_Point)) + { + Handle(AIS_Point) aPoint2 = Handle(AIS_Point)::DownCast (aShapes.Last ()); + aShape2 = aPoint2->Vertex(); + } + else if (aShapes.Last()->Type() == AIS_KOI_Shape) + { + aShape2 = (Handle(AIS_Shape)::DownCast (aShapes.Last()))->Shape(); + } + + if (aShape1.IsNull() || aShape2.IsNull()) + { + std::cerr << theArgs[0] << ": wrong shape type.\n"; + return 1; + } + + // Adjust working plane + if (aShape1.ShapeType() == TopAbs_VERTEX) { - Handle(AIS_Point) aPoint1 = Handle(AIS_Point)::DownCast(aShapes.First ()); - Handle(AIS_Point) aPoint2 = Handle(AIS_Point)::DownCast(aShapes.Last ()); - // Adjust working plane - aWorkingPlane.SetLocation (BRep_Tool::Pnt(aPoint1->Vertex())); - aDim = new AIS_LengthDimension (aPoint1->Component()->Pnt(), - aPoint2->Component()->Pnt(), - aWorkingPlane); + aWorkingPlane.SetLocation (BRep_Tool::Pnt (TopoDS::Vertex (aShape1))); } + else if (aShape2.ShapeType() == TopAbs_VERTEX) + { + aWorkingPlane.SetLocation (BRep_Tool::Pnt (TopoDS::Vertex (aShape2))); + } + + aDim = new AIS_LengthDimension (aShape1, aShape2, aWorkingPlane); } else { diff --git a/tests/bugs/vis/bug26035_1 b/tests/bugs/vis/bug26035_1 new file mode 100644 index 0000000000..be4116d498 --- /dev/null +++ b/tests/bugs/vis/bug26035_1 @@ -0,0 +1,29 @@ +puts "============" +puts "CR26035" +puts "============" +puts "" +####################################################################### +# Dimension drawing between two vertices +####################################################################### + +vinit View1 +vclear +vaxo + +set x1 10 +set y1 0 +set z1 0 + +set x2 10 +set y2 0 +set z2 10 + +vertex v1 $x1 $y1 $z1 +vertex v2 $x2 $y2 $z2 + +vdimension len -length -shapes v1 v2 -plane yoz + +vfit + +set only_screen 1 + diff --git a/tests/bugs/vis/bug26035_2 b/tests/bugs/vis/bug26035_2 new file mode 100644 index 0000000000..8b91728c31 --- /dev/null +++ b/tests/bugs/vis/bug26035_2 @@ -0,0 +1,24 @@ +puts "============" +puts "CR26035" +puts "============" +puts "" +####################################################################### +# Exception when trying to draw dimension between face and point +####################################################################### + +vinit View1 +vclear +vaxo + +box b -10 -10 -10 20 20 20 +explode b F +vdisplay b_1 + +vpoint p 10 0 0 + +catch {vdimension len -length -shapes b_1 p -plane zox} + +vfit + +set only_screen 1 + diff --git a/tests/bugs/vis/bug26035_3 b/tests/bugs/vis/bug26035_3 new file mode 100644 index 0000000000..f365e4a597 --- /dev/null +++ b/tests/bugs/vis/bug26035_3 @@ -0,0 +1,26 @@ +puts "============" +puts "CR26035" +puts "============" +puts "" +####################################################################### +# Drawing dimension between edge and vertex +####################################################################### + +vinit View1 +vclear +vaxo + +vertex v1 10 -10 0 +vertex v2 10 10 0 +edge e v1 v2 +vdisplay e + +vertex v3 10 0 10 +vdisplay v3 + +vdimension len -length -shapes e v3 -plane yoz + +vfit + +set only_screen 1 + diff --git a/tests/bugs/vis/bug26035_4 b/tests/bugs/vis/bug26035_4 new file mode 100644 index 0000000000..5abba54a51 --- /dev/null +++ b/tests/bugs/vis/bug26035_4 @@ -0,0 +1,26 @@ +puts "============" +puts "CR26035" +puts "============" +puts "" +####################################################################### +# Drawing dimension between vertex and edge +####################################################################### + +vinit View1 +vclear +vaxo + +vertex v1 10 -10 0 +vertex v2 10 10 0 +edge e v1 v2 +vdisplay e + +vertex v3 10 0 10 +vdisplay v3 + +vdimension len -length -shapes v3 e -plane yoz + +vfit + +set only_screen 1 + diff --git a/tests/bugs/vis/bug26035_5 b/tests/bugs/vis/bug26035_5 new file mode 100644 index 0000000000..81bf689c6b --- /dev/null +++ b/tests/bugs/vis/bug26035_5 @@ -0,0 +1,25 @@ +puts "============" +puts "CR26035" +puts "============" +puts "" +####################################################################### +# Drawing dimension between edge and point +####################################################################### + +vinit View1 +vclear +vaxo + +vertex v1 10 -10 0 +vertex v2 10 10 0 +edge e v1 v2 +vdisplay e + +vpoint p 10 0 10 + +vdimension len -length -shapes e p -plane yoz + +vfit + +set only_screen 1 + diff --git a/tests/bugs/vis/bug26035_6 b/tests/bugs/vis/bug26035_6 new file mode 100644 index 0000000000..f3ece6d96a --- /dev/null +++ b/tests/bugs/vis/bug26035_6 @@ -0,0 +1,25 @@ +puts "============" +puts "CR26035" +puts "============" +puts "" +####################################################################### +# Drawing dimension between point and edge +####################################################################### + +vinit View1 +vclear +vaxo + +vertex v1 10 -10 0 +vertex v2 10 10 0 +edge e v1 v2 +vdisplay e + +vpoint p 10 0 10 + +vdimension len -length -shapes p e -plane yoz + +vfit + +set only_screen 1 + -- 2.39.5