This is an old revision of the document!
Table of Contents
Surfaces
Definition
In Metafor, a Surface
is used to build a (Side)
limited by a Wire
.
The surface orientation, defined by its normal, is important in 3D contact.
Plane
A plane is defined by three points:
plane = surfaceset.add( Plane(number, p1, p2, p3) )
with
number | user number (unique among surfaces and $\ge 1$) |
p1 , p2 , p3 | the 3 Points lying on the plane |
Its normal (and therefore the surface orientation) is calculated using the cross product of vectors $\boldsymbol{p_2}-\boldsymbol{p_1}$ et $\boldsymbol{p_3}-\boldsymbol{p_1}$.
Coons
A Coons' surface is a linear interpolation between four Curves
. These Curves
are gathered in a closed Wire
. The Wire
orientation defines the surface orientation.
coons = surfaceset.add( Coons(number, wire) )
with
number | user number (unique among surfaces and $\ge 1$) |
wire | the Wire which is interpolated |
Ruled Surface
A ruled surface is defined by linearly interpolating two curves. The orientation of these curves sets the surface orientation.
ruled = surfaceset.add( Ruled(number, curve1, curve2) )
with
number | user number (unique among surfaces and $\ge 1$) |
curve1 , curve2 , … | the 2 facing Curves |
Ruled surfaces can be used to create planes, if the two Curves
are coplanar Lines
, or cylinders if the curves are Arcs
.
NURBS
nur = surfaceset.add( NurbsSurface(number) ) nur.setDegreeU(degU) nur.setDegreeV(degV) nur.push(i1,j1,p1); nur.pushWeight(i1,j1,w1) nur.push(i2, j2, p2); nur.pushWeight(i2, j2, w2) nur.pushKnotU(knotu1) ... nur.pushKnotU(knotu2) nur.pushKnotV(knotv1) ... nur.pushKnotV(knotv2)
degU , degV | degree along U and V |
i1 , j1 , i2 , j2 , … | indices of the pole matrix |
p1 , p2 , … | points (called “poles”) |
w1 , w2 , … | weights |
knotu1 , knotu2 , … | knot vector along U |
knotv1 , knotv2 , … | knot vector along V |
Surface of revolution
revsur = surfaceset.add( RevolutionSurface(number, axe, wire) )
where
Cylinder
c = Cylinder(number, axis, radius, ptGen) # First way to use Cylinder c = Cylinder(number, axis, radius) # Second way to use Cylinder c.setProjType(projType)
where
axis | Line which defines the cylinder axis |
radius | cylinder radius |
ptGen | optional Point of the generating line of the cylinder. This point must be situated: - in a plane perpendicular to the axis including the first point of the axis, - to a distance equal to the cylinder radius of the first point of the axis. Since this point is quite difficult to define when the cylinder is not parallel to an axis, a random point can be supplied and Metafor will put it in its right place with a WARNING_MESSAGE (see apps.qs.contactCylProj0Point ). This point is compulsory if the cylinder has a given rotation. |
projType | = 0 : the surface is finite and limited by the length of the axis = 1 : the surface is infinite |