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 computed 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)
with
number | user number (unique among surfaces and $\ge 1$) |
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 |
Closed Surface of revolution
revsur = surfaceset.add( RevolutionSurface(number, axe, wire) )
with
Open Surface of revolution
openrevsur = surfaceset.add( OpenRevolutionSurface(number, axe, wire, angle) )
with
Sphere
c = Sphere(number, centerPoint, radius, reversed)
with
number | user number (unique among surfaces and $\ge 1$) |
centerPoint | sphere center (Point previously defined in the Pointset !) |
radius | sphere radius |
reversed | unit normal convention - By default (reversed = false), the local covariant tangents are oriented in such a manner that the unit normal points inwards ! |
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)
with
number | user number (unique among surfaces and $\ge 1$) |
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 |





