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

📄 code.mc

📁 scan file in microstation, simple example
💻 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 + -