A group of vector objects can be cloned and added to a vector handle as a clone object. The steps used to accomplish this are as follows:
Create and add a new group in the current vector handle.
Create and add any new objects of the desired type into the group.
Create an empty layer.
Create a clone of the group.
Add the clone object to the layer in the vector handle.
The following is an example that shows this process:
void CreateClone( pVECTORHANDLE pVector ){L_INT nRet;VECTORPOINT Min, Max;VECTORGROUPDESC GroupDesc;VECTORGROUP Group;VECTORLINE Line;VECTORLAYERDESC LayerDesc;VECTORLAYER Layer;VECTORCLONE Clone;// setup the vectorMin.x = 0.0;Min.y = 0.0;Min.z = 0.0;Max.x = 5.0;Max.y = 5.0;Max.z = 0.0;L_VecSetParallelogram( pVector, &Min, &Max );L_VecSetOrigin( pVector, NULL );L_VecSetCamera( pVector, NULL );ZeroMemory( &GroupDesc, sizeof( GroupDesc ) );GroupDesc.nSize = sizeof( GroupDesc );lstrcpy( GroupDesc.szName, TEXT("My Group"));GroupDesc.dwTag = 0L;nRet = L_VecAddGroup( pVector, &GroupDesc, &Group, 0L );if( nRet != SUCCESS ){MessageBox( NULL, TEXT("Can't Add Group!"), NULL, 0 );return;}// add a new objectZeroMemory( &Line, sizeof( Line ) );L_VecInitObject( &Line.Object );Line.Object.nSize = sizeof( Line );Line.Object.nType = VECTOR_LINE;Line.Point[ 0 ].x = 0.0;Line.Point[ 0 ].y = 0.0;Line.Point[ 0 ].z = 0.0;Line.Point[ 1 ].x = 1.0;Line.Point[ 1 ].y = 1.0;Line.Point[ 1 ].z = 0.0;Line.Pen.nSize = sizeof( Line.Pen );Line.Pen.bExtPen = FALSE;Line.Pen.NewPen.LogPen.lopnColor = RGB( 255, 0, 0 );Line.Pen.NewPen.LogPen.lopnWidth.x = 1;Line.Pen.NewPen.LogPen.lopnWidth.y = 0;Line.Pen.NewPen.LogPen.lopnStyle = PS_SOLID;nRet = L_VecAddObjectToGroup( pVector, &Group, VECTOR_LINE, &Line, NULL );if( nRet != SUCCESS ){MessageBox( NULL, TEXT("Can't Insert Object!"), NULL, 0 );return;}Line.Point[ 0 ].x = 1.0;Line.Point[ 0 ].y = 0.0;Line.Point[ 0 ].z = 0.0;Line.Point[ 1 ].x = 0.0;Line.Point[ 1 ].y = 1.0;Line.Point[ 1 ].z = 0.0;nRet = L_VecAddObjectToGroup( pVector, &Group, VECTOR_LINE, &Line, NULL );if( nRet != SUCCESS ){MessageBox( NULL, TEXT("Can't Insert Object!"), NULL, 0 );return;}// create an empty layerZeroMemory( &LayerDesc, sizeof( LayerDesc ) );LayerDesc.nSize = sizeof( LayerDesc );lstrcpy( LayerDesc.szName, TEXT("My Layer"));LayerDesc.bVisible = TRUE;LayerDesc.bLocked = FALSE;LayerDesc.dwTag = 0L;nRet = L_VecAddLayer( pVector, &LayerDesc, &Layer, 0L );if( nRet != SUCCESS ){MessageBox( NULL, TEXT("Can't Add Layer!"), NULL, 0 );return;}// now, clone the groupZeroMemory( &Clone, sizeof( Clone ) );L_VecInitObject( &Clone.Object );Clone.Object.nSize = sizeof( Clone );Clone.Object.nType = VECTOR_CLONE;memcpy( &Clone.Group, &Group, sizeof( Group ) );Clone.Point.x = 2.0;Clone.Point.y = 2.0;Clone.Point.z = 0.0;Clone.Scale.x = 2.0;Clone.Scale.y = 2.0;Clone.Scale.z = 2.0;Clone.Rotation.x = 0.0;Clone.Rotation.y = 0.0;Clone.Rotation.z = 0.0;Clone.Pen.nSize = sizeof( Clone.Pen );Clone.Pen.bExtPen = FALSE;Clone.Pen.NewPen.LogPen.lopnColor = RGB( 255, 0, 0 );Clone.Pen.NewPen.LogPen.lopnWidth.x = 1;Clone.Pen.NewPen.LogPen.lopnWidth.y = 0;Clone.Pen.NewPen.LogPen.lopnStyle = PS_SOLID;Clone.Brush.nSize = sizeof( Clone.Brush );Clone.Brush.VectorBrushStyle = VECTORBRUSH_STANDARD;Clone.Brush.BrushType.StandardBrush.LogBrush.lbColor = RGB( 255, 0, 0 );Clone.Brush.BrushType.StandardBrush.LogBrush.lbStyle = BS_SOLID;Clone.Brush.BrushType.StandardBrush.LogBrush.lbHatch = 0;Clone.dwFlags = 0L; // use original settingsnRet = L_VecAddObject( pVector, &Layer, VECTOR_CLONE, &Clone, NULL );if( nRet != SUCCESS ){MessageBox( NULL, TEXT("Can't Insert Object!"), NULL, 0 );return;}// now, clone the group againClone.Point.x = 4.0;Clone.Point.y = 1.0;Clone.Point.z = 0.0;Clone.Scale.x = 1.0;Clone.Scale.y = 1.0;Clone.Scale.z = 1.0;Clone.Rotation.x = 0.0;Clone.Rotation.y = 0.0;Clone.Rotation.z = 45.0;Clone.dwFlags = VECTOR_CLONE_USE_PEN;Clone.Pen.NewPen.LogPen.lopnColor = RGB( 0, 0, 255 ); // this clone will be bluenRet = L_VecAddObject( pVector, &Layer, VECTOR_CLONE, &Clone, NULL );if( nRet != SUCCESS ){MessageBox( NULL, TEXT("Can't Insert Object!"), NULL, 0 );return;}}