📄 modsymb.mc
字号:
/*----------------------------------------------------------------------+
| Include Files |
+----------------------------------------------------------------------*/
#include <time.h>
#include <stdarg.h>
#include <mdl.h> /* MDL Library funcs structures & constants */
#include <global.h>
#include <mselems.h>
#include <userfnc.h>
#include <tcb.h>
#include <msrmgr.h>
#include <scanner.h>
#include <msparse.fdf>
#include <msoutput.fdf>
#include <mssystem.fdf>
#include <msstate.fdf>
#include <mslocate.fdf>
#include <mselemen.fdf>
#include <msmisc.fdf>
#include <msselect.fdf>
#include <msscan.fdf>
#include "modsymb.h"
#define LEVEL 2
#define STYLE 3
#define COLOR 4
#define WEIGHT 5
int mode;
/*--------------------------------------------------------------------+
| name edltelem |
+--------------------------------------------------------------------*/
Private int editelem
(
MSElement *el
)
{
int actstyle;
ULong actlevel,actcolor,actweight;
mdlParams_getActive(&actlevel, ACTIVEPARAM_LEVEL);
mdlParams_getActive(&actcolor, ACTIVEPARAM_COLOR);
mdlParams_getActive(&actweight, ACTIVEPARAM_LINEWEIGHT);
mdlParams_getActive(&actstyle, ACTIVEPARAM_LINESTYLE);
switch (mode)
{
case LEVEL:
if (mdlElement_getType(el) == CELL_HEADER_ELM)
return MODIFY_STATUS_NOCHANGE;
mdlElement_setProperties(el,&actlevel,NULL,NULL,NULL,
NULL,NULL,NULL,NULL);
break;
case COLOR:
mdlElement_setSymbology(el,&actcolor,NULL,NULL);
break;
case WEIGHT:
mdlElement_setSymbology(el,NULL,&actweight,NULL);
break;
case STYLE:
mdlElement_setSymbology(el,NULL,NULL,&actstyle);
break;
}
return MODIFY_STATUS_REPLACE;
}
/*--------------------------------------------------------------------+
| name change_all |
+--------------------------------------------------------------------*/
Private void change_all
(
void
)
{
ULong elemAddr[50], eofPos, filePos;
int scanWords, status, i, numAddr;
Scanlist scanList;
mdlScan_initScanlist(&scanList);
mdlScan_noRangeCheck(&scanList);
mdlOutput_message("Scanning file....");
scanList.scantype = ELEMTYPE|ONEELEM;
scanList.extendedType = FILEPOS;
scanList.typmask[0] = TMSK0_LINE|TMSK0_LINE_STRING|TMSK0_SHAPE;
scanList.typmask[0]|= TMSK0_TEXT_NODE|TMSK0_CURVE;
scanList.typmask[0]|= TMSK0_CONIC|TMSK0_CMPLX_SHAPE;
scanList.typmask[0]|= TMSK0_ARC|TMSK0_CMPLX_STRING|TMSK0_ELLIPSE;
scanList.typmask[1] = TMSK1_TEXT|TMSK1_SURFACE|TMSK1_SOLID;
eofPos = mdlElement_getFilePos (FILEPOS_EOF, NULL);
mdlScan_initialize (0, &scanList);
filePos=0L;
/* loop through all text elements in file */
do
{
scanWords = sizeof(elemAddr)/sizeof(short);
status = mdlScan_file (elemAddr, &scanWords, sizeof(elemAddr), &filePos);
numAddr = scanWords / sizeof(short);
for (i=0; i<numAddr; i++)
{
if (elemAddr[i] >= eofPos)
break;
mdlModify_elementSingle (0,elemAddr[i],
MODIFY_REQUEST_HEADERS,
MODIFY_ORIG,editelem,NULL,0L);
}
} while (status == BUFF_FULL);
mdlOutput_prompt("");
}
/*--------------------------------------------------------------------+
| name setSearchType |
+--------------------------------------------------------------------*/
Private void setsearchType
(
void
)
{
static int searchType[]={CELL_HEADER_ELM,LINE_ELM,
LINE_STRING_ELM,SHAPE_ELM,
TEXT_NODE_ELM,CURVE_ELM,
CMPLX_STRING_ELM,
CONIC_ELM,CMPLX_SHAPE_ELM,
ELLIPSE_ELM,ARC_ELM,
TEXT_ELM,SURFACE_ELM,SOLID_ELM};
/*initialize search creteria to find nothing*/
mdlLocate_noElemNoLocked();
/*add elements to search to list*/
mdlLocate_setElemSearchMask(sizeof(searchType)/sizeof(int),searchType);
}
/*--------------------------------------------------------------------+
| name mod_accept |
+--------------------------------------------------------------------*/
Private void mod_accept
(
void
)
{
ULong filePos;
DgnModelRefP currFile;
filePos = mdlElement_getFilePos(FILEPOS_CURRENT,&currFile);
mdlModify_elementMulti(currFile, /* file to process */
filePos, /* file position for element */
MODIFY_REQUEST_HEADERS, /* process complex headers */
MODIFY_ORIG, /* modify original element */
editelem, /* modify routine for each element */
NULL, /* parameters for editelem */
TRUE); /* process graphic group */
/*restart the element location process*/
mdlLocate_restart(FALSE);
}
/*--------------------------------------------------------------------+
| name changeFenceContents |
+--------------------------------------------------------------------*/
Private int changeFenceContents
(
void
)
{
ULong filePos;
DgnModelRefP currFile;
filePos = mdlElement_getFilePos(FILEPOS_CURRENT,&currFile);
mdlModify_elementSingle (currFile,
filePos, /* file position for element */
MODIFY_REQUEST_HEADERS, /* process complex headers */
MODIFY_ORIG, /* modify original element */
editelem, /* modify rout/ne for each element */
NULL, /* parameters for editelem */
0L); /* offset for component elements */
return SUCCESS;
}
/*--------------------------------------------------------------------+
| name change single |
+--------------------------------------------------------------------*/
Private void change_single
(
void
)
{
setsearchType();
mdlState_startModifyCommand(
change_single,
mod_accept, /* function to call on DATA */
NULL, /* function to call for DYNAMIC */
NULL, /* function to call on SHOW */
NULL, /* function to call on CLEAN */
1, /* index into MESSAGE LIST */
3, /* index into PROMPT LIST */
TRUE, /* Modify SELECTION SET ? */
FALSE); /* additional data points required */
mdlLocate_init();
}
/*--------------------------------------------------------------------+
| name modsing_level |
+--------------------------------------------------------------------*/
cmdName void modsing_level
(
)
cmdNumber CMD_MODIFY_LEVEL_SINGLE
{
mode=LEVEL;
change_single();
}
/*--------------------------------------------------------------------+
| name modsing_color |
+--------------------------------------------------------------------*/
cmdName void modsing_color
(
)
cmdNumber CMD_MODIFY_COLOR_SINGLE
{
mode=COLOR;
change_single();
}
/*--------------------------------------------------------------------+
| name modsing_weight |
+--------------------------------------------------------------------*/
cmdName void modsing_weight
(
)
cmdNumber CMD_MODIFY_WEIGHT_SINGLE
{
mode=WEIGHT;
change_single();
}
/*--------------------------------------------------------------------+
| name modsing_style |
+--------------------------------------------------------------------*/
cmdName void modsing_style
(
)
cmdNumber CMD_MODIFY_STYLE_SINGLE
{
mode=STYLE;
change_single();
}
/*--------------------------------------------------------------------+
| name modall_level |
+--------------------------------------------------------------------*/
cmdName void modall_level
(
)
cmdNumber CMD_MODIFY_LEVEL_ALL
{
mode=LEVEL;
change_all();
}
/*-------------------------------------------------------------------+
| name modall_color |
+-------------------------------------------------------------------*/
cmdName void modall_color
(
)
cmdNumber CMD_MODIFY_COLOR_ALL
{
mode=COLOR;
change_all();
}
/*-------------------------------------------------------------------+
| name modall_weight |
+-------------------------------------------------------------------*/
cmdName void modall_weight
(
)
cmdNumber CMD_MODIFY_WEIGHT_ALL
{
mode=WEIGHT;
change_all();
}
/*--------------------------------------------------------------------+
| name modall_style |
+--------------------------------------------------------------------*/
cmdName void modall_style
(
)
cmdNumber CMD_MODIFY_STYLE_ALL
{
mode=STYLE;
change_all();
}
/*--------------------------------------------------------------------+
| name modfence_level |
+-------------------------------------------------------------------*/
cmdName void modfence_level
(
)
cmdNumber CMD_FENCE_MODIFY_LEVEL
{
setsearchType();
mode=LEVEL;
mdlState_startFenceCommand(changeFenceContents,
NULL, /*function to define fence outline*/
NULL, /*function for DATA point*/
modfence_level, /*function for RESET*/
1, /*message for command name*/
4, /*prompt for fence*/
FENCE_NO_CLIP);
}
/*--------------------------------------------------------------------+
| name modfence_color |
+--------------------------------------------------------------------*/
cmdName void modfence_color
(
)
cmdNumber CMD_FENCE_MODIFY_COLOR
{
setsearchType();
mode=COLOR;
mdlState_startFenceCommand(changeFenceContents,
NULL, /*function to define fence outline */
NULL, /*function tor DATA point*/
modfence_color, /*function for RESET*/
1, /*message for command name*/
4, /*prompt tor fence*/
FENCE_NO_CLIP);
}
/*-------------------------------------------------------------------+
| name modfence_weight |
+-------------------------------------------------------------------*/
cmdName void modfence_weight
(
)
cmdNumber CMD_FENCE_MODIFY_WEIGHT
{
setsearchType();
mode=WEIGHT;
mdlState_startFenceCommand(changeFenceContents,
NULL, /*function to define fence outline*/
NULL, /*function tor DATA point*/
modfence_weight, /*function for RESET*/
1, /*message for command name*/
4, /*prompt tor fence*/
FENCE_NO_CLIP);
}
/*--------------------------------------------------------------------+
| name modfence_style |
+--------------------------------------------------------------------*/
cmdName void modfence_style
(
)
cmdNumber CMD_FENCE_MODIFY_STYLE
{
setsearchType();
mdlState_startFenceCommand(changeFenceContents,
NULL, /*function to define fence outline*/
NULL, /*function for DATA point*/
modfence_style, /*function for RESET*/
1, /*message for command name*/
4, /*prompt tor fence*/
FENCE_NO_CLIP);
}
/*----------------------------------------------------------------------+
| name main |
| author Chaohua Lin 8/04/2006 |
+----------------------------------------------------------------------*/
Public int main
(
int argc,
char *argv[]
)
{
RscFileHandle rfHandle;
if (mdlParse_loadCommandTable(NULL)== NULL)
mdlOutput_error("Unable to load command table.");
mdlResource_openFile(&rfHandle, NULL, FALSE);
mdlState_registerStringIds(0,1);
return SUCCESS;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -