mirror of
https://git.dev.opencascade.org/repos/occt.git
synced 2025-04-07 18:30:55 +03:00
0026369: Modeling Data - Geom_OffsetSurface direction is wrong for indirect conical surface
This commit is contained in:
parent
a52c06d5f6
commit
4052fe71d9
@ -1625,14 +1625,31 @@ Handle(Geom_Surface) Geom_OffsetSurface::Surface() const
|
|||||||
{
|
{
|
||||||
Handle(Geom_ConicalSurface) C =
|
Handle(Geom_ConicalSurface) C =
|
||||||
Handle(Geom_ConicalSurface)::DownCast(Base);
|
Handle(Geom_ConicalSurface)::DownCast(Base);
|
||||||
Standard_Real Alpha = C->SemiAngle();
|
gp_Ax3 anAxis = C->Position();
|
||||||
Standard_Real Radius = C->RefRadius() + offsetValue * Cos(Alpha);
|
Standard_Boolean isDirect = anAxis.Direct();
|
||||||
gp_Ax3 Axis = C->Position();
|
Standard_Real anAlpha = C->SemiAngle();
|
||||||
if ( Radius >= 0.) {
|
Standard_Real aRadius;
|
||||||
gp_Vec Z( Axis.Direction());
|
if (isDirect)
|
||||||
Z *= - offsetValue * Sin(Alpha);
|
{
|
||||||
Axis.Translate(Z);
|
aRadius = C->RefRadius() + offsetValue * Cos (anAlpha);
|
||||||
Result = new Geom_ConicalSurface(Axis, Alpha, Radius);
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
aRadius = C->RefRadius() - offsetValue * Cos (anAlpha);
|
||||||
|
}
|
||||||
|
if (aRadius >= 0.)
|
||||||
|
{
|
||||||
|
gp_Vec aZ (anAxis.Direction());
|
||||||
|
if (isDirect)
|
||||||
|
{
|
||||||
|
aZ *= -offsetValue * Sin (anAlpha);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
aZ *= offsetValue * Sin (anAlpha);
|
||||||
|
}
|
||||||
|
anAxis.Translate (aZ);
|
||||||
|
Result = new Geom_ConicalSurface (anAxis, anAlpha, aRadius);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
29
tests/bugs/moddata_3/bug26369
Normal file
29
tests/bugs/moddata_3/bug26369
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
puts "============"
|
||||||
|
puts "CR26369"
|
||||||
|
puts "============"
|
||||||
|
puts ""
|
||||||
|
###################################################################################
|
||||||
|
# Modeling Data - Geom_OffsetSurface direction is wrong for indirect conical surface
|
||||||
|
###################################################################################
|
||||||
|
|
||||||
|
restore [locate_data_file bug26369_conicsurf.brep] conic_face
|
||||||
|
|
||||||
|
mksurface conic_surf conic_face
|
||||||
|
offset conic_surf_offset conic_surf 0.05
|
||||||
|
mkface conic_face_offset conic_surf_offset
|
||||||
|
|
||||||
|
set sprops_s [sprops conic_face_offset]
|
||||||
|
set cog_x -0.00408684
|
||||||
|
set cog_y 0.00408684
|
||||||
|
set cog_z -0.03213030
|
||||||
|
set cog_tol 0.00000010
|
||||||
|
|
||||||
|
regexp {X += +([-0-9.+eE]+)} $sprops_s full res_cog_x
|
||||||
|
regexp {Y += +([-0-9.+eE]+)} $sprops_s full res_cog_y
|
||||||
|
regexp {Z += +([-0-9.+eE]+)} $sprops_s full res_cog_z
|
||||||
|
|
||||||
|
if { ([expr abs($cog_x - $res_cog_x)] > $cog_tol)
|
||||||
|
|| ([expr abs($cog_y - $res_cog_y)] > $cog_tol)
|
||||||
|
|| ([expr abs($cog_z - $res_cog_z)] > $cog_tol) } {
|
||||||
|
puts "Error: The center of gravity for offset of conical surface is wrong."
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user