...sv_point
The sv_ prefix is used throughout svLis whenever a name would otherwise be a common word like `point'. This is to allow other software to use such words for its types and classes without clashing with svLis.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...NAME="389"> 
The other type of geometric modeller is based on the boundary representation and called a boundary modeller (or B-rep modeller). Boundary modellers   will hardly get a mention here but, if you're interested, look at Mäntylä's or Chiyokura's book, which are both listed in the Bibliography.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...literature
They are also called constructive solid geometry   modellers. That inelegant phrase is usually abbreviated to CSG.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...solid
Or other piece of geometry--once again, see Chapter 3.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...0.2);
Notice that the C++ overloading rules obviate the necessity for the cylinder function to be called sv_cylinder.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...plane
I'll rather casually refer to the nothing as `air' . This may well annoy the more formal and puritanical, but at least it avoids confusion with other--ordinary--uses of the English word ``nothing''.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...z-axis
You can tell I'm an engineer first and a mathematician second; I like to know which way is up.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...NAME="577"> 
This idea originated at Three-Space Ltd in Cambridge, the company that wrote the ACIS boundary modeller, marketed (and trademarked) by Spatial Technology Inc.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...do
I was recently (1990) involved in a research project on Computer Algebra in Geometric Modelling. This project engendered a number of ideas that svLis incorporates. See Philip Milne's Technical Report listed in the Bibliography if you want more details.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...sv_integer
Occasionally, svLis uses short explicitly for small loop variables and such like.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...language
That is to say you can't redefine + and *, for example, so that a*b + c means a*(b + c); it will always mean (a*b) + c. That is because the * operator has a higher precedence than the + operator.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...it
As it would be, for example, by the parametric equation of a plane.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...NAME="PTOPRIM"> 
The only simpler one we could have would be a constant; if this were negative it would mean solid everywhere, if positive air everywhere, and if zero surface everywhere. The last of these is extremely daft, and I can't think of any use for it at all, but svLis will allow you to do it. The first and second are the universal and the empty set respectively. These are useful. I'll describe them on Page [*].
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...p3
In fact, they can be any continuous functions, so they can contain sines, exponentials or whatever, if you want. This is covered on Page [*].
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...point
  There's a svLis function to do this, of course. If a is a primitive, p a point, and d a real, then you can say d = a.value(p);
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...code
The function thin_cylinder(...) generates a thin cylinder as a set; it's just the same as sv_set(abs(p_cylinder(...))). There are also thin_ versions of the other simple shapes.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...hidden_prim
It is perfectly permissible to assign an undefined primitive, and indeed this is often a useful thing to be able to do.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...code
As you might imagine, the child_x functions return the operands of an operator (union in this case). The reason the if statement is needed is because the original a won't necessarily be the first child (see Page [*]).
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...svLis
There is no reason why you can't create higher-level structures such as arrays or linked-lists or trees of models if you want.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...interval
Mathematicians make a distinction between closed and open intervals; the former contain their end-points, the latter don't and are written (a, b).
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...possible
Actually, facet_decision(...) also contains an extra bit of code that stops the model boxes getting too long and thin because of this; this is to avoid numerical problems.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...leaf''
You may want to call svlis_error (see Page [*]) when this happens as well.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...tested
For instance, in a Monte Carlo procedure.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...intervals
Imagine two numbers, one in each interval; what is the smallest possible value that the maximum of the two could have, and what is the largest?
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...are
See the book Introduction to Computing with Geometry mentioned in the Bibliography for details and further references.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...all
Occasionally loop variables and logical values are explicitly declared short.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...sets
So you can intersect a cloud of points or a bunch of lines with a solid and just be left with the pieces inside, and similar sorts of tricks.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Adrian Bowyer
11/17/1997