/*Demonstrates symmetry. Right-click and draw line of symmetry. If the line of symmetry is a point, symmetry is turned-off. */ U0 SymmetryDemo() { I64 msg_code,x1,y1,x2,y2,arg1,arg2; CDC *dc=DCAlias; SettingsPush; //See SettingsPush Fs->win_inhibit=WIG_TASK_DFT-WIF_SELF_FOCUS-WIF_SELF_BORDER; WinBorder; WinMax; DocClear; DCFill; dc->flags|=DCF_SYMMETRY; DCSymmetrySet(dc,Fs->pix_width/2,0,Fs->pix_width/2,1); do { msg_code=GetMsg(&arg1,&arg2, 1<<MSG_KEY_DOWN+1<<MSG_MS_L_DOWN+ 1<<MSG_MS_R_DOWN); switch (msg_code) { case MSG_MS_R_DOWN: dc->flags&=~DCF_SYMMETRY; dc->color=ROP_XOR+RED^TRANSPARENT; x1=arg1; y1=arg2; x2=arg1; y2=arg2; while (msg_code!=MSG_MS_R_UP) { GrLine3(dc,x1,y1,0,x2,y2,0); msg_code=GetMsg(&arg1,&arg2, 1<<MSG_MS_R_UP+1<<MSG_MS_MOVE); GrLine3(dc,x1,y1,0,x2,y2,0); x2=arg1; y2=arg2; } GrLine3(dc,x1,y1,0,x2,y2,0); if (DCSymmetry3Set(dc,x1,y1,0,x2,y2,0,x2,y2,1)) dc->flags|=DCF_SYMMETRY; break; case MSG_MS_L_DOWN: dc->color=ROP_XOR+BLACK^TRANSPARENT; x1=arg1; y1=arg2; x2=arg1; y2=arg2; while (msg_code!=MSG_MS_L_UP) { GrLine3(dc,x1,y1,0,x2,y2,0); msg_code=GetMsg(&arg1,&arg2, 1<<MSG_MS_L_UP+1<<MSG_MS_MOVE); GrLine3(dc,x1,y1,0,x2,y2,0); x2=arg1; y2=arg2; } GrLine3(dc,x1,y1,0,x2,y2,0); break; } } while (msg_code!=MSG_KEY_DOWN || (arg1!=CH_ESC && arg1!=CH_SHIFT_ESC)); GetMsg(,,1<<MSG_KEY_UP); DCFill; DCDel(dc); SettingsPop; } SymmetryDemo; //Execute when #included