Geometry Base¶
abstract
module provides base classes for parametric curves, surfaces and volumes contained in this library and
therefore, it provides an easy way to extend the library in the most proper way.
Inheritance Diagram¶
Abstract Curve¶

class
geomdl.abstract.
Curve
(**kwargs)¶ Bases:
geomdl.abstract.SplineGeometry
Abstract base class for defining spline curves.
Curve ABC is inherited from abc.ABCMeta class which is included in Python standard library by default. Due to differences between Python 2 and 3 on defining a metaclass, the compatibility module
six
is employed. Usingsix
to set metaclass allows users to use the abstract classes in a correct way.The abstract base classes in this module are implemented using a feature called Python Properties. This feature allows users to use some of the functions as if they are class fields. You can also consider properties as a pythonic way to set getters and setters. You will see “getter” and “setter” descriptions on the documentation of these properties.
The Curve ABC allows users to set the FindSpan function to be used in evaluations with
find_span_func
keyword as an input to the class constructor. NURBSPython includes a binary and a linear search variation of the FindSpan function in thehelpers
module. You may also implement and use your own FindSpan function. Please see thehelpers
module for details.Code segment below illustrates a possible implementation of Curve abstract base class:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
from geomdl import abstract class MyCurveClass(abstract.Curve): def __init__(self, **kwargs): super(MyCurveClass, self).__init__(**kwargs) # Add your constructor code here def evaluate(self, **kwargs): # Implement this function pass def evaluate_single(self, uv): # Implement this function pass def evaluate_list(self, uv_list): # Implement this function pass def derivatives(self, u, v, order, **kwargs): # Implement this function pass
The properties and functions defined in the abstract base class will be automatically available in the subclasses.
Keyword Arguments:
id
: object ID (as integer)precision
: number of decimal places to round to. Default: 18normalize_kv
: if True, knot vector(s) will be normalized to [0,1] domain. Default: Truefind_span_func
: default knot span finding algorithm. Default:helpers.find_span_linear()

bbox
¶ Bounding box.
Evaluates the bounding box and returns the minimum and maximum coordinates.
Please refer to the wiki for details on using this class member.
Getter: Gets the bounding box Type: tuple

cpsize
¶ Number of control points in all parametric directions.
Note
This is an expert property for getting and setting control point size(s) of the geometry.
Please refer to the wiki for details on using this class member.
Getter: Gets the number of control points Setter: Sets the number of control points Type: list

ctrlpts
¶ Control points.
Please refer to the wiki for details on using this class member.
Getter: Gets the control points Setter: Sets the control points Type: list

ctrlpts_size
¶ Total number of control points.
Getter: Gets the total number of control points Type: int

data
¶ Returns a dict which contains the geometry data.
Please refer to the wiki for details on using this class member.

degree
¶ Degree.
Please refer to the wiki for details on using this class member.
Getter: Gets the degree Setter: Sets the degree Type: int

delta
¶ Evaluation delta.
Evaluation delta corresponds to the step size while
evaluate
function iterates on the knot vector to generate curve points. Decreasing step size results in generation of more curve points. Therefore; smaller the delta value, smoother the curve.The following figure illustrates the working principles of the delta property:
Please refer to the wiki for details on using this class member.
Getter: Gets the delta value Setter: Sets the delta value Type: float

derivatives
(u, order, **kwargs)¶ Evaluates the derivatives of the curve at parameter u.
Note
This is an abstract method and it must be implemented in the subclass.
Parameters:  u (float) – parameter (u)
 order (int) – derivative order

dimension
¶ Spatial dimension.
Spatial dimension will be automatically estimated from the first element of the control points array.
Please refer to the wiki for details on using this class member.
Getter: Gets the spatial dimension, e.g. 2D, 3D, etc. Type: int

domain
¶ Domain.
Domain is determined using the knot vector(s).
Getter: Gets the domain

evalpts
¶ Evaluated points.
Please refer to the wiki for details on using this class member.
Getter: Gets the coordinates of the evaluated points Type: list

evaluate
(**kwargs)¶ Evaluates the curve.
Note
This is an abstract method and it must be implemented in the subclass.

evaluate_list
(param_list)¶ Evaluates the curve for an input range of parameters.
Note
This is an abstract method and it must be implemented in the subclass.
Parameters: param_list – array of parameters

evaluate_single
(param)¶ Evaluates the curve at the given parameter.
Note
This is an abstract method and it must be implemented in the subclass.
Parameters: param – parameter (u)

evaluator
¶ Evaluator instance.
Evaluators allow users to use different algorithms for BSpline and NURBS evaluations. Please see the documentation on
Evaluator
classes.Please refer to the wiki for details on using this class member.
Getter: Gets the current Evaluator instance Setter: Sets the Evaluator instance Type: evaluators.AbstractEvaluator

id
¶ Object ID (as an integer).
Please refer to the wiki for details on using this class member.
Getter: Gets the object ID Setter: Sets the object ID Type: int

knotvector
¶ Knot vector.
The knot vector will be normalized to [0, 1] domain if the class is initialized with
normalize_kv=True
argument.Please refer to the wiki for details on using this class member.
Getter: Gets the knot vector Setter: Sets the knot vector Type: list

name
¶ Object name (as a string)
Please refer to the wiki for details on using this class member.
Getter: Gets the object name Setter: Sets the object name Type: str

opt
¶ Dictionary for storing custom data in the current geometry object.
opt
is a wrapper to a dict in key => value format, where key is string, value is any Python object. You can useopt
property to store custom data inside the geometry object. For instance:geom.opt = ["face_id", 4] # creates "face_id" key and sets its value to an integer geom.opt = ["contents", "data values"] # creates "face_id" key and sets its value to a string print(geom.opt) # will print: {'face_id': 4, 'contents': 'data values'} del geom.opt # deletes the contents of the hash map print(geom.opt) # will print: {} geom.opt = ["body_id", 1] # creates "body_id" key and sets its value to 1 geom.opt = ["body_id", 12] # changes the value of "body_id" to 12 print(geom.opt) # will print: {'body_id': 12} geom.opt = ["body_id", None] # deletes "body_id" print(geom.opt) # will print: {}
Please refer to the wiki for details on using this class member.
Getter: Gets the dict Setter: Adds key and value pair to the dict Deleter: Deletes the contents of the dict

opt_get
(value)¶ Safely query for the value from the
opt
property.Parameters: value (str) – a key in the opt
propertyReturns: the corresponding value, if the key exists. None
, otherwise.

order
¶ Order.
Defined as
order = degree + 1
Please refer to the wiki for details on using this class member.
Getter: Gets the order Setter: Sets the order Type: int

pdimension
¶ Parametric dimension.
Please refer to the wiki for details on using this class member.
Getter: Gets the parametric dimension Type: int

range
¶ Domain range.
Getter: Gets the range

rational
¶ Defines the rational and nonrational Bspline shapes.
Rational shapes use homogeneous coordinates which includes a weight alongside with the Cartesian coordinates. Rational Bsplines are also named as NURBS (Nonuniform rational basis spline) and nonrational Bsplines are sometimes named as NUBS (Nonuniform basis spline) or directly as Bsplines.
Please refer to the wiki for details on using this class member.
Getter: Returns True is the Bspline object is rational (NURBS) Type: bool

render
(**kwargs)¶ Renders the curve using the visualization component
The visualization component must be set using
vis
property before calling this method. Keyword Arguments:
cpcolor
: sets the color of the control points polygonevalcolor
: sets the color of the curvebboxcolor
: sets the color of the bounding boxfilename
: saves the plot with the input nameplot
: controls plot window visibility. Default: Trueanimate
: activates animation (if supported). Default: Falseextras
: adds line plots to the figure. Default: None
plot
argument is useful when you would like to work on the command line without any window context. Ifplot
flag is False, this method saves the plot as an image file (.png file where possible) and disables plot window popping out. If you don’t provide a file name, the name of the image file will be pulled from the configuration class.extras
argument can be used to add extra line plots to the figure. This argument expects a list of dicts in the format described below:1 2 3 4 5 6 7 8 9 10 11 12 13 14
[ dict( # line plot 1 points=[[1, 2, 3], [4, 5, 6]], # list of points name="My line Plot 1", # name displayed on the legend color="red", # color of the line plot size=6.5 # size of the line plot ), dict( # line plot 2 points=[[7, 8, 9], [10, 11, 12]], # list of points name="My line Plot 2", # name displayed on the legend color="navy", # color of the line plot size=12.5 # size of the line plot ) ]
Returns: the figure object

reset
(**kwargs)¶ Resets control points and/or evaluated points.
 Keyword Arguments:
evalpts
: if True, then resets evaluated pointsctrlpts
if True, then resets control points

reverse
()¶ Reverses the curve

sample_size
¶ Sample size.
Sample size defines the number of evaluated points to generate. It also sets the
delta
property.The following figure illustrates the working principles of sample size property:
Please refer to the wiki for details on using this class member.
Getter: Gets sample size Setter: Sets sample size Type: int

set_ctrlpts
(ctrlpts, *args, **kwargs)¶ Sets control points and checks if the data is consistent.
This method is designed to provide a consistent way to set control points whether they are weighted or not. It directly sets the control points member of the class, and therefore it doesn’t return any values. The input will be an array of coordinates. If you are working in the 3dimensional space, then your coordinates will be an array of 3 elements representing (x, y, z) coordinates.
Parameters: ctrlpts (list) – input control points as a list of coordinates

type
¶ Geometry type
Please refer to the wiki for details on using this class member.
Getter: Gets the geometry type Type: str
Abstract Surface¶

class
geomdl.abstract.
Surface
(**kwargs)¶ Bases:
geomdl.abstract.SplineGeometry
Abstract base class for defining spline surfaces.
Surface ABC is inherited from abc.ABCMeta class which is included in Python standard library by default. Due to differences between Python 2 and 3 on defining a metaclass, the compatibility module
six
is employed. Usingsix
to set metaclass allows users to use the abstract classes in a correct way.The abstract base classes in this module are implemented using a feature called Python Properties. This feature allows users to use some of the functions as if they are class fields. You can also consider properties as a pythonic way to set getters and setters. You will see “getter” and “setter” descriptions on the documentation of these properties.
The Surface ABC allows users to set the FindSpan function to be used in evaluations with
find_span_func
keyword as an input to the class constructor. NURBSPython includes a binary and a linear search variation of the FindSpan function in thehelpers
module. You may also implement and use your own FindSpan function. Please see thehelpers
module for details.Code segment below illustrates a possible implementation of Surface abstract base class:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
from geomdl import abstract class MySurfaceClass(abstract.Surface): def __init__(self, **kwargs): super(MySurfaceClass, self).__init__(**kwargs) # Add your constructor code here def evaluate(self, **kwargs): # Implement this function pass def evaluate_single(self, uv): # Implement this function pass def evaluate_list(self, uv_list): # Implement this function pass def derivatives(self, u, v, order, **kwargs): # Implement this function pass
The properties and functions defined in the abstract base class will be automatically available in the subclasses.
Keyword Arguments:
id
: object ID (as integer)precision
: number of decimal places to round to. Default: 18normalize_kv
: if True, knot vector(s) will be normalized to [0,1] domain. Default: Truefind_span_func
: default knot span finding algorithm. Default:helpers.find_span_linear()

add_trim
(trim)¶ Adds a trim to the surface.
A trim is a 2dimensional curve defined on the parametric domain of the surface. Therefore, xcoordinate of the trimming curve corresponds to u parametric direction of the surfaceand ycoordinate of the trimming curve corresponds to v parametric direction of the surface.
trims
uses this method to add trims to the surface.Parameters: trim (abstract.Geometry) – surface trimming curve

bbox
¶ Bounding box.
Evaluates the bounding box and returns the minimum and maximum coordinates.
Please refer to the wiki for details on using this class member.
Getter: Gets the bounding box Type: tuple

cpsize
¶ Number of control points in all parametric directions.
Note
This is an expert property for getting and setting control point size(s) of the geometry.
Please refer to the wiki for details on using this class member.
Getter: Gets the number of control points Setter: Sets the number of control points Type: list

ctrlpts
¶ 1dimensional array of control points.
Note
The v index varies first. That is, a row of v control points for the first u value is found first. Then, the row of v control points for the next u value.
Please refer to the wiki for details on using this class member.
Getter: Gets the control points Setter: Sets the control points Type: list

ctrlpts_size
¶ Total number of control points.
Getter: Gets the total number of control points Type: int

ctrlpts_size_u
¶ Number of control points for the udirection.
Please refer to the wiki for details on using this class member.
Getter: Gets number of control points for the udirection Setter: Sets number of control points for the udirection

ctrlpts_size_v
¶ Number of control points for the vdirection.
Please refer to the wiki for details on using this class member.
Getter: Gets number of control points on the vdirection Setter: Sets number of control points on the vdirection

data
¶ Returns a dict which contains the geometry data.
Please refer to the wiki for details on using this class member.

degree
¶ Degree for u and vdirections
Getter: Gets the degree Setter: Sets the degree Type: list

degree_u
¶ Degree for the udirection.
Please refer to the wiki for details on using this class member.
Getter: Gets degree for the udirection Setter: Sets degree for the udirection Type: int

degree_v
¶ Degree for the vdirection.
Please refer to the wiki for details on using this class member.
Getter: Gets degree for the vdirection Setter: Sets degree for the vdirection Type: int

delta
¶ Evaluation delta for both u and vdirections.
Evaluation delta corresponds to the step size while
evaluate()
function iterates on the knot vector to generate surface points. Decreasing step size results in generation of more surface points. Therefore; smaller the delta value, smoother the surface.Please note that
delta
andsample_size
properties correspond to the same variable with different descriptions. Therefore, settingdelta
will also setsample_size
.The following figure illustrates the working principles of the delta property:
Please refer to the wiki for details on using this class member.
Getter: Gets evaluation delta as a tuple of values corresponding to u and vdirections Setter: Sets evaluation delta for both u and vdirections Type: float

delta_u
¶ Evaluation delta for the udirection.
Evaluation delta corresponds to the step size while
evaluate()
function iterates on the knot vector to generate surface points. Decreasing step size results in generation of more surface points. Therefore; smaller the delta value, smoother the surface.Please note that
delta_u
andsample_size_u
properties correspond to the same variable with different descriptions. Therefore, settingdelta_u
will also setsample_size_u
.Please refer to the wiki for details on using this class member.
Getter: Gets evaluation delta for the udirection Setter: Sets evaluation delta for the udirection Type: float

delta_v
¶ Evaluation delta for the vdirection.
Evaluation delta corresponds to the step size while
evaluate()
function iterates on the knot vector to generate surface points. Decreasing step size results in generation of more surface points. Therefore; smaller the delta value, smoother the surface.Please note that
delta_v
andsample_size_v
properties correspond to the same variable with different descriptions. Therefore, settingdelta_v
will also setsample_size_v
.Please refer to the wiki for details on using this class member.
Getter: Gets evaluation delta for the vdirection Setter: Sets evaluation delta for the vdirection Type: float

derivatives
(u, v, order, **kwargs)¶ Evaluates the derivatives of the parametric surface at parameter (u, v).
Note
This is an abstract method and it must be implemented in the subclass.
Parameters:  u (float) – parameter on the udirection
 v (float) – parameter on the vdirection
 order (int) – derivative order

dimension
¶ Spatial dimension.
Spatial dimension will be automatically estimated from the first element of the control points array.
Please refer to the wiki for details on using this class member.
Getter: Gets the spatial dimension, e.g. 2D, 3D, etc. Type: int

domain
¶ Domain.
Domain is determined using the knot vector(s).
Getter: Gets the domain

evalpts
¶ Evaluated points.
Please refer to the wiki for details on using this class member.
Getter: Gets the coordinates of the evaluated points Type: list

evaluate
(**kwargs)¶ Evaluates the parametric surface.
Note
This is an abstract method and it must be implemented in the subclass.

evaluate_list
(param_list)¶ Evaluates the parametric surface for an input range of (u, v) parameters.
Note
This is an abstract method and it must be implemented in the subclass.
Parameters: param_list – array of parameters (u, v)

evaluate_single
(param)¶ Evaluates the parametric surface at the given (u, v) parameter.
Note
This is an abstract method and it must be implemented in the subclass.
Parameters: param – parameter (u, v)

evaluator
¶ Evaluator instance.
Evaluators allow users to use different algorithms for BSpline and NURBS evaluations. Please see the documentation on
Evaluator
classes.Please refer to the wiki for details on using this class member.
Getter: Gets the current Evaluator instance Setter: Sets the Evaluator instance Type: evaluators.AbstractEvaluator

faces
¶ Faces (triangles, quads, etc.) generated by the tessellation operation.
If the tessellation component is set to None, the result will be an empty list.
Getter: Gets the faces

id
¶ Object ID (as an integer).
Please refer to the wiki for details on using this class member.
Getter: Gets the object ID Setter: Sets the object ID Type: int

knotvector
¶ Knot vector for u and vdirections
Getter: Gets the knot vector Setter: Sets the knot vector Type: list

knotvector_u
¶ Knot vector for the udirection.
The knot vector will be normalized to [0, 1] domain if the class is initialized with
normalize_kv=True
argument.Please refer to the wiki for details on using this class member.
Getter: Gets knot vector for the udirection Setter: Sets knot vector for the udirection Type: list

knotvector_v
¶ Knot vector for the vdirection.
The knot vector will be normalized to [0, 1] domain if the class is initialized with
normalize_kv=True
argument.Please refer to the wiki for details on using this class member.
Getter: Gets knot vector for the vdirection Setter: Sets knot vector for the vdirection Type: list

name
¶ Object name (as a string)
Please refer to the wiki for details on using this class member.
Getter: Gets the object name Setter: Sets the object name Type: str

opt
¶ Dictionary for storing custom data in the current geometry object.
opt
is a wrapper to a dict in key => value format, where key is string, value is any Python object. You can useopt
property to store custom data inside the geometry object. For instance:geom.opt = ["face_id", 4] # creates "face_id" key and sets its value to an integer geom.opt = ["contents", "data values"] # creates "face_id" key and sets its value to a string print(geom.opt) # will print: {'face_id': 4, 'contents': 'data values'} del geom.opt # deletes the contents of the hash map print(geom.opt) # will print: {} geom.opt = ["body_id", 1] # creates "body_id" key and sets its value to 1 geom.opt = ["body_id", 12] # changes the value of "body_id" to 12 print(geom.opt) # will print: {'body_id': 12} geom.opt = ["body_id", None] # deletes "body_id" print(geom.opt) # will print: {}
Please refer to the wiki for details on using this class member.
Getter: Gets the dict Setter: Adds key and value pair to the dict Deleter: Deletes the contents of the dict

opt_get
(value)¶ Safely query for the value from the
opt
property.Parameters: value (str) – a key in the opt
propertyReturns: the corresponding value, if the key exists. None
, otherwise.

order_u
¶ Order for the udirection.
Defined as
order = degree + 1
Please refer to the wiki for details on using this class member.
Getter: Gets order for the udirection Setter: Sets order for the udirection Type: int

order_v
¶ Order for the vdirection.
Defined as
order = degree + 1
Please refer to the wiki for details on using this class member.
Getter: Gets surface order for the vdirection Setter: Sets surface order for the vdirection Type: int

pdimension
¶ Parametric dimension.
Please refer to the wiki for details on using this class member.
Getter: Gets the parametric dimension Type: int

range
¶ Domain range.
Getter: Gets the range

rational
¶ Defines the rational and nonrational Bspline shapes.
Rational shapes use homogeneous coordinates which includes a weight alongside with the Cartesian coordinates. Rational Bsplines are also named as NURBS (Nonuniform rational basis spline) and nonrational Bsplines are sometimes named as NUBS (Nonuniform basis spline) or directly as Bsplines.
Please refer to the wiki for details on using this class member.
Getter: Returns True is the Bspline object is rational (NURBS) Type: bool

render
(**kwargs)¶ Renders the surface using the visualization component.
The visualization component must be set using
vis
property before calling this method. Keyword Arguments:
cpcolor
: sets the color of the control points gridevalcolor
: sets the color of the surfacetrimcolor
: sets the color of the trim curvesfilename
: saves the plot with the input nameplot
: controls plot window visibility. Default: Trueanimate
: activates animation (if supported). Default: Falseextras
: adds line plots to the figure. Default: Nonecolormap
: sets the colormap of the surface
The
plot
argument is useful when you would like to work on the command line without any window context. Ifplot
flag is False, this method saves the plot as an image file (.png file where possible) and disables plot window popping out. If you don’t provide a file name, the name of the image file will be pulled from the configuration class.extras
argument can be used to add extra line plots to the figure. This argument expects a list of dicts in the format described below:1 2 3 4 5 6 7 8 9 10 11 12 13 14
[ dict( # line plot 1 points=[[1, 2, 3], [4, 5, 6]], # list of points name="My line Plot 1", # name displayed on the legend color="red", # color of the line plot size=6.5 # size of the line plot ), dict( # line plot 2 points=[[7, 8, 9], [10, 11, 12]], # list of points name="My line Plot 2", # name displayed on the legend color="navy", # color of the line plot size=12.5 # size of the line plot ) ]
Please note that
colormap
argument can only work with visualization classes that support colormaps. As an example, please seeVisMPL.VisSurfTriangle()
class documentation. This method expects a single colormap input.Returns: the figure object

reset
(**kwargs)¶ Resets control points and/or evaluated points.
 Keyword Arguments:
evalpts
: if True, then resets evaluated pointsctrlpts
if True, then resets control points

sample_size
¶ Sample size for both u and vdirections.
Sample size defines the number of surface points to generate. It also sets the
delta
property.The following figure illustrates the working principles of sample size property:
Please refer to the wiki for details on using this class member.
Getter: Gets sample size as a tuple of values corresponding to u and vdirections Setter: Sets sample size for both u and vdirections Type: int

sample_size_u
¶ Sample size for the udirection.
Sample size defines the number of surface points to generate. It also sets the
delta_u
property.Please refer to the wiki for details on using this class member.
Getter: Gets sample size for the udirection Setter: Sets sample size for the udirection Type: int

sample_size_v
¶ Sample size for the vdirection.
Sample size defines the number of surface points to generate. It also sets the
delta_v
property.Please refer to the wiki for details on using this class member.
Getter: Gets sample size for the vdirection Setter: Sets sample size for the vdirection Type: int

set_ctrlpts
(ctrlpts, *args, **kwargs)¶ Sets the control points and checks if the data is consistent.
This method is designed to provide a consistent way to set control points whether they are weighted or not. It directly sets the control points member of the class, and therefore it doesn’t return any values. The input will be an array of coordinates. If you are working in the 3dimensional space, then your coordinates will be an array of 3 elements representing (x, y, z) coordinates.
Note
The v index varies first. That is, a row of v control points for the first u value is found first. Then, the row of v control points for the next u value.
Parameters:  ctrlpts (list) – input control points as a list of coordinates
 args (tuple[int, int]) – number of control points corresponding to each parametric dimension

tessellate
(**kwargs)¶ Tessellates the surface.
Keyword arguments are directly passed to the tessellation component.

tessellator
¶ Tessellation component.
Please refer to the wiki for details on using this class member.
Getter: Gets the tessellation component Setter: Sets the tessellation component

trims
¶ Curves for trimming the surface.
Surface trims are 2dimensional curves which are introduced on the parametric space of the surfaces. Trim curves can be a spline curve, an analytic curve or a 2dimensional freeform shape. To visualize the trimmed surfaces, you need to use a tessellator that supports trimming. The following code snippet illustrates changing the default surface tessellator to the trimmed surface tessellator,
tessellate.TrimTessellate
.1 2 3 4
from geomdl import tessellate # Assuming that "surf" variable stores the surface instance surf.tessellator = tessellate.TrimTessellate()
In addition, using trims initialization argument of the visualization classes, trim curves can be visualized together with their underlying surfaces. Please refer to the visualization configuration class initialization arguments for more details.
Please refer to the wiki for details on using this class member.
Getter: Gets the array of trim curves Setter: Sets the array of trim curves

type
¶ Geometry type
Please refer to the wiki for details on using this class member.
Getter: Gets the geometry type Type: str

vertices
¶ Vertices generated by the tessellation operation.
If the tessellation component is set to None, the result will be an empty list.
Getter: Gets the vertices
Abstract Volume¶

class
geomdl.abstract.
Volume
(**kwargs)¶ Bases:
geomdl.abstract.SplineGeometry
Abstract base class for defining spline volumes.
Volume ABC is inherited from abc.ABCMeta class which is included in Python standard library by default. Due to differences between Python 2 and 3 on defining a metaclass, the compatibility module
six
is employed. Usingsix
to set metaclass allows users to use the abstract classes in a correct way.The abstract base classes in this module are implemented using a feature called Python Properties. This feature allows users to use some of the functions as if they are class fields. You can also consider properties as a pythonic way to set getters and setters. You will see “getter” and “setter” descriptions on the documentation of these properties.
The Volume ABC allows users to set the FindSpan function to be used in evaluations with
find_span_func
keyword as an input to the class constructor. NURBSPython includes a binary and a linear search variation of the FindSpan function in thehelpers
module. You may also implement and use your own FindSpan function. Please see thehelpers
module for details.Code segment below illustrates a possible implementation of Volume abstract base class:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
from geomdl import abstract class MyVolumeClass(abstract.Volume): def __init__(self, **kwargs): super(MyVolumeClass, self).__init__(**kwargs) # Add your constructor code here def evaluate(self, **kwargs): # Implement this function pass def evaluate_single(self, uvw): # Implement this function pass def evaluate_list(self, uvw_list): # Implement this function pass
The properties and functions defined in the abstract base class will be automatically available in the subclasses.
Keyword Arguments:
id
: object ID (as integer)precision
: number of decimal places to round to. Default: 18normalize_kv
: if True, knot vector(s) will be normalized to [0,1] domain. Default: Truefind_span_func
: default knot span finding algorithm. Default:helpers.find_span_linear()

add_trim
(trim)¶ Adds a trim to the volume.
trims
uses this method to add trims to the volume.Parameters: trim (abstract.Surface) – trimming surface

bbox
¶ Bounding box.
Evaluates the bounding box and returns the minimum and maximum coordinates.
Please refer to the wiki for details on using this class member.
Getter: Gets the bounding box Type: tuple

cpsize
¶ Number of control points in all parametric directions.
Note
This is an expert property for getting and setting control point size(s) of the geometry.
Please refer to the wiki for details on using this class member.
Getter: Gets the number of control points Setter: Sets the number of control points Type: list

ctrlpts
¶ 1dimensional array of control points.
Please refer to the wiki for details on using this class member.
Getter: Gets the control points Setter: Sets the control points Type: list

ctrlpts_size
¶ Total number of control points.
Getter: Gets the total number of control points Type: int

ctrlpts_size_u
¶ Number of control points for the udirection.
Please refer to the wiki for details on using this class member.
Getter: Gets number of control points for the udirection Setter: Sets number of control points for the udirection

ctrlpts_size_v
¶ Number of control points for the vdirection.
Please refer to the wiki for details on using this class member.
Getter: Gets number of control points for the vdirection Setter: Sets number of control points for the vdirection

ctrlpts_size_w
¶ Number of control points for the wdirection.
Please refer to the wiki for details on using this class member.
Getter: Gets number of control points for the wdirection Setter: Sets number of control points for the wdirection

data
¶ Returns a dict which contains the geometry data.
Please refer to the wiki for details on using this class member.

degree
¶ Degree for u, v and wdirections
Getter: Gets the degree Setter: Sets the degree Type: list

degree_u
¶ Degree for the udirection.
Please refer to the wiki for details on using this class member.
Getter: Gets degree for the udirection Setter: Sets degree for the udirection Type: int

degree_v
¶ Degree for the vdirection.
Please refer to the wiki for details on using this class member.
Getter: Gets degree for the vdirection Setter: Sets degree for the vdirection Type: int

degree_w
¶ Degree for the wdirection.
Please refer to the wiki for details on using this class member.
Getter: Gets degree for the wdirection Setter: Sets degree for the wdirection Type: int

delta
¶ Evaluation delta for u, v and wdirections.
Evaluation delta corresponds to the step size while
evaluate()
function iterates on the knot vector to generate surface points. Decreasing step size results in generation of more surface points. Therefore; smaller the delta value, smoother the surface.Please note that
delta
andsample_size
properties correspond to the same variable with different descriptions. Therefore, settingdelta
will also setsample_size
.The following figure illustrates the working principles of the delta property:
Please refer to the wiki for details on using this class member.
Getter: Gets evaluation delta as a tuple of values corresponding to u, v and wdirections Setter: Sets evaluation delta for u, v and wdirections Type: float

delta_u
¶ Evaluation delta for the udirection.
Evaluation delta corresponds to the step size while
evaluate()
function iterates on the knot vector to generate surface points. Decreasing step size results in generation of more surface points. Therefore; smaller the delta value, smoother the surface.Please note that
delta_u
andsample_size_u
properties correspond to the same variable with different descriptions. Therefore, settingdelta_u
will also setsample_size_u
.Please refer to the wiki for details on using this class member.
Getter: Gets evaluation delta for the udirection Setter: Sets evaluation delta for the udirection Type: float

delta_v
¶ Evaluation delta for the vdirection.
Evaluation delta corresponds to the step size while
evaluate()
function iterates on the knot vector to generate surface points. Decreasing step size results in generation of more surface points. Therefore; smaller the delta value, smoother the surface.Please note that
delta_v
andsample_size_v
properties correspond to the same variable with different descriptions. Therefore, settingdelta_v
will also setsample_size_v
.Please refer to the wiki for details on using this class member.
Getter: Gets evaluation delta for the vdirection Setter: Sets evaluation delta for the vdirection Type: float

delta_w
¶ Evaluation delta for the wdirection.
Evaluation delta corresponds to the step size while
evaluate()
function iterates on the knot vector to generate surface points. Decreasing step size results in generation of more surface points. Therefore; smaller the delta value, smoother the surface.Please note that
delta_w
andsample_size_w
properties correspond to the same variable with different descriptions. Therefore, settingdelta_w
will also setsample_size_w
.Please refer to the wiki for details on using this class member.
Getter: Gets evaluation delta for the wdirection Setter: Sets evaluation delta for the wdirection Type: float

dimension
¶ Spatial dimension.
Spatial dimension will be automatically estimated from the first element of the control points array.
Please refer to the wiki for details on using this class member.
Getter: Gets the spatial dimension, e.g. 2D, 3D, etc. Type: int

domain
¶ Domain.
Domain is determined using the knot vector(s).
Getter: Gets the domain

evalpts
¶ Evaluated points.
Please refer to the wiki for details on using this class member.
Getter: Gets the coordinates of the evaluated points Type: list

evaluate
(**kwargs)¶ Evaluates the parametric volume.
Note
This is an abstract method and it must be implemented in the subclass.

evaluate_list
(param_list)¶ Evaluates the parametric volume for an input range of (u, v, w) parameter pairs.
Note
This is an abstract method and it must be implemented in the subclass.
Parameters: param_list – array of parameter pairs (u, v, w)

evaluate_single
(param)¶ Evaluates the parametric surface at the given (u, v, w) parameter.
Note
This is an abstract method and it must be implemented in the subclass.
Parameters: param – parameter pair (u, v, w)

evaluator
¶ Evaluator instance.
Evaluators allow users to use different algorithms for BSpline and NURBS evaluations. Please see the documentation on
Evaluator
classes.Please refer to the wiki for details on using this class member.
Getter: Gets the current Evaluator instance Setter: Sets the Evaluator instance Type: evaluators.AbstractEvaluator

id
¶ Object ID (as an integer).
Please refer to the wiki for details on using this class member.
Getter: Gets the object ID Setter: Sets the object ID Type: int

knotvector
¶ Knot vector for u, v and wdirections
Getter: Gets the knot vector Setter: Sets the knot vector Type: list

knotvector_u
¶ Knot vector for the udirection.
The knot vector will be normalized to [0, 1] domain if the class is initialized with
normalize_kv=True
argument.Please refer to the wiki for details on using this class member.
Getter: Gets knot vector for the udirection Setter: Sets knot vector for the udirection Type: list

knotvector_v
¶ Knot vector for the vdirection.
The knot vector will be normalized to [0, 1] domain if the class is initialized with
normalize_kv=True
argument.Please refer to the wiki for details on using this class member.
Getter: Gets knot vector for the vdirection Setter: Sets knot vector for the vdirection Type: list

knotvector_w
¶ Knot vector for the wdirection.
The knot vector will be normalized to [0, 1] domain if the class is initialized with
normalize_kv=True
argument.Please refer to the wiki for details on using this class member.
Getter: Gets knot vector for the wdirection Setter: Sets knot vector for the wdirection Type: list

name
¶ Object name (as a string)
Please refer to the wiki for details on using this class member.
Getter: Gets the object name Setter: Sets the object name Type: str

opt
¶ Dictionary for storing custom data in the current geometry object.
opt
is a wrapper to a dict in key => value format, where key is string, value is any Python object. You can useopt
property to store custom data inside the geometry object. For instance:geom.opt = ["face_id", 4] # creates "face_id" key and sets its value to an integer geom.opt = ["contents", "data values"] # creates "face_id" key and sets its value to a string print(geom.opt) # will print: {'face_id': 4, 'contents': 'data values'} del geom.opt # deletes the contents of the hash map print(geom.opt) # will print: {} geom.opt = ["body_id", 1] # creates "body_id" key and sets its value to 1 geom.opt = ["body_id", 12] # changes the value of "body_id" to 12 print(geom.opt) # will print: {'body_id': 12} geom.opt = ["body_id", None] # deletes "body_id" print(geom.opt) # will print: {}
Please refer to the wiki for details on using this class member.
Getter: Gets the dict Setter: Adds key and value pair to the dict Deleter: Deletes the contents of the dict

opt_get
(value)¶ Safely query for the value from the
opt
property.Parameters: value (str) – a key in the opt
propertyReturns: the corresponding value, if the key exists. None
, otherwise.

order_u
¶ Order for the udirection.
Defined as
order = degree + 1
Please refer to the wiki for details on using this class member.
Getter: Gets the surface order for udirection Setter: Sets the surface order for udirection Type: int

order_v
¶ Order for the vdirection.
Defined as
order = degree + 1
Please refer to the wiki for details on using this class member.
Getter: Gets the surface order for vdirection Setter: Sets the surface order for vdirection Type: int

order_w
¶ Order for the wdirection.
Defined as
order = degree + 1
Please refer to the wiki for details on using this class member.
Getter: Gets the surface order for vdirection Setter: Sets the surface order for vdirection Type: int

pdimension
¶ Parametric dimension.
Please refer to the wiki for details on using this class member.
Getter: Gets the parametric dimension Type: int

range
¶ Domain range.
Getter: Gets the range

rational
¶ Defines the rational and nonrational Bspline shapes.
Rational shapes use homogeneous coordinates which includes a weight alongside with the Cartesian coordinates. Rational Bsplines are also named as NURBS (Nonuniform rational basis spline) and nonrational Bsplines are sometimes named as NUBS (Nonuniform basis spline) or directly as Bsplines.
Please refer to the wiki for details on using this class member.
Getter: Returns True is the Bspline object is rational (NURBS) Type: bool

render
(**kwargs)¶ Renders the volume using the visualization component.
The visualization component must be set using
vis
property before calling this method. Keyword Arguments:
cpcolor
: sets the color of the control pointsevalcolor
: sets the color of the volumefilename
: saves the plot with the input nameplot
: controls plot window visibility. Default: Trueanimate
: activates animation (if supported). Default: Falsegrid_size
: grid size for voxelization. Default: (8, 8, 8)use_cubes
: use cube voxels instead of cuboid ones. Default: Falsenum_procs
: number of concurrent processes for voxelization. Default: 1
The
plot
argument is useful when you would like to work on the command line without any window context. Ifplot
flag is False, this method saves the plot as an image file (.png file where possible) and disables plot window popping out. If you don’t provide a file name, the name of the image file will be pulled from the configuration class.extras
argument can be used to add extra line plots to the figure. This argument expects a list of dicts in the format described below:1 2 3 4 5 6 7 8 9 10 11 12 13 14
[ dict( # line plot 1 points=[[1, 2, 3], [4, 5, 6]], # list of points name="My line Plot 1", # name displayed on the legend color="red", # color of the line plot size=6.5 # size of the line plot ), dict( # line plot 2 points=[[7, 8, 9], [10, 11, 12]], # list of points name="My line Plot 2", # name displayed on the legend color="navy", # color of the line plot size=12.5 # size of the line plot ) ]
Returns: the figure object

reset
(**kwargs)¶ Resets control points and/or evaluated points.
 Keyword Arguments:
evalpts
: if True, then resets evaluated pointsctrlpts
if True, then resets control points

sample_size
¶ Sample size for both u and vdirections.
Sample size defines the number of surface points to generate. It also sets the
delta
property.The following figure illustrates the working principles of sample size property:
Please refer to the wiki for details on using this class member.
Getter: Gets sample size as a tuple of values corresponding to u, v and wdirections Setter: Sets sample size value for both u, v and wdirections Type: int

sample_size_u
¶ Sample size for the udirection.
Sample size defines the number of evaluated points to generate. It also sets the
delta_u
property.Please refer to the wiki for details on using this class member.
Getter: Gets sample size for the udirection Setter: Sets sample size for the udirection Type: int

sample_size_v
¶ Sample size for the vdirection.
Sample size defines the number of evaluated points to generate. It also sets the
delta_v
property.Please refer to the wiki for details on using this class member.
Getter: Gets sample size for the vdirection Setter: Sets sample size for the vdirection Type: int

sample_size_w
¶ Sample size for the wdirection.
Sample size defines the number of evaluated points to generate. It also sets the
delta_w
property.Please refer to the wiki for details on using this class member.
Getter: Gets sample size for the wdirection Setter: Sets sample size for the wdirection Type: int

set_ctrlpts
(ctrlpts, *args, **kwargs)¶ Sets the control points and checks if the data is consistent.
This method is designed to provide a consistent way to set control points whether they are weighted or not. It directly sets the control points member of the class, and therefore it doesn’t return any values. The input will be an array of coordinates. If you are working in the 3dimensional space, then your coordinates will be an array of 3 elements representing (x, y, z) coordinates.
Parameters:  ctrlpts (list) – input control points as a list of coordinates
 args (tuple[int, int, int]) – number of control points corresponding to each parametric dimension

trims
¶ Trimming surfaces.
Please refer to the wiki for details on using this class member.
Getter: Gets the array of trim surfaces Setter: Sets the array of trim surfaces

type
¶ Geometry type
Please refer to the wiki for details on using this class member.
Getter: Gets the geometry type Type: str
Low Level API¶
The following classes provide the low level API for the geometry abstract base.
Geometry
abstract base class can be used for implementation of any geometry object, whereas
SplineGeometry
abstract base class is designed specifically for spline geometries, including basis splines.

class
geomdl.abstract.
GeomdlBase
(**kwargs)¶ Bases:
object
Abstract base class for defining geomdl objects.
This class provides the following properties:
Keyword Arguments:
id
: object ID (as integer)precision
: number of decimal places to round to. Default: 18

dimension
¶ Spatial dimension.
Please refer to the wiki for details on using this class member.
Getter: Gets the spatial dimension, e.g. 2D, 3D, etc. Type: int

id
¶ Object ID (as an integer).
Please refer to the wiki for details on using this class member.
Getter: Gets the object ID Setter: Sets the object ID Type: int

name
¶ Object name (as a string)
Please refer to the wiki for details on using this class member.
Getter: Gets the object name Setter: Sets the object name Type: str

opt
¶ Dictionary for storing custom data in the current geometry object.
opt
is a wrapper to a dict in key => value format, where key is string, value is any Python object. You can useopt
property to store custom data inside the geometry object. For instance:geom.opt = ["face_id", 4] # creates "face_id" key and sets its value to an integer geom.opt = ["contents", "data values"] # creates "face_id" key and sets its value to a string print(geom.opt) # will print: {'face_id': 4, 'contents': 'data values'} del geom.opt # deletes the contents of the hash map print(geom.opt) # will print: {} geom.opt = ["body_id", 1] # creates "body_id" key and sets its value to 1 geom.opt = ["body_id", 12] # changes the value of "body_id" to 12 print(geom.opt) # will print: {'body_id': 12} geom.opt = ["body_id", None] # deletes "body_id" print(geom.opt) # will print: {}
Please refer to the wiki for details on using this class member.
Getter: Gets the dict Setter: Adds key and value pair to the dict Deleter: Deletes the contents of the dict

class
geomdl.abstract.
Geometry
(**kwargs)¶ Bases:
geomdl.abstract.GeomdlBase
Abstract base class for defining geometry objects.
This class provides the following properties:
Keyword Arguments:
id
: object ID (as integer)precision
: number of decimal places to round to. Default: 18

dimension
¶ Spatial dimension.
Please refer to the wiki for details on using this class member.
Getter: Gets the spatial dimension, e.g. 2D, 3D, etc. Type: int

evalpts
¶ Evaluated points.
Please refer to the wiki for details on using this class member.
Getter: Gets the coordinates of the evaluated points Type: list

evaluate
(**kwargs)¶ Abstract method for the implementation of evaluation algorithm.
Note
This is an abstract method and it must be implemented in the subclass.

id
¶ Object ID (as an integer).
Please refer to the wiki for details on using this class member.
Getter: Gets the object ID Setter: Sets the object ID Type: int

name
¶ Object name (as a string)
Please refer to the wiki for details on using this class member.
Getter: Gets the object name Setter: Sets the object name Type: str

opt
¶ Dictionary for storing custom data in the current geometry object.
opt
is a wrapper to a dict in key => value format, where key is string, value is any Python object. You can useopt
property to store custom data inside the geometry object. For instance:geom.opt = ["face_id", 4] # creates "face_id" key and sets its value to an integer geom.opt = ["contents", "data values"] # creates "face_id" key and sets its value to a string print(geom.opt) # will print: {'face_id': 4, 'contents': 'data values'} del geom.opt # deletes the contents of the hash map print(geom.opt) # will print: {} geom.opt = ["body_id", 1] # creates "body_id" key and sets its value to 1 geom.opt = ["body_id", 12] # changes the value of "body_id" to 12 print(geom.opt) # will print: {'body_id': 12} geom.opt = ["body_id", None] # deletes "body_id" print(geom.opt) # will print: {}
Please refer to the wiki for details on using this class member.
Getter: Gets the dict Setter: Adds key and value pair to the dict Deleter: Deletes the contents of the dict

class
geomdl.abstract.
SplineGeometry
(**kwargs)¶ Bases:
geomdl.abstract.Geometry
Abstract base class for defining spline geometry objects.
This class provides the following properties:
type
= splineid
name
rational
dimension
pdimension
degree
knotvector
ctrlpts
ctrlpts_size
weights
(for completeness with the rational spline implementations)evalpts
bbox
evaluator
vis
opt
Keyword Arguments:
id
: object ID (as integer)precision
: number of decimal places to round to. Default: 18normalize_kv
: if True, knot vector(s) will be normalized to [0,1] domain. Default: Truefind_span_func
: default knot span finding algorithm. Default:helpers.find_span_linear()

bbox
¶ Bounding box.
Evaluates the bounding box and returns the minimum and maximum coordinates.
Please refer to the wiki for details on using this class member.
Getter: Gets the bounding box Type: tuple

cpsize
¶ Number of control points in all parametric directions.
Note
This is an expert property for getting and setting control point size(s) of the geometry.
Please refer to the wiki for details on using this class member.
Getter: Gets the number of control points Setter: Sets the number of control points Type: list

ctrlpts
¶ Control points.
Please refer to the wiki for details on using this class member.
Getter: Gets the control points Setter: Sets the control points Type: list

ctrlpts_size
¶ Total number of control points.
Getter: Gets the total number of control points Type: int

degree
¶ Degree
Note
This is an expert property for getting and setting the degree(s) of the geometry.
Please refer to the wiki for details on using this class member.
Getter: Gets the degree Setter: Sets the degree Type: list

dimension
¶ Spatial dimension.
Spatial dimension will be automatically estimated from the first element of the control points array.
Please refer to the wiki for details on using this class member.
Getter: Gets the spatial dimension, e.g. 2D, 3D, etc. Type: int

domain
¶ Domain.
Domain is determined using the knot vector(s).
Getter: Gets the domain

evalpts
¶ Evaluated points.
Please refer to the wiki for details on using this class member.
Getter: Gets the coordinates of the evaluated points Type: list

evaluate
(**kwargs)¶ Abstract method for the implementation of evaluation algorithm.
Note
This is an abstract method and it must be implemented in the subclass.

evaluator
¶ Evaluator instance.
Evaluators allow users to use different algorithms for BSpline and NURBS evaluations. Please see the documentation on
Evaluator
classes.Please refer to the wiki for details on using this class member.
Getter: Gets the current Evaluator instance Setter: Sets the Evaluator instance Type: evaluators.AbstractEvaluator

id
¶ Object ID (as an integer).
Please refer to the wiki for details on using this class member.
Getter: Gets the object ID Setter: Sets the object ID Type: int

knotvector
¶ Knot vector
Note
This is an expert property for getting and setting the knot vector(s) of the geometry.
Please refer to the wiki for details on using this class member.
Getter: Gets the knot vector Setter: Sets the knot vector Type: list

name
¶ Object name (as a string)
Please refer to the wiki for details on using this class member.
Getter: Gets the object name Setter: Sets the object name Type: str

opt
¶ Dictionary for storing custom data in the current geometry object.
opt
is a wrapper to a dict in key => value format, where key is string, value is any Python object. You can useopt
property to store custom data inside the geometry object. For instance:geom.opt = ["face_id", 4] # creates "face_id" key and sets its value to an integer geom.opt = ["contents", "data values"] # creates "face_id" key and sets its value to a string print(geom.opt) # will print: {'face_id': 4, 'contents': 'data values'} del geom.opt # deletes the contents of the hash map print(geom.opt) # will print: {} geom.opt = ["body_id", 1] # creates "body_id" key and sets its value to 1 geom.opt = ["body_id", 12] # changes the value of "body_id" to 12 print(geom.opt) # will print: {'body_id': 12} geom.opt = ["body_id", None] # deletes "body_id" print(geom.opt) # will print: {}
Please refer to the wiki for details on using this class member.
Getter: Gets the dict Setter: Adds key and value pair to the dict Deleter: Deletes the contents of the dict

opt_get
(value)¶ Safely query for the value from the
opt
property.Parameters: value (str) – a key in the opt
propertyReturns: the corresponding value, if the key exists. None
, otherwise.

pdimension
¶ Parametric dimension.
Please refer to the wiki for details on using this class member.
Getter: Gets the parametric dimension Type: int

range
¶ Domain range.
Getter: Gets the range

rational
¶ Defines the rational and nonrational Bspline shapes.
Rational shapes use homogeneous coordinates which includes a weight alongside with the Cartesian coordinates. Rational Bsplines are also named as NURBS (Nonuniform rational basis spline) and nonrational Bsplines are sometimes named as NUBS (Nonuniform basis spline) or directly as Bsplines.
Please refer to the wiki for details on using this class member.
Getter: Returns True is the Bspline object is rational (NURBS) Type: bool

render
(**kwargs)¶ Abstract method for spline rendering and visualization.
Note
This is an abstract method and it must be implemented in the subclass.

set_ctrlpts
(ctrlpts, *args, **kwargs)¶ Sets control points and checks if the data is consistent.
This method is designed to provide a consistent way to set control points whether they are weighted or not. It directly sets the control points member of the class, and therefore it doesn’t return any values. The input will be an array of coordinates. If you are working in the 3dimensional space, then your coordinates will be an array of 3 elements representing (x, y, z) coordinates.
 Keyword Arguments:
array_init
: initializes the control points array in the instancearray_check_for
: defines the types for input validationcallback
: defines the callback function for processing input pointsdimension
: defines the spatial dimension of the input points
Parameters:  ctrlpts (list) – input control points as a list of coordinates
 args (tuple) – number of control points corresponding to each parametric dimension

type
¶ Geometry type
Please refer to the wiki for details on using this class member.
Getter: Gets the geometry type Type: str