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

📄 modsymb.mc

📁 microstation MDL入门指导手册!
💻 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 + -