The LEADTOOLS Vector SDK supports Stock objects libraries. These are Dynamic Link Libraries that contain user-defined objects.
The VECOFICE Library comes with more than 100 pre-defined object shapes for multiple purposes such as arrows, flowchart symbols, etc.
The following example adds all the objects in the VECOFICE library to the default layer of a vector handle:
#include "lvkrn.h"
#include "vecofice.h"
void LoadVecOficeLibrary( pVECTORHANDLE pVector )
{
VECTORSTOCK Stock;
L_INT i;
L_DOUBLE X, Y;
const L_DOUBLE SIZE = 2.0;
// Initiate a new VECTOR_STOCK object.
L_VecInitObject( &Stock.Object );
Stock.Object.nType = VECTOR_STOCK;
Stock.Object.nSize = sizeof( VECTORSTOCK );
// Load the VECOFICE library.
Stock.hInstDLL = LoadLibrary(TEXT("VecOfice.dll"));
// Tell the toolkit to load the stock object using the hInstDLL member.
Stock.pszDLLName = NULL;
// Fill in default pen, brush and font.
Stock.Pen.nSize = sizeof( VECTORPEN );
Stock.Pen.bExtPen = FALSE;
Stock.Pen.NewPen.LogPen.lopnStyle = PS_SOLID;
Stock.Pen.NewPen.LogPen.lopnWidth.x = 1;
Stock.Pen.NewPen.LogPen.lopnWidth.y = 0;
Stock.Pen.NewPen.LogPen.lopnColor = RGB( 0xFF, 0x00, 0x00 );
Stock.Brush.VectorBrushStyle = VECTORBRUSH_STANDARD;
Stock.Brush.nSize = sizeof( VECTORBRUSH );
Stock.Brush.BrushType.StandardBrush.LogBrush.lbStyle = PS_SOLID;
Stock.Brush.BrushType.StandardBrush.LogBrush.lbHatch = 0;
Stock.Brush.BrushType.StandardBrush.LogBrush.lbColor = RGB( 0x00, 0xFF, 0x00 );
X = 0.0;
Y = 0.0;
// Add all objects, use a grid of 10 horizontal objects
for( i = 0; i < VECOFICE_OBJECT_COUNT; i++ )
{
// Set object ID.
Stock.nId = i;
Stock.Point[ 0 ].x = X;
Stock.Point[ 0 ].y = Y;
Stock.Point[ 0 ].z = 0.0;
Stock.Point[ 1 ].x = X + SIZE;
Stock.Point[ 1 ].y = Y + SIZE;
Stock.Point[ 1 ].z = 0.0;
// We want to have random colors for each object.
Stock.Pen.NewPen.LogPen.lopnColor = RGB( rand() % 256, rand() % 256, rand() % 256 );
Stock.Brush.BrushType.StandardBrush.LogBrush.lbColor = RGB( rand() % 256, rand() % 256, rand() % 256 );
// Add the object to the default layer.
L_VecAddObject( pVector, NULL, VECTOR_STOCK, &Stock, NULL );
// Update position for next object.
if( !( ( i + 1 ) % 10 ) )
{
Y -= SIZE * 3.0 / 2.0;
X = 0.0;
}
else
{
X += SIZE * 3.0 / 2.0;
}
}
}