This is the Open C API public interface to smart objects.
Smart Objects "remember their parents" and know how they were defined. For
example, a smart point that is created at the intersection of two lines
associates itself to its parent objects (two lines) and can reference its
definition at their intersection. If the parents move and maintain an
intersection, the smart point updates and knows its new coordinates.
The smart object has a subobject called parms which stores the references of
the smart object. For example, a smart line would have a parms that would store
references to a start point and an end point. It is possible for the references
to be smart objects. For example, point1 and point2 shown in the diagram could
be smart points.

Figure Smart Line
Terminology:
The following terms are used throughout this chapter and are used in describing
the status of a smart object. You can obtain the status of a smart object with
UF_SO_ask_parent_status parent/child relationship - is the passing of information from one object
(parent) to a newly created object (child). The
older information from the parent is necessary to
create new information (child).
sleepy parent - A parent is asleep if it is no longer in the model, perhaps
because some modeling operation has been performed on the
parent. For example, if you blend an edge, then the edge is
asleep.
object_in_part - Many of the smart object creation functions have an input
parameter, object_in_part, which determines in which part to
create the smart object. You input the tag of any valid object
that exists in the part. Since you may be working in context,
the part where the smart object is created does not have to be
the work part.
has_become_dumb - If a smart object has its parameters deleted then we
say that it has become dumb. One may edit these
objects via the 'set' routines since their values
are no longer constrained. You may also call the
'ask' routines.
smart object classes - Scalar, Direction, Offset, Axis and Transform are
new objects classes implemented as smart objects.
Point, Curve and Datums are old object classes
which were extended as smart objects. These new
smart object classes may be created via the
'create' routines. For example, you can create
a smart Scalar via an expression to control
the curve parameter for point on curve.
smart object examples - Please see
ufd_draw_aux_view.c ufd_draw_circ_det_vw.c ufd_drw_bound_point.c ufd_drw_set_view_anchor.c ufd_eval.c for examples of how to use smart objects.
Smart Objects are created as condemned objects by default. Condemned
objects exist only to be referenced by other objects. This is the
definition of "condemned". Thus condemned Smart Objects are automatically
deleted whenever the last reference to them is deleted. You may change
the state of a Smart Object from "condemned" to "alive" by setting it
visible using
UF_SO_set_visibility_option