📄 myapp.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 + -