📄 code.mc
字号:
/* ANSI C includes */
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
/* MDL H includes */
#include <mdl.h>
#include <cmdlist.h>
#include <dlogids.h>
#include <dlogitem.h>
#include <accudraw.h>
#include <mdlerrs.h>
#include <global.h>
#include <tcb.h>
#include <userfnc.h>
#include <mselems.h>
#include <cexpr.h>
#include <msrmgr.h>
#include <math.h>
#include <cmdclass.h>
#include <mstypes.h>
#include <clipdscr.h>
#include <wchar.h>
#include <elementref.h>
#include <listmodel.h>
#include <keys.h>
#include "ClipMap.h"
/* MDL FDF includes */
#include <ditemlib.fdf>
#include <dlogman.fdf>
#include <mscexpr.fdf>
#include <mscnv.fdf>
#include <msdialog.fdf>
#include <msoutput.fdf>
#include <msrsrc.fdf>
#include <msstate.fdf>
#include <mssystem.fdf>
#include <mselemen.fdf>
#include <msview.fdf>
#include <mscexpr.fdf>
#include <msinput.fdf>
#include <mselmdsc.fdf>
#include <msvec.fdf>
#include <msparse.fdf>
#include <msmisc.fdf>
#include <mscell.fdf>
#include <mslocate.fdf>
#include <msselect.fdf>
#include <mselmdsc.fdf>
#include <msscan.fdf>
#include <msrmatrx.fdf>
#include <mstmatrx.fdf>
#include <msdb.fdf>
#include <mselemen.fdf>
#include <mslstyle.fdf>
#include <modelindex.fdf>
#include <msmline.fdf>
#include <msscancrit.fdf>
#include <msparsestring.fdf>
#include <msdgnmodelref.fdf>
#include <mslinkge.fdf>
#include <msmodel.fdf>
#include <leveltable.fdf>
#include <mswindow.fdf>
#include <mscurrtr.fdf>
#include <listmodel.fdf>
#include <msfile.fdf>
#include <msdgncache.fdf>
#include <mswrkdgn.fdf>
#include <msmisc.fdf>
#include <msvba.fdf>
void ClipMap();
void ContentOp();
Private int main
(
int argc,
char *argv[]
)
{
mdlParse_loadCommandTable (NULL);
/* open the resource file that we came out of */
if (mdlResource_openFile (&rscFileH, NULL, 0)!=SUCCESS)
{
mdlOutput_error("Cannot open resource file");
}
setP = mdlCExpression_initializeSet(VISIBILITY_DIALOG_BOX, 0, FALSE);
ClipMap();
mdlSystem_exit(0,1);
return 0;
}
void ClipMap()
{
ULong elemAddr[50], filePos,EofPos;
int scanWords, status, i, numAddr;
ScanCriteria *scP;
MSElementDescr* pElemDsr;
ULong startPos;
DgnCacheP cache;
int mslink;
int styleID,lineStyle;
int levelID,colorID;
MSWChar pLevelNameOut[256];
char strlevelname[256];
int level;
MSWChar wLevel[50];
char sLevel[50];
cache = mdlModelRef_getCache(ACTIVEMODEL);
startPos = dgnCache_getGraphicElmStart(cache);
scP = mdlScanCriteria_create();
mdlScanCriteria_setReturnType (scP,MSSCANCRIT_RETURN_FILEPOS,FALSE,TRUE);
mdlScanCriteria_setModel(scP,MASTERFILE);
mdlScanCriteria_setStopFilePos (scP,mdlModelRef_getEof(ACTIVEMODEL));
EofPos = mdlElement_getFilePos(FILEPOS_EOF, NULL);
mdlSystem_startBusyCursor();
do
{
scanWords = sizeof(elemAddr)/sizeof(UShort);
status = mdlScanCriteria_scan (scP,elemAddr,&scanWords,&filePos);
//status = mdlScan_file (elemAddr, &scanWords, sizeof(elemAddr),&filePos);
numAddr = scanWords / sizeof(UShort);
for (i = 0; i < numAddr; i++)
{
if (elemAddr[i] >= EofPos) break;
mdlElmdscr_read(&pElemDsr, elemAddr[i], MASTERFILE, 0, NULL);
if(elemAddr[i] < startPos) continue;
mdlElmdscr_getProperties(&level, NULL, NULL, NULL, NULL, NULL, NULL, NULL, pElemDsr);
memset(wLevel, 0x00, sizeof(wLevel));
memset(sLevel, 0x00, sizeof(sLevel));
mdlLevel_getName(wLevel, 50, ACTIVEMODEL, level);
mdlCnv_convertUnicodeToMultibyte(wLevel, -1 ,sLevel, 50);
if(strcmp(sLevel,"湖泊")==0)
{
if(pElemDsr->el.ehdr.type == SHAPE_ELM || pElemDsr->el.ehdr.type == CMPLX_SHAPE_ELM)
{
if(g_clipP) mdlClip_free((void**)&g_clipP);
if(SUCCESS == mdlFence_fromElement(pElemDsr,tcb->lstvw))
{
tcb->fbfdcn.overlap = 1;
tcb->fbfdcn.fenceclip = 0;
mdlState_startFenceCommand(ContentOp, NULL, NULL, NULL, 0, 0, FENCE_NO_CLIP);
mdlFence_process(NULL);
}
}
}
mdlElmdscr_freeAll(&pElemDsr);
}
}while (status == BUFF_FULL);
mdlView_updateSingle(tcb->lstvw);
if(g_clipP) mdlClip_free((void**)&g_clipP);
mdlScanCriteria_free (scP);
mdlSystem_stopBusyCursor();
}
void ContentOp()
{
ULong filePos;
DgnModelRefP pModelRef;
MSElementDescr*origEdP;
ULong actualFilePos;
//ClipDescrP clipP=NULL;
BoolInt bOverlap;
int level;
MSWChar wLevel[50];
char sLevel[50];
mdlClip_getFence ((void**)&g_clipP);
filePos = mdlElement_getFilePos (FILEPOS_CURRENT, &pModelRef);
mdlElmdscr_read(&origEdP, filePos, pModelRef, FALSE, &actualFilePos);
mdlElmdscr_getProperties(&level,NULL,NULL,NULL,NULL,NULL,NULL,NULL,origEdP);
memset(wLevel,0x00,sizeof(wLevel));
memset(sLevel,0x00,sizeof(sLevel));
mdlLevel_getName(wLevel,50,ACTIVEMODEL,level);
mdlCnv_convertUnicodeToMultibyte(wLevel,-1,sLevel,50);
if(strcmp(sLevel,"湖泊")!=0)
{
if (mdlClip_isElemInside(&bOverlap, origEdP, (void*)g_clipP, tcb->lstvw, TRUE) != 0)
{
if(bOverlap)
{
MSElementDescr* inEdP=NULL;
MSElementDescr* outEdP=NULL;
if(SUCCESS == mdlClip_element(&inEdP,&outEdP,origEdP,pModelRef,(void*)g_clipP,0))
{
if(inEdP)
{
mdlElmdscr_add(inEdP);
mdlElmdscr_display(inEdP,pModelRef,NORMALDRAW);
mdlElmdscr_freeAll(&inEdP);
}
if(outEdP)
{
mdlElmdscr_add(outEdP);
mdlElmdscr_display(outEdP,pModelRef,NORMALDRAW);
mdlElmdscr_freeAll(&outEdP);
}
mdlElmdscr_undoableDelete(origEdP,actualFilePos,TRUE);
}
}
}
}
mdlElmdscr_freeAll(&origEdP);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -