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 );
}
}