mirror of
https://git.dev.opencascade.org/repos/occt.git
synced 2025-04-06 18:26:22 +03:00
0026305: BRepFeat_MakePrism returns inconsistent results && 026315: BRepFeat_MakeRevol fails to create revol from shape
Test-cases for issues #26305 and #26315
This commit is contained in:
parent
c0e32b3c3d
commit
d7988ee19f
@ -54,6 +54,7 @@
|
|||||||
#include <LocOpe_CSIntersector.hxx>
|
#include <LocOpe_CSIntersector.hxx>
|
||||||
#include <LocOpe_PntFace.hxx>
|
#include <LocOpe_PntFace.hxx>
|
||||||
#include <LocOpe_BuildShape.hxx>
|
#include <LocOpe_BuildShape.hxx>
|
||||||
|
#include <ElSLib.hxx>
|
||||||
|
|
||||||
#include <TColGeom_SequenceOfCurve.hxx>
|
#include <TColGeom_SequenceOfCurve.hxx>
|
||||||
|
|
||||||
@ -490,14 +491,9 @@ void BRepFeat::FaceUntil(const TopoDS_Shape& Sbase,
|
|||||||
{
|
{
|
||||||
Bnd_Box B;
|
Bnd_Box B;
|
||||||
BRepBndLib::Add(Sbase,B);
|
BRepBndLib::Add(Sbase,B);
|
||||||
Standard_Real c[6], bnd;
|
Standard_Real x[2], y[2], z[2];
|
||||||
B.Get(c[0],c[2],c[4],c[1],c[3],c[5]);
|
B.Get(x[0],y[0],z[0],x[1],y[1],z[1]);
|
||||||
bnd = c[0];
|
Standard_Real diam = 10.*Sqrt(B.SquareExtent());
|
||||||
for(Standard_Integer i = 1 ; i < 6; i++) {
|
|
||||||
if(c[i] > bnd) bnd = c[i];
|
|
||||||
}
|
|
||||||
bnd = 10*bnd;
|
|
||||||
|
|
||||||
|
|
||||||
Handle(Geom_Surface) s = BRep_Tool::Surface(FUntil);
|
Handle(Geom_Surface) s = BRep_Tool::Surface(FUntil);
|
||||||
Handle(Standard_Type) styp = s->DynamicType();
|
Handle(Standard_Type) styp = s->DynamicType();
|
||||||
@ -507,16 +503,80 @@ void BRepFeat::FaceUntil(const TopoDS_Shape& Sbase,
|
|||||||
}
|
}
|
||||||
Handle(Geom_RectangularTrimmedSurface) str;
|
Handle(Geom_RectangularTrimmedSurface) str;
|
||||||
if (styp == STANDARD_TYPE(Geom_Plane)) {
|
if (styp == STANDARD_TYPE(Geom_Plane)) {
|
||||||
|
gp_Pln aPln = Handle(Geom_Plane)::DownCast(s)->Pln();
|
||||||
|
Standard_Real u, v, umin = RealLast(), umax = -umin,
|
||||||
|
vmin = RealLast(), vmax = -vmin;
|
||||||
|
for(Standard_Integer i = 0 ; i < 2; i++)
|
||||||
|
{
|
||||||
|
for(Standard_Integer j = 0; j < 2; j++)
|
||||||
|
{
|
||||||
|
for(Standard_Integer k = 0; k < 2; k++)
|
||||||
|
{
|
||||||
|
gp_Pnt aP(x[i], y[j], z[k]);
|
||||||
|
ElSLib::Parameters(aPln, aP, u, v);
|
||||||
|
if(u < umin)
|
||||||
|
umin = u;
|
||||||
|
if(u > umax)
|
||||||
|
umax = u;
|
||||||
|
if(v < vmin)
|
||||||
|
vmin = v;
|
||||||
|
if(v > vmax)
|
||||||
|
vmax = v;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
umin -= diam;
|
||||||
|
umax += diam;
|
||||||
|
vmin -= diam;
|
||||||
|
vmax += diam;
|
||||||
str = new Geom_RectangularTrimmedSurface
|
str = new Geom_RectangularTrimmedSurface
|
||||||
(s, bnd, -bnd, bnd, -bnd, Standard_True, Standard_True);
|
(s, umin, umax, vmin, vmax, Standard_True, Standard_True);
|
||||||
}
|
}
|
||||||
else if (styp == STANDARD_TYPE(Geom_CylindricalSurface)) {
|
else if (styp == STANDARD_TYPE(Geom_CylindricalSurface)) {
|
||||||
|
gp_Cylinder aCyl = Handle(Geom_CylindricalSurface)::DownCast(s)->Cylinder();
|
||||||
|
Standard_Real u, v, vmin = RealLast(), vmax = -vmin;
|
||||||
|
for(Standard_Integer i = 0 ; i < 2; i++)
|
||||||
|
{
|
||||||
|
for(Standard_Integer j = 0; j < 2; j++)
|
||||||
|
{
|
||||||
|
for(Standard_Integer k = 0; k < 2; k++)
|
||||||
|
{
|
||||||
|
gp_Pnt aP(x[i], y[j], z[k]);
|
||||||
|
ElSLib::Parameters(aCyl, aP, u, v);
|
||||||
|
if(v < vmin)
|
||||||
|
vmin = v;
|
||||||
|
if(v > vmax)
|
||||||
|
vmax = v;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
vmin -= diam;
|
||||||
|
vmax += diam;
|
||||||
str = new Geom_RectangularTrimmedSurface
|
str = new Geom_RectangularTrimmedSurface
|
||||||
(s, bnd, -bnd, Standard_False, Standard_True);
|
(s, vmin, vmax, Standard_False, Standard_True);
|
||||||
}
|
}
|
||||||
else if (styp == STANDARD_TYPE(Geom_ConicalSurface)) {
|
else if (styp == STANDARD_TYPE(Geom_ConicalSurface)) {
|
||||||
|
gp_Cone aCon = Handle(Geom_ConicalSurface)::DownCast(s)->Cone();
|
||||||
|
Standard_Real u, v, vmin = RealLast(), vmax = -vmin;
|
||||||
|
for(Standard_Integer i = 0 ; i < 2; i++)
|
||||||
|
{
|
||||||
|
for(Standard_Integer j = 0; j < 2; j++)
|
||||||
|
{
|
||||||
|
for(Standard_Integer k = 0; k < 2; k++)
|
||||||
|
{
|
||||||
|
gp_Pnt aP(x[i], y[j], z[k]);
|
||||||
|
ElSLib::Parameters(aCon, aP, u, v);
|
||||||
|
if(v < vmin)
|
||||||
|
vmin = v;
|
||||||
|
if(v > vmax)
|
||||||
|
vmax = v;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
vmin -= diam;
|
||||||
|
vmax += diam;
|
||||||
str = new Geom_RectangularTrimmedSurface
|
str = new Geom_RectangularTrimmedSurface
|
||||||
(s, bnd, -bnd, Standard_False, Standard_True);
|
(s, vmin, vmax, Standard_False, Standard_True);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
FUntil.Nullify();
|
FUntil.Nullify();
|
||||||
|
@ -570,6 +570,7 @@ void BRepFeat_MakePrism::Perform(const TopoDS_Shape& From,
|
|||||||
ASI2.Perform(scur);
|
ASI2.Perform(scur);
|
||||||
TopAbs_Orientation OrU, OrF;
|
TopAbs_Orientation OrU, OrF;
|
||||||
TopoDS_Face FFrom, FUntil;
|
TopoDS_Face FFrom, FUntil;
|
||||||
|
Standard_Real ParF, ParU;
|
||||||
if (ASI1.IsDone() && ASI1.NbPoints(1) >=1) {
|
if (ASI1.IsDone() && ASI1.NbPoints(1) >=1) {
|
||||||
if (myFuse == 1) {
|
if (myFuse == 1) {
|
||||||
OrU = ASI1.Point(1,1).Orientation();
|
OrU = ASI1.Point(1,1).Orientation();
|
||||||
@ -579,6 +580,7 @@ void BRepFeat_MakePrism::Perform(const TopoDS_Shape& From,
|
|||||||
}
|
}
|
||||||
if(sens==-1) OrU = TopAbs::Reverse(OrU);
|
if(sens==-1) OrU = TopAbs::Reverse(OrU);
|
||||||
FUntil = ASI1.Point(1,1).Face();
|
FUntil = ASI1.Point(1,1).Face();
|
||||||
|
ParU = ASI1.Point(1,1).Parameter();
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
NotDone();
|
NotDone();
|
||||||
@ -589,12 +591,20 @@ void BRepFeat_MakePrism::Perform(const TopoDS_Shape& From,
|
|||||||
OrF = ASI2.Point(1,1).Orientation();
|
OrF = ASI2.Point(1,1).Orientation();
|
||||||
if(sens==1) OrF = TopAbs::Reverse(OrF);
|
if(sens==1) OrF = TopAbs::Reverse(OrF);
|
||||||
FFrom = ASI2.Point(1,1).Face();
|
FFrom = ASI2.Point(1,1).Face();
|
||||||
|
ParF = ASI2.Point(1,1).Parameter();
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
NotDone();
|
NotDone();
|
||||||
myStatusError = BRepFeat_NoIntersectF;
|
myStatusError = BRepFeat_NoIntersectF;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if(tran > 0 && (Abs(ParU) < Abs(ParF)))
|
||||||
|
{
|
||||||
|
TopAbs_Orientation Or;
|
||||||
|
Or = OrU;
|
||||||
|
OrU = OrF;
|
||||||
|
OrF = Or;
|
||||||
|
}
|
||||||
TopoDS_Shape Comp;
|
TopoDS_Shape Comp;
|
||||||
BRep_Builder B;
|
BRep_Builder B;
|
||||||
B.MakeCompound(TopoDS::Compound(Comp));
|
B.MakeCompound(TopoDS::Compound(Comp));
|
||||||
|
@ -140,7 +140,7 @@ void BRepFeat_MakeRevol::Init(const TopoDS_Shape& Sbase,
|
|||||||
myJustGluer = Standard_False;
|
myJustGluer = Standard_False;
|
||||||
|
|
||||||
//-------------- ifv
|
//-------------- ifv
|
||||||
// mySkface.Nullify();
|
// mySkface.Nullify();
|
||||||
//-------------- ifv
|
//-------------- ifv
|
||||||
|
|
||||||
|
|
||||||
@ -372,8 +372,8 @@ void BRepFeat_MakeRevol::Perform(const TopoDS_Shape& Until)
|
|||||||
Standard_Boolean Trf = TransformShapeFU(1);
|
Standard_Boolean Trf = TransformShapeFU(1);
|
||||||
ShapeUntilValid();
|
ShapeUntilValid();
|
||||||
|
|
||||||
// Do systematically almost complete revolution
|
// Do systematically almost complete revolution
|
||||||
// BRepSweep_Revol theRevol(myPbase,myAxis,2.*M_PI-10.*Precision::Angular());
|
// BRepSweep_Revol theRevol(myPbase,myAxis,2.*M_PI-10.*Precision::Angular());
|
||||||
LocOpe_Revol theRevol;
|
LocOpe_Revol theRevol;
|
||||||
if(!TourComplet) {
|
if(!TourComplet) {
|
||||||
Angle = 2.*M_PI- 3*M_PI/180.;
|
Angle = 2.*M_PI- 3*M_PI/180.;
|
||||||
@ -468,7 +468,7 @@ void BRepFeat_MakeRevol::Perform(const TopoDS_Shape& Until)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Loop of control of descendance
|
// Loop of control of descendance
|
||||||
/*
|
/*
|
||||||
TopExp_Explorer expr(mySbase, TopAbs_FACE);
|
TopExp_Explorer expr(mySbase, TopAbs_FACE);
|
||||||
char nom1[20], nom2[20];
|
char nom1[20], nom2[20];
|
||||||
Standard_Integer ii = 0;
|
Standard_Integer ii = 0;
|
||||||
@ -501,8 +501,8 @@ void BRepFeat_MakeRevol::Perform(const TopoDS_Shape& Until)
|
|||||||
DBRep::Set(nom2, ite.Value());
|
DBRep::Set(nom2, ite.Value());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
@ -570,7 +570,7 @@ void BRepFeat_MakeRevol::Perform(const TopoDS_Shape& From,
|
|||||||
myGShape = VraiRevol;
|
myGShape = VraiRevol;
|
||||||
GeneratedShapeValid();
|
GeneratedShapeValid();
|
||||||
GluedFacesValid();
|
GluedFacesValid();
|
||||||
// VerifGluedFaces(mySkface, theBase, myBCurve, myCurves, theRevol, myGluedF);
|
// VerifGluedFaces(mySkface, theBase, myBCurve, myCurves, theRevol, myGluedF);
|
||||||
|
|
||||||
theRevol.Curves(myCurves);
|
theRevol.Curves(myCurves);
|
||||||
myBCurve = theRevol.BarycCurve();
|
myBCurve = theRevol.BarycCurve();
|
||||||
@ -604,7 +604,8 @@ void BRepFeat_MakeRevol::Perform(const TopoDS_Shape& From,
|
|||||||
pr1 = ElCLib::InPeriod(pr1,PrU-2*M_PI,PrU);
|
pr1 = ElCLib::InPeriod(pr1,PrU-2*M_PI,PrU);
|
||||||
Standard_Real pr2 = ASI2.Point(1,ASI2.NbPoints(1)).Parameter();
|
Standard_Real pr2 = ASI2.Point(1,ASI2.NbPoints(1)).Parameter();
|
||||||
pr2 = ElCLib::InPeriod(pr2,PrU-2*M_PI,PrU);
|
pr2 = ElCLib::InPeriod(pr2,PrU-2*M_PI,PrU);
|
||||||
OrF = OrU;
|
//OrF = OrU;
|
||||||
|
OrF = TopAbs::Reverse(OrU);
|
||||||
FFrom = ASI2.Point(1,1).Face();
|
FFrom = ASI2.Point(1,1).Face();
|
||||||
PrF = Max(pr1, pr2);
|
PrF = Max(pr1, pr2);
|
||||||
}
|
}
|
||||||
@ -631,8 +632,8 @@ void BRepFeat_MakeRevol::Perform(const TopoDS_Shape& From,
|
|||||||
//modified by NIZNHY-PKV Thu Mar 21 18:18:57 2002 t
|
//modified by NIZNHY-PKV Thu Mar 21 18:18:57 2002 t
|
||||||
TopoDS_Shape Cutsh = trP.Shape();
|
TopoDS_Shape Cutsh = trP.Shape();
|
||||||
TopExp_Explorer ex(Cutsh, TopAbs_SOLID);
|
TopExp_Explorer ex(Cutsh, TopAbs_SOLID);
|
||||||
// Standard_Real PrF = BRepFeat::ParametricBarycenter(mySFrom, myBCurve);
|
// Standard_Real PrF = BRepFeat::ParametricBarycenter(mySFrom, myBCurve);
|
||||||
// Standard_Real PrU = BRepFeat::ParametricBarycenter(mySUntil, myBCurve);
|
// Standard_Real PrU = BRepFeat::ParametricBarycenter(mySUntil, myBCurve);
|
||||||
VraiRevol = ex.Current();
|
VraiRevol = ex.Current();
|
||||||
for(; ex.More(); ex.Next()) {
|
for(; ex.More(); ex.Next()) {
|
||||||
Standard_Real PrCur = BRepFeat::
|
Standard_Real PrCur = BRepFeat::
|
||||||
@ -642,7 +643,7 @@ void BRepFeat_MakeRevol::Perform(const TopoDS_Shape& From,
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(myFuse == 1) {
|
if(myFuse == 1 && !myJustFeat) {
|
||||||
//modified by NIZNHY-PKV Thu Mar 21 18:19:14 2002 f
|
//modified by NIZNHY-PKV Thu Mar 21 18:19:14 2002 f
|
||||||
//BRepAlgo_Fuse f(mySbase, VraiRevol);
|
//BRepAlgo_Fuse f(mySbase, VraiRevol);
|
||||||
//myShape = f.Shape();
|
//myShape = f.Shape();
|
||||||
@ -653,7 +654,7 @@ void BRepFeat_MakeRevol::Perform(const TopoDS_Shape& From,
|
|||||||
//modified by NIZNHY-PKV Thu Mar 21 18:19:18 2002 t
|
//modified by NIZNHY-PKV Thu Mar 21 18:19:18 2002 t
|
||||||
Done();
|
Done();
|
||||||
}
|
}
|
||||||
else if(myFuse == 0) {
|
else if(myFuse == 0 && !myJustFeat) {
|
||||||
//modified by NIZNHY-PKV Thu Mar 21 18:19:46 2002 f
|
//modified by NIZNHY-PKV Thu Mar 21 18:19:46 2002 f
|
||||||
//BRepAlgo_Cut c(mySbase, VraiRevol);
|
//BRepAlgo_Cut c(mySbase, VraiRevol);
|
||||||
//myShape = c.Shape();
|
//myShape = c.Shape();
|
||||||
@ -721,8 +722,8 @@ void BRepFeat_MakeRevol::PerformUntilAngle(const TopoDS_Shape& Until,
|
|||||||
Standard_Boolean Trf = TransformShapeFU(1);
|
Standard_Boolean Trf = TransformShapeFU(1);
|
||||||
ShapeUntilValid();
|
ShapeUntilValid();
|
||||||
|
|
||||||
// Produce systematicallt an almost complete revolution
|
// Produce systematicallt an almost complete revolution
|
||||||
// BRepSweep_Revol theRevol(myPbase,myAxis,2.*M_PI-10.*Precision::Angular());
|
// BRepSweep_Revol theRevol(myPbase,myAxis,2.*M_PI-10.*Precision::Angular());
|
||||||
LocOpe_Revol theRevol;
|
LocOpe_Revol theRevol;
|
||||||
theRevol.Perform(myPbase, myAxis, Angle);
|
theRevol.Perform(myPbase, myAxis, Angle);
|
||||||
TopoDS_Shape VraiRevol = theRevol.Shape();
|
TopoDS_Shape VraiRevol = theRevol.Shape();
|
||||||
|
34
tests/bugs/modalg_6/bug26305_1
Normal file
34
tests/bugs/modalg_6/bug26305_1
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
puts "========"
|
||||||
|
puts "OCC26305"
|
||||||
|
puts "========"
|
||||||
|
puts ""
|
||||||
|
###################################################
|
||||||
|
# BRepFeat_MakePrism returns inconsistent results
|
||||||
|
###################################################
|
||||||
|
|
||||||
|
circle aCircle -9 -9 0 0 0 1 1 0 0 10
|
||||||
|
mkedge anEdge aCircle
|
||||||
|
wire aWire anEdge
|
||||||
|
mkplane aCircle aWire 0
|
||||||
|
|
||||||
|
plane aFromPlane 0 0 -10 0 0 1 1 0 0
|
||||||
|
mkface aFromPlane aFromPlane
|
||||||
|
plane aToPlane 0 0 10 0 0 1 1 0 0
|
||||||
|
mkface aToPlane aToPlane
|
||||||
|
|
||||||
|
featprism aCircle aCircle aCircle 0 0 1 2 1
|
||||||
|
featperform prism aResult aFromPlane aToPlane
|
||||||
|
|
||||||
|
checkshape aResult
|
||||||
|
|
||||||
|
vinit
|
||||||
|
vdisplay aResult
|
||||||
|
vsetdispmode aResult 1
|
||||||
|
vfit
|
||||||
|
|
||||||
|
set bug_info [vreadpixel 300 340 name]
|
||||||
|
if {$bug_info == "BLACK 0"} {
|
||||||
|
puts "ERROR: OCC26305 is reproduced. Prism is incorrect."
|
||||||
|
}
|
||||||
|
|
||||||
|
set only_screen 1
|
34
tests/bugs/modalg_6/bug26305_2
Normal file
34
tests/bugs/modalg_6/bug26305_2
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
puts "========"
|
||||||
|
puts "OCC26305"
|
||||||
|
puts "========"
|
||||||
|
puts ""
|
||||||
|
###################################################
|
||||||
|
# BRepFeat_MakePrism returns inconsistent results
|
||||||
|
###################################################
|
||||||
|
|
||||||
|
circle aCircle -10 -10 0 0 0 1 1 0 0 10
|
||||||
|
mkedge anEdge aCircle
|
||||||
|
wire aWire anEdge
|
||||||
|
mkplane aCircle aWire 0
|
||||||
|
|
||||||
|
plane aFromPlane 0 0 -10 0 0 1 1 0 0
|
||||||
|
mkface aFromPlane aFromPlane
|
||||||
|
plane aToPlane 0 0 10 0 0 1 1 0 0
|
||||||
|
mkface aToPlane aToPlane
|
||||||
|
|
||||||
|
featprism aCircle aCircle aCircle 0 0 1 2 1
|
||||||
|
featperform prism aResult aFromPlane aToPlane
|
||||||
|
|
||||||
|
checkshape aResult
|
||||||
|
|
||||||
|
vinit
|
||||||
|
vdisplay aResult
|
||||||
|
vsetdispmode aResult 1
|
||||||
|
vfit
|
||||||
|
|
||||||
|
set bug_info [vreadpixel 300 340 name]
|
||||||
|
if {$bug_info == "BLACK 0"} {
|
||||||
|
puts "ERROR: OCC26305 is reproduced. Prism is incorrect."
|
||||||
|
}
|
||||||
|
|
||||||
|
set only_screen 1
|
34
tests/bugs/modalg_6/bug26305_3
Normal file
34
tests/bugs/modalg_6/bug26305_3
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
puts "========"
|
||||||
|
puts "OCC26305"
|
||||||
|
puts "========"
|
||||||
|
puts ""
|
||||||
|
###################################################
|
||||||
|
# BRepFeat_MakePrism returns inconsistent results
|
||||||
|
###################################################
|
||||||
|
|
||||||
|
circle aCircle 0 0 0 0 0 1 1 0 0 10
|
||||||
|
mkedge anEdge aCircle
|
||||||
|
wire aWire anEdge
|
||||||
|
mkplane aCircle aWire 0
|
||||||
|
|
||||||
|
plane aFromPlane 0 0 10 0 0 1 1 0 0
|
||||||
|
mkface aFromPlane aFromPlane
|
||||||
|
plane aToPlane 0 0 20 0 0 1 1 0 0
|
||||||
|
mkface aToPlane aToPlane
|
||||||
|
|
||||||
|
featprism aCircle aCircle aCircle 0 0 1 2 1
|
||||||
|
featperform prism aResult aToPlane aFromPlane
|
||||||
|
|
||||||
|
checkshape aResult
|
||||||
|
|
||||||
|
vinit
|
||||||
|
vdisplay aResult
|
||||||
|
vsetdispmode aResult 1
|
||||||
|
vfit
|
||||||
|
|
||||||
|
set bug_info [vreadpixel 300 300 name]
|
||||||
|
if {$bug_info == "BLACK 0"} {
|
||||||
|
puts "ERROR: OCC26305 is reproduced. Prism is incorrect."
|
||||||
|
}
|
||||||
|
|
||||||
|
set only_screen 1
|
29
tests/bugs/modalg_6/bug26315
Normal file
29
tests/bugs/modalg_6/bug26315
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
puts "========"
|
||||||
|
puts "OCC26315"
|
||||||
|
puts "========"
|
||||||
|
puts ""
|
||||||
|
#######################################################
|
||||||
|
# BRepFeat_MakeRevol fails to create revol from shape
|
||||||
|
#######################################################
|
||||||
|
|
||||||
|
circle aCircle 0 0 0 0 0 1 1 0 0 10
|
||||||
|
mkedge anEdge aCircle
|
||||||
|
wire aWire anEdge
|
||||||
|
mkplane aCircle aWire 0
|
||||||
|
|
||||||
|
plane aFromPlane 0 0 -10 0 0 1 1 0 0
|
||||||
|
mkface aFromPlane aFromPlane
|
||||||
|
plane aToPlane 0 0 10 0 0 1 1 0 0
|
||||||
|
mkface aToPlane aToPlane
|
||||||
|
|
||||||
|
featrevol aCircle aCircle aCircle 20 0 0 0 1 0 2 1
|
||||||
|
featperform revol aResult aFromPlane aToPlane
|
||||||
|
|
||||||
|
checkshape aResult
|
||||||
|
|
||||||
|
vinit
|
||||||
|
vdisplay aResult
|
||||||
|
vsetdispmode aResult 1
|
||||||
|
vfit
|
||||||
|
|
||||||
|
set only_screen 1
|
Loading…
x
Reference in New Issue
Block a user