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)
|
||||
{
|
||||
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 ());
|
||||
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);
|
||||
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)
|
||||
{
|
||||
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
|
||||
{
|
||||
|
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