/* Public domain */ #define SK_DIMENSION_TEXT_MAX 256 enum sk_dimension_type { SK_DIMENSION_NONE, SK_DIMENSION_DISTANCE, /* Linear distance */ SK_DIMENSION_ANGLE_ENDPOINT, /* Angle at shared endpoint */ SK_DIMENSION_ANGLE_INTERSECT /* Angle at line intersection */ }; typedef struct sk_dimension { struct sk_annot annot; enum sk_dimension_type type; /* Type of dimension */ Uint flags; #define SK_DIMENSION_CONJ_ANGLE 0x01 /* Display conjugate angle */ const struct ag_unit *unit; /* Length/angle unit (NULL = default) */ SK_Node *n1, *n2; /* Dimension between nodes */ M_Color cLbl; /* Color of label text */ M_Color cLblBorder; /* Color of label border */ M_Color cLineDim; /* Color of dimension line */ int xPad, yPad; /* Label padding (pixels) */ M_Vector3 vLbl; /* Label position (in annotation's frame of reference) */ M_Real wLbl, hLbl; /* Label dimensions */ char text[SK_DIMENSION_TEXT_MAX]; /* Generated label text */ } SK_Dimension; typedef struct sk_dimension_view { int lbl; /* Label texture handle */ } SK_DimensionView; #define SKDIMENSION(n) ((SK_Dimension *)(n)) __BEGIN_DECLS extern SK_NodeOps skDimensionOps; SK_Dimension *SK_DimensionNew(void *); void SK_DimensionInit(void *, Uint32); int SK_DimensionLoad(SK *, void *, AG_DataSource *); int SK_DimensionSave(SK *, void *, AG_DataSource *); void SK_DimensionDraw(void *, struct sk_view *); void SK_DimensionRedraw(void *, struct sk_view *); void SK_DimensionEdit(void *, struct ag_widget *, struct sk_view *); M_Real SK_DimensionProximity(void *, const M_Vector3 *, M_Vector3 *); int SK_DimensionDelete(void *); int SK_DimensionMove(void *, const M_Vector3 *, const M_Vector3 *); void SK_DimensionSetUnit(SK_Dimension *, const struct ag_unit *); __END_DECLS