Code sample Home

Create a drawing and save it into a file  (see project \LC_Samples\CreateDrawing)

int _tmain (int argc, _TCHAR* argv[])
{
  WCHAR  szOutFile[256];
  HANDLE hDrw;
  HANDLE hBlock, hLayer, hPline, hEnt, hText, hTStyle;
  double Lef, Bot, Rig, Top;
  BOOL   bSaved;
  WCHAR* szText = NULL;
  BOOL   bRet;

  // Generate the drawing's filename
  ::GetModuleFileName( ::GetModuleHandle(NULL), szOutFile, 255 );
  WCHAR* p = wcsrchr( szOutFile, L'\\' );
  if (p){
    p[0] = 0;
    wcscat( szOutFile, L"\\CreateDrawing.lcd" );
  }else{
    return 1;
  }
  
  lcInitialize( 0, 0, 0 ); 
  hDrw = lcCreateDrawing();
  hBlock = lcDrwGetFirstObject( hDrw, LC_OBJ_BLOCK );
  // add lines
  lcBlockAddLine( hBlock, 0,0, 50,50 );
  lcBlockAddLine( hBlock, 20,0, 70,50 );
  // add circles
  lcBlockAddCircle( hBlock, 80,60, 14.142, false );
  lcBlockAddCircle( hBlock, 80,60, 7.071, false );
  //add arcs
  lcBlockAddArc( hBlock, 80, 40, 14.142, -45*LC_DEG_TO_RAD, -90*LC_DEG_TO_RAD );
  lcBlockAddArc3P( hBlock, 70,30, 80, 10, 90, 30 );
  hEnt = lcBlockAddArc( hBlock, 80, 22.5, 10, 250*LC_DEG_TO_RAD, 40*LC_DEG_TO_RAD );
  lcPropPutBool( hEnt, LC_PROP_ARC_SECTOR, true );
  lcPropPutBool( hEnt, LC_PROP_ENT_SOLIDFILL, true );
  lcPropPutStr( hEnt, LC_PROP_ENT_COLOR, L"red" );
  lcPropPutStr( hEnt, LC_PROP_ENT_FCOLOR, L"100,200,250" );
  // add ellipse
  lcBlockAddEllipse( hBlock, 80, 35.858, 5, 10, 0, 0, 0 );
  hEnt = lcBlockAddEllipse( hBlock, 100, 35.858, 5, 10, 0, 180*LC_DEG_TO_RAD, 270*LC_DEG_TO_RAD );
  lcPropPutBool( hEnt, LC_PROP_ELL_SECTOR, true );
  // add new layer and make it active
  hLayer = lcDrwAddLayer( hDrw, L"New Layer", L"red", 0, LC_LWEIGHT_DEFAULT );
  lcPropPutHandle( hDrw, LC_PROP_DRW_LAYER, hLayer );
  // add polyline
  hPline = lcBlockAddPolyline( hBlock, LC_PLFIT_QUAD, true, false );
  lcPlineAddVer( hPline, 0, 20, 80 );
  lcPlineAddVer( hPline, 0, 30, 90 );
  lcPlineAddVer( hPline, 0, 50, 70 );
  lcPlineAddVer( hPline, 0, 33, 63 );
  lcPlineAddVer( hPline, 0, 20, 50 );
  lcPlineEnd( hPline );
  // add new text style and make it active
  hTStyle = lcDrwAddTextStyle( hDrw, L"New Style", L"Times New Roman", true );
  lcPropPutHandle( hDrw, LC_PROP_DRW_TEXTSTYLE, hTStyle );
  // add text
  hText = lcBlockAddText2( hBlock, L"Polygon", 32,70, LC_TA_CENTER, 3, 0, 35*LC_DEG_TO_RAD, 0 );
  // copy and mirror the text and the polyline
  lcBlockSelectEnt( hBlock, hPline, true );
  lcBlockSelectEnt( hBlock, hText, true );
  lcBlockSelMirror( hBlock, 19.5, 0, 19.5, 100, true, false );
  hEnt = lcBlockGetLastEnt( hBlock );
  lcBlockSelectEnt( hBlock, hEnt, true );
  hEnt = lcBlockGetPrevEnt( hBlock, hEnt );
  lcBlockSelectEnt( hBlock, hEnt, true );
  lcBlockSelMirror( hBlock, 0, 87, 100, 87, true, false );
  lcBlockUnselect( hBlock );
  // calculate extents
  lcBlockUpdate( hBlock, true, 0 );
  
  // get extents of model block
  Lef = lcPropGetFloat( hBlock, LC_PROP_BLOCK_XMIN );
  Bot = lcPropGetFloat( hBlock, LC_PROP_BLOCK_YMIN );
  Rig = lcPropGetFloat( hBlock, LC_PROP_BLOCK_XMAX );
  Top = lcPropGetFloat( hBlock, LC_PROP_BLOCK_YMAX );
  // set visible rect (fit to the extents)
  lcBlockSetViewRect2( hBlock, Lef, Bot, Rig, Top );
  
  // add paper view
  hBlock = lcDrwAddBlockPaper( hDrw, L"", LC_PAPER_A4, LC_PAPER_BOOK, 0, 0 );
  // set active layer
  hLayer = lcDrwGetObjectByName( hDrw, LC_OBJ_LAYER, L"0" );
  lcPropPutHandle( hDrw, LC_PROP_DRW_LAYER, hLayer );
  // set default parameters for a text
  lcPropPutInt( hTStyle, LC_PROP_TSTYLE_ALIGN, LC_TA_CENTOP );
  lcPropPutFloat( hTStyle, LC_PROP_TSTYLE_HEIGHT, 7.0 );
  lcPropPutFloat( hTStyle, LC_PROP_TSTYLE_OBLIQUE, 15.0*LC_DEG_TO_RAD );
  lcPropPutFloat( hTStyle, LC_PROP_TSTYLE_WSCALE, 1.5 );
  // add text
  lcBlockAddText( hBlock, L"Demo drawing", 105,290 );
  // add some more text
  szText = L"Move cursor inside a viewport and click right button, the popup menu "
           L"will appear. You can activate the viewport and set desired view by moving "
           L"the viewport rectangle on Model Space.\\P"
           L"Also you can activate / deactivate a viewport by left button "
           L"double click.";
  lcBlockAddMText( hBlock, szText, 10, 50, 90, LC_TA_LEFTOP, 0, 3.2, 1 );
  // add new layer for viewports and make it active
  hLayer = lcDrwAddLayer( hDrw, L"Viewports", L"96", 0, LC_LWEIGHT_DEFAULT );
  lcPropPutHandle( hDrw, LC_PROP_DRW_LAYER, hLayer );
  // add viewports on the paper view
  lcBlockAddViewport( hBlock, 10, 155, 190, 120, 0,0, 0, 0 ); 
  lcBlockAddViewport( hBlock, 10, 55, 90, 90, 19.5, 87, 0.745, 0 ); 
  lcBlockAddViewport( hBlock, 110, 55, 90, 90, 80, 35.858, 0.745, 45*LC_DEG_TO_RAD ); 
  // set active color
  lcPropPutStr( hDrw, LC_PROP_DRW_COLOR, L"blue" );
  // add dimension
  lcBlockAddDimHor( hBlock, 110, 55, 200, 55, 30, L"W=<>mm" );
  // calculate extents
  lcBlockUpdate( hBlock, true, 0 );

  // set active view (that will be dispayed in a window when the drawing will be opened in editor)
  lcPropPutHandle( hDrw, LC_PROP_DRW_VISBLOCK, hBlock );
  // save the drawing into the file
  bSaved = lcDrwSave( hDrw, szOutFile, false, 0 );
  // delete drawing object (clear memory)
  lcDeleteDrawing( hDrw );

  lcUninitialize( false ); // if true - save config
 
  if (bSaved){
    wprintf( L"The drawing was saved to\n%s\nPress any key\n", szOutFile );
  }else{
    wprintf( L"Error of saving file\n%s\nPress any key\n", szOutFile );
  }
  _getch();

  return 0;
}

This will create a drawing as shown on the pictures below:

Model Space



Paper Space



Used functions:

lcInitialize
lcUninitialize

lcCreateDrawing
lcDeleteDrawing

lcDrwAddBlockPaper
lcDrwAddLayer
lcDrwAddTextStyle
lcDrwGetFirstObject
lcDrwGetObjectByName
lcDrwSave

lcBlockAddArc
lcBlockAddArc3P
lcBlockAddCircle
lcBlockAddDimHor
lcBlockAddEllipse
lcBlockAddLine
lcBlockAddPolyline
lcBlockAddMText
lcBlockAddText
lcBlockAddText2
lcBlockAddViewport

lcBlockGetLastEnt
lcBlockGetPrevEnt
lcBlockSelectEnt
lcBlockSelMirror
lcBlockSetViewRect2
lcBlockUnselect
lcBlockUpdate

lcPlineAddVer
lcPlineEnd

lcPropGetFloat
lcPropPutBool
lcPropPutFloat
lcPropPutHandle
lcPropPutInt
lcPropPutStr