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

📄 myapp.mc

📁 Bentley Microstation的二次开发工具MDL的学习源代码
💻 MC
字号:
/*================================================================================
						Step by step 之 MDL 快速入门实例十--十一
================================================================================*/
#include <mdl.h>
#include <tcb.h>
#include <dlogitem.h>
#include <cmdlist.h>
#include <rscdefs.h>
#include <dlogids.h>
#include <stdlib.h>
#include <stdio.h>
#include <userfnc.h>
#include <mselems.h>


#include "myapp.h"
#include "myappcmd.h"

MSElementDescr		*g_modifyEdP;
Dpoint3d			g_LinePoint[101];
ULong				g_filePos;
int					g_numVerts,g_modifyNum =0;
/*----------------------------------------------------------------------+
|
| localfunction  declare
|
+----------------------------------------------------------------------*/
Private void modifyElement(void);
Private void	modifyline_accept(Dpoint3d *ptP,int	  view);
void modifyline_show(Dpoint3d *pPoint, int view, int drawMode, int add);
void modifyline_modify(Dpoint3d* pPoint,int view);
void modifyline_reset(void);
/*----------------------------------------------------------------------+
|                                                                       |
| name          main                                                    |
|                                                                       |
| author        beizhan         2001.03            |
|                                                                       |
+----------------------------------------------------------------------*/
Public void main(int   argc,char    *argv[])
    {
    int         rscFileH;
    

    if (mdlResource_openFile (&rscFileH, NULL, RSC_READ) != SUCCESS)
		{
			mdlSystem_exit(	ERROR,	1);
		}

	if (mdlParse_loadCommandTable (NULL) == NULL)
	{
		mdlOutput_error("调入命令表出错");
		return;
	}

	mdlDialog_open (NULL, ICONCMDFRAMEID_MyApp);
    }

/*----------------------------------------------------------------------+
|									|
| name		modifyElement			|
|									|
| author	beizhan       2001.03
|
+----------------------------------------------------------------------*/

Private void modifyElement(void)
cmdNumber   CMD_OPERATE
{
    mdlLocate_noElemNoLocked ();
    tcb->searchType[0] = ( TMSK0_LINE | TMSK0_LINE_STRING |  TMSK0_SHAPE);
	
	mdlState_startModifyCommand (modifyElement,modifyline_modify,
				 NULL,modifyline_accept,
				 NULL, 0,
				 0, TRUE, 1);    

	mdlLocate_init ();
}

/*----------------------------------------------------------------------+
|									|
| name		modifyline_accept		|
|									|
| author	beizhan       2001.03
|									|
+----------------------------------------------------------------------*/
Private void	modifyline_accept(Dpoint3d *ptP,int	  view)
{
    Dpoint3d	newPoint;
    MSElement	newElem;
    int			i,EleColor;
	double		distemp;

    g_filePos = mdlElement_getFilePos (FILEPOS_CURRENT, NULL);
    if (mdlElmdscr_read (&g_modifyEdP, g_filePos, MASTERFILE, FALSE, NULL) == 0L)
	return;
	
	mdlElement_getSymbology(&EleColor,NULL,NULL,&g_modifyEdP->el);

	if (g_modifyEdP->el.ehdr.level != 1 && EleColor != 0)
	{
		mdlElmdscr_freeAll(&g_modifyEdP);
		modifyElement();
		return;
	}

	newPoint = *ptP;
	
    mdlLinear_extract(g_LinePoint, &g_numVerts, &g_modifyEdP->el,0);

	distemp = mdlVec_distance(&newPoint,&g_LinePoint[0]);
	g_modifyNum =0;
	for (i =1; i < g_numVerts; i++)
	{
		if (mdlVec_distance(&newPoint,&g_LinePoint[i]) < distemp)
		{
			distemp =mdlVec_distance(&newPoint,&g_LinePoint[i]);
			g_modifyNum =i;
		}
	}

	mdlState_setFunction(STATE_RESET, modifyline_reset);
	mdlState_setFunction(STATE_COMPLEX_DYNAMICS, modifyline_show);
}


/*----------------------------------------------------------------------+
|									|
| name		modifyline_show					|
|									|
| author	beizhan      2001.03|
|									|
+----------------------------------------------------------------------*/
void modifyline_show(Dpoint3d *pPoint, int view, int drawMode, int add)
{
	MSElement		el;

	g_LinePoint[g_modifyNum] =*pPoint;
	mdlLineString_create(&el, NULL, g_LinePoint, g_numVerts);
	mdlElement_display(&el, drawMode);	
}

/*----------------------------------------------------------------------+
|									|
| name		modifyline_modify		|
|									|
| author	beizhan       2001.03
|									|
+----------------------------------------------------------------------*/
void modifyline_modify(Dpoint3d* pPoint,int view)
{
	MSElement		el;
	
	if (g_modifyEdP ==NULL && g_LinePoint ==NULL)
		return;

	g_LinePoint[g_modifyNum] =*pPoint;
	mdlLineString_create(&el, NULL, g_LinePoint, g_numVerts);

	mdlElmdscr_undoableDelete(g_modifyEdP,g_filePos,TRUE);
	mdlElmdscr_freeAll(&g_modifyEdP);

	mdlElement_add(&el);
	mdlElement_display(&el, NORMALDRAW);
	modifyline_reset();		
}
/*----------------------------------------------------------------------+
|									|
| name		modifyline_reset			|
|									|
| author	beizhan 		2001.03		|
|									|
+----------------------------------------------------------------------*/

void modifyline_reset(void)
{
	modifyElement();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -