Solver Container msofbtSolverContainer

Rules give special behaviors to shapes. Rules can govern a single shape, like in the case of a callout shape, or multiple shapes, as in the case of connectors. Each drawing can have a list of rules associated with it.

Connector Rule Record msofbtConnectorRule

Governs a connector shape.

typedef struct _FConnectorRule
   {
   ULONG ruid;       // rule ID
   MSOSPID spidA;    // SPID of shape A
   MSOSPID spidB;    // SPID of shape B
   MSOSPID spidC;    // SPID of connector shape
   ULONG cptiA;      // Connection site Index of shape A
   ULONG cptiB;      // Connection site Index of shape B
   } FConnectorRule;

Align Rule Record msofbtAlignRule

Aligns shapes. The FAlignRule record is followed by the SPIDs of the proxy shapes.

// FAlignRule 
typedef struct _FAlignRule
   {
   ULONG ruid;       // rule ID
   ULONG align;      // alignment – see below
   ULONG cProxies;   // number of shapes governed by rule
   } FAlignRule;

// ALIGN == Shape alignment (Horz and vert can be or'ed together)
#define alignHorz      0x000F   // mask for horizontal component
#define alignLeft      0x0001   // left edges
#define alignCenter    0x0002   // horizontal center
#define alignRight     0x0003   // right edges
#define alignVert      0x00F0   // mask for vertical component
#define alignTop       0x0010   // top edges
#define alignMiddle    0x0020   // vertical center
#define alignBottom    0x0030   // bottom edges
#define alignRelative  0x0100   // Relative to the page

Arc Rule Record msofbtArcRule

One Arc rule per elliptical arc shape.

// FARCRU -- Arc Rule
typedef struct _FARCRU
   {
   ULONG      ruid; // rule ID
   MSOSPID    spid; // spid of arc shape
   } FARCRU;

Callout Rule Record msofbtCalloutRule

One callout rule per callout shape.

// FCORU   -- Callout Rule
typedef struct _FCORU
   {
   ULONG      ruid; // rule ID
   MSOSPID    spid; // spid of callout shape
   } FCORU;