0026035: Length dimension can't be built between two vertices in Draw
authordbv <dbv@opencascade.com>
Thu, 9 Apr 2015 08:03:41 +0000 (11:03 +0300)
committerbugmaster <bugmaster@opencascade.com>
Thu, 16 Apr 2015 08:12:48 +0000 (11:12 +0300)
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

src/ViewerTest/ViewerTest_RelationCommands.cxx
tests/bugs/vis/bug26035_1 [new file with mode: 0644]
tests/bugs/vis/bug26035_2 [new file with mode: 0644]
tests/bugs/vis/bug26035_3 [new file with mode: 0644]
tests/bugs/vis/bug26035_4 [new file with mode: 0644]
tests/bugs/vis/bug26035_5 [new file with mode: 0644]
tests/bugs/vis/bug26035_6 [new file with mode: 0644]

index befd5d8..d15dafe 100644 (file)
@@ -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 (file)
index 0000000..be4116d
--- /dev/null
@@ -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 (file)
index 0000000..8b91728
--- /dev/null
@@ -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 (file)
index 0000000..f365e4a
--- /dev/null
@@ -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 (file)
index 0000000..5abba54
--- /dev/null
@@ -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 (file)
index 0000000..81bf689
--- /dev/null
@@ -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 (file)
index 0000000..f3ece6d
--- /dev/null
@@ -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
+