void DemoBreak2 (HANDLE hLcWnd)
{
HANDLE hBlock, hEnt, hEnt2, hPtBuf;
double X, Y, Delta, R, Xc, Yc, dx, dy;
// get a block, linked with CAD window
hBlock = lcPropGetHandle( hLcWnd, LC_PROP_WND_VIEWBLOCK );
// get selected entity
hEnt = lcBlockGetFirstSel( hBlock );
if (hEnt != 0){
if (lcEntType( hEnt, LC_ENT_CIRCLE ) == LC_TRUE){
// center point
Xc = lcPropGetFloat( hEnt, LC_PROP_CIRCLE_X );
Yc = lcPropGetFloat( hEnt, LC_PROP_CIRCLE_Y );
// radius
R = lcPropGetFloat( hEnt, LC_PROP_CIRCLE_R );
// define breakpoints
hPtBuf = lcPaint_CreatePtbuf();
lcPaint_PtbufAddPoint2( hPtBuf, Xc-R, Yc );
lcPaint_PtbufAddPoint2( hPtBuf, Xc, Yc+R );
lcPaint_PtbufAddPoint2( hPtBuf, Xc+R, Yc );
lcPaint_PtbufAddPoint2( hPtBuf, Xc, Yc-R );
// break the circle into 4 arcs
Delta = lcPropGetFloat( hLcWnd, LC_PROP_WND_PICKBOXSIZE );
hEnt2 = lcEntBreak2( hEnt, hPtBuf, Delta, false, true );
if (hEnt2 != 0){
// move the arcs
while( hEnt2 != 0 ){
X = lcPropGetFloat( hEnt2, LC_PROP_ARC_XMID );
Y = lcPropGetFloat( hEnt2, LC_PROP_ARC_YMID );
dx = (X - Xc) * 0.25;
dy = (Y - Yc) * 0.25;
lcEntMove( hEnt2, dx, dy );
hEnt2 = lcBlockGetNextEnt( hBlock, hEnt2 );
}
lcBlockUpdate( hBlock, true, 0 );
lcWndRedraw( hLcWnd );
}
// free points buffer
lcPaint_DeletePtbuf( hPtBuf );
}
}
}