📄 errormark.mc
字号:
/*================================================================================
Step by step 之 MDL 快速入门实例八
================================================================================*/
#include <tcb.h>
#include <mselems.h>
#include <mdl.h>
#include <dlogman.fdf>
#include <dlogitem.h>
#include <mselems.h>
#include <stdio.h>
#include <cmdlist.h>
#include <userfnc.h>
#include "ErrorMark.h"
Private void Hook_PlaceFailMark(DialogItemMessage *dimP);
Private void Hook_PlaceMissMark(DialogItemMessage *dimP);
Private void Hook_quit(DialogMessage *dimP);
Private void PlaceMark();
Private void PlacemarkNote_show(Dpoint3d *pPoint, int view, int drawMode, int add);
Private void Placemarknote(Dpoint3d* pPoint,int view);
Private void Placemarkcell_show(Dpoint3d *pPoint, int view, int drawMode, int add);
Private void PlacemarkCell(Dpoint3d* pPoint,int view);
char g_ErrorNote[200];
char g_CellName[10];
Private MSElementDescr *TextDP = NULL;
static DialogHookInfo uHooks[]=
{
{HOOK_fail ,Hook_PlaceFailMark},
{HOOK_miss ,Hook_PlaceMissMark},
{HOOK_exit ,Hook_quit},
};
Public void main(int argc,char *argv[])
{
char *setP;
RscFileHandle rscFileH;
mdlResource_openFile (&rscFileH, NULL, 0);
setP = mdlCExpression_initializeSet (VISIBILITY_DIALOG_BOX, 0, FALSE);
mdlDialog_publishBasicArray (setP, &charType, "g_ErrorNote", g_ErrorNote, sizeof(g_ErrorNote));
if (mdlDialog_hookPublish (sizeof(uHooks)/sizeof(DialogHookInfo), uHooks)!=SUCCESS)
{
mdlOutput_error("hookPublish error");
}
mdlDialog_open (NULL, DIALOGID_ErrorMark);
}
Private void Hook_PlaceFailMark(DialogItemMessage *dimP)
{
dimP->msgUnderstood=TRUE;
switch (dimP->messageType){
case DITEM_MESSAGE_BUTTON:
strcpy(g_CellName,"ERROR");
mdlParams_setActive(56,ACTIVEPARAM_LEVEL);
mdlParams_setActive(133,ACTIVEPARAM_COLOR);
PlaceMark();
break;
default:
dimP->msgUnderstood = FALSE;
break;
}
}
Private void Hook_PlaceMissMark(DialogItemMessage *dimP)
{
dimP->msgUnderstood=TRUE;
switch (dimP->messageType){
case DITEM_MESSAGE_BUTTON:
strcpy(g_CellName,"MISS");
mdlParams_setActive(56,ACTIVEPARAM_LEVEL);
mdlParams_setActive(133,ACTIVEPARAM_COLOR);
PlaceMark();
break;
default:
dimP->msgUnderstood = FALSE;
break;
}
}
Private void Hook_quit(DialogMessage *dimP)
{
dimP->msgUnderstood=TRUE;
switch (dimP->messageType){
case DIALOG_MESSAGE_DESTROY:
mdlDialog_cmdNumberQueue (FALSE, CMD_MDL_UNLOAD,mdlSystem_getCurrTaskID(), TRUE);
break;
default:
dimP->msgUnderstood = FALSE;
break;
}
}
Private void PlaceMark()
{
mdlState_startPrimitive(PlacemarkCell, PlaceMark, 0, 0);
mdlState_setFunction(STATE_COMPLEX_DYNAMICS, Placemarkcell_show);
}
Private void PlacemarkCell(Dpoint3d* pPoint,int view)
{
MSElementDescr *elD;
Dpoint3d Scale;
Scale.x = Scale.y = 1;
if(mdlCell_getElmDscr(&elD, NULL, 0, pPoint, &Scale, NULL, NULL, 0,
0, g_CellName )==ERROR)
return;
mdlElmdscr_display(elD, 0, NORMALDRAW);
mdlCell_fixLevels(elD, TRUE, 0);
mdlElmdscr_add(elD);
mdlElmdscr_freeAll(&elD);
if(strcmp(g_ErrorNote,"")==0)
{
mdlState_startPrimitive(PlacemarkCell, PlaceMark, 0, 0);
mdlState_setFunction(STATE_COMPLEX_DYNAMICS, Placemarkcell_show);
}
else
{
mdlState_setFunction(STATE_DATAPOINT, Placemarknote);
mdlState_setFunction(STATE_RESET, PlaceMark);
mdlState_setFunction(STATE_COMPLEX_DYNAMICS, PlacemarkNote_show);
}
}
Private void Placemarkcell_show(Dpoint3d *pPoint, int view, int drawMode, int add)
{
MSElementDescr *elD;
Dpoint3d Scale;
Scale.x = Scale.y = 1;
if(mdlCell_getElmDscr(&elD, NULL, 0, pPoint, &Scale, NULL, NULL, 0, 0, g_CellName)==ERROR)
return;
mdlElmdscr_display(elD, 0, drawMode);
mdlElmdscr_freeAll(&elD);
}
Private void Placemarknote(Dpoint3d* pPoint,int view)
{
MSElement mOut;
mdlText_create(&mOut, NULL, g_ErrorNote, pPoint, NULL, NULL, NULL, NULL);
mdlElmdscr_new(&TextDP, NULL, &mOut);
mdlElmdscr_display(TextDP, 0, NORMALDRAW);
mdlElmdscr_add(TextDP);
mdlState_startPrimitive(PlacemarkCell, PlaceMark, 0, 0);
mdlState_setFunction(STATE_COMPLEX_DYNAMICS, Placemarkcell_show);
}
Private void PlacemarkNote_show(Dpoint3d *pPoint, int view, int drawMode, int add)
{
MSElement mOut;
mdlText_create(&mOut, NULL, g_ErrorNote, pPoint, NULL, NULL, NULL, NULL);
mdlElmdscr_new(&TextDP, NULL, &mOut);
mdlElmdscr_display(TextDP, 0, drawMode);
mdlElmdscr_freeAll(&TextDP);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -