Code sample Home

Get isolines points of TIN object.
void DemoTinIsolines (HANDLE hLcWnd)
{
  HANDLE hBlock, hTIN, hIso, hPline;
  int    nVers, i, nLabels, Align;
  double X, Y, Z, Ang, Ht, Hg;
  BOOL   bClosed;
  WCHAR  szText[32];

  // get the block, linked with CAD window
  hBlock = lcPropGetHandle( hLcWnd, LC_PROP_WND_VIEWBLOCK );
  // get TIN with specified name
  hTIN = lcBlockGetTIN( hBlock, L"The test TIN 2" );
  if (hTIN != 0){
    hIso = lcTIN_IsoGetFirst( hTIN );
    while( hIso ){
      Z = lcPropGetFloat( hIso, LC_PROP_TINISO_Z );
      bClosed = lcPropGetBool( hIso, LC_PROP_TINISO_CLOSED );
      nVers = lcPropGetInt( hIso, LC_PROP_TINISO_NVERS );
      if (nVers >= 2){
        hPline = lcBlockAddPolyline( hBlock, 0, bClosed, false );
        for (i=0; i<nVers; ++i){
          lcPropPutInt( hIso, LC_PROP_TINISO_IVER, i );
          X = lcPropGetFloat( hIso, LC_PROP_TINISO_X );
          Y = lcPropGetFloat( hIso, LC_PROP_TINISO_Y );
          lcPlineAddVer( hPline, 0, X, Y );
        }
        lcPlineEnd( hPline );
        lcPropPutFloat( hPline, LC_PROP_ENT_Z, Z );
      }
      // draw heights labels
      Ht = 0.5;       // label text height, zero means "By Style" (LC_PROP_TSTYLE_HEIGHT)
      Hg = Ht / 2.5;  // gap between label and isoline
      swprintf( szText, L" %.2f ", Z );
      nLabels = lcTIN_IsoMakeLabels( hIso );
      for (i=0; i<nLabels; ++i){
        lcTIN_GetIsoLabel( i, &X, &Y, &Ang, &Align );
        if (Align == LC_TA_CENBOT){
          // Label at middle of isoline. Make a gap between label and isoline
          lcGetPolarPoint( X, Y, Ang + LC_DEG90, Hg, &X, &Y );
        }
        lcBlockAddText2( hBlock, szText, X, Y, Align, -1, 1.0, Ang, 0.0 );
      }
      // get next isoline
      hIso = lcTIN_IsoGetNext( hTIN, hIso );
    }
    // update view
    lcWndRedraw( hLcWnd );
  }
}