⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 errormark.mc

📁 Bentley Microstation的二次开发工具MDL的学习源代码
💻 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 + -