Cloning a Vector Group

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:

  1. Create and add a new group in the current vector handle.

  2. Create and add any new objects of the desired type into the group.

  3. Create an empty layer.

  4. Create a clone of the group.

  5. 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 vector 
   Min.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 object 
   ZeroMemory( &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 layer 
   ZeroMemory( &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 group 
   ZeroMemory( &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 settings 
   nRet = 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 again 
   Clone.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 blue 
   nRet = L_VecAddObject( pVector, &Layer, VECTOR_CLONE, &Clone, NULL ); 
   if( nRet != SUCCESS ) 
   { 
      MessageBox( NULL, TEXT("Can't Insert Object!"), NULL, 0 ); 
      return; 
   } 
} 

Help Version 21.0.2021.4.7
Products | Support | Contact Us | Intellectual Property Notices
© 1991-2021 LEAD Technologies, Inc. All Rights Reserved.

LEADTOOLS Vector C API Help