mirror of
https://git.dev.opencascade.org/repos/occt.git
synced 2025-08-09 13:22:24 +03:00
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
This commit is contained in:
@@ -550,20 +550,46 @@ static int VDimBuilder (Draw_Interpretor& /*theDi*/,
|
|||||||
}
|
}
|
||||||
else if (aShapes.Extent() == 2)
|
else if (aShapes.Extent() == 2)
|
||||||
{
|
{
|
||||||
if (aShapes.First()->Type() == AIS_KOI_Shape && aShapes.Last()->Type() == AIS_KOI_Shape)
|
TopoDS_Shape aShape1, aShape2;
|
||||||
aDim = new AIS_LengthDimension ((Handle(AIS_Shape)::DownCast(aShapes.First ()))->Shape(),
|
|
||||||
(Handle(AIS_Shape)::DownCast(aShapes.Last ()))->Shape(),
|
// Getting shapes
|
||||||
aWorkingPlane);
|
if (aShapes.First()->DynamicType() == STANDARD_TYPE (AIS_Point))
|
||||||
else// AIS_Point
|
|
||||||
{
|
{
|
||||||
Handle(AIS_Point) aPoint1 = Handle(AIS_Point)::DownCast(aShapes.First ());
|
Handle(AIS_Point) aPoint1 = Handle(AIS_Point)::DownCast (aShapes.First ());
|
||||||
Handle(AIS_Point) aPoint2 = Handle(AIS_Point)::DownCast(aShapes.Last ());
|
aShape1 = aPoint1->Vertex();
|
||||||
// Adjust working plane
|
|
||||||
aWorkingPlane.SetLocation (BRep_Tool::Pnt(aPoint1->Vertex()));
|
|
||||||
aDim = new AIS_LengthDimension (aPoint1->Component()->Pnt(),
|
|
||||||
aPoint2->Component()->Pnt(),
|
|
||||||
aWorkingPlane);
|
|
||||||
}
|
}
|
||||||
|
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)
|
||||||
|
{
|
||||||
|
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
|
else
|
||||||
{
|
{
|
||||||
|
29
tests/bugs/vis/bug26035_1
Normal file
29
tests/bugs/vis/bug26035_1
Normal file
@@ -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
|
||||||
|
|
24
tests/bugs/vis/bug26035_2
Normal file
24
tests/bugs/vis/bug26035_2
Normal file
@@ -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
|
||||||
|
|
26
tests/bugs/vis/bug26035_3
Normal file
26
tests/bugs/vis/bug26035_3
Normal file
@@ -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
|
||||||
|
|
26
tests/bugs/vis/bug26035_4
Normal file
26
tests/bugs/vis/bug26035_4
Normal file
@@ -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
|
||||||
|
|
25
tests/bugs/vis/bug26035_5
Normal file
25
tests/bugs/vis/bug26035_5
Normal file
@@ -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
|
||||||
|
|
25
tests/bugs/vis/bug26035_6
Normal file
25
tests/bugs/vis/bug26035_6
Normal file
@@ -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
|
||||||
|
|
Reference in New Issue
Block a user