簡介
全稱:MicroStationDevelopmentLanguageMDL是MicroStation的“套用引擎(ApplicationEngine)”,MDL可以直接在MicroStation中運行並且表現為MicroStation本身的一部分。許多MicroStation的命令都可以在MDL中套用。
組成
標準C(ANSIC)程式設計語言(當然有某些限制和擴展);
一整套開發工具(包括C編譯器、連線器、程式庫、資源編譯器和資源庫、Make程式以及調試工具);
MicroStation內部的用於執行MDL應用程式的偽碼解釋器;
MicroStation內部的MDL調試器;
大量的運行庫函式;
可以改變MicroStation各種行為的鉤子(Hooks)函式,所謂鉤子函式是指那些在某種事件發生時被MicroStation自動執行的函式;
GUI開發工具,可以用於開發基於Motif的圖形用戶界面(包括:對話框、下拉選單等);
資源管理器;
應用程式
在MicroStation命令視窗中運行MDL套用時,可以指定一個套用名稱和任務識別碼(TaskID),其中前者是必須的。具體使用方法如下:
MDLLOAD│SILENTLOAD[DEBUG│NODEBUG]<套用名>[,<任務識別碼>][<參數>]
MicroStation將首先在當前目錄下查找用戶在命令行中指定的套用,如果找不到,再到由MicroStation環境變數MS_EXE和MS_MDL指定的目錄下去尋找。
如果用戶未指定應用程式的擴展名,MicroStation將首先尋找無擴展名的檔案,其次才是.MA檔案和.RSC檔案。因此運行時最好鍵入應用程式的全名。
卸載MDL套用的命令為:
MDLUNLOAD│SILENTUNLOAD[<任務識別碼>]
MDL套用還可以在MDL對話框中裝載運行,通過MDL對話框也可以卸載MDL套用。
高級調用方式
在一個MDL套用中調用另一個MDL套用:使用MicroStation的內部函式mdlSystem_LoadMDLProgram;
在MicroStation初始化時(打開DGN檔案之前或者進入圖形模式之前)調入MDL套用:使用環境變數MS_INITAPPS和配置變數MS_DGNAPPS,如果要調用多個MDL程式,用分號(;)隔開,語法如下:MS_DGNAPPS=應用程式名[,任務識別碼][/D];
在DGN檔案打開時運行MDL套用:使用mdlSystem_CreateStartupElement函式在DGN檔案中創建一個啟動元素(Start-upElement,類型代碼為66),即可在MicroStation打開DGN檔案後立即運行指定的MDL程式;
KEYIN套用:MDLKEYIN<套用名><命令字串>。
高級卸載方式
在程式中使用標準C的“exit”函式卸載程式;
MicroStation退出時可自動卸載MDL程式;
應用程式發生嚴重錯誤時會自動退出;
在一個套用中卸載另一個套用使用MicroStation內部函式mdlSystem_unloadMDLProgram;
在MDL調試器中使用QUIT命令可以卸載一個應用程式。
附:
MicroStation的開發工具
UCMs…………UserCommands
MicroCSL……MicroStationCustomerSupportLibrary
MDL……………MicroStationDevelopmentLanguage
MDLMemoryDescriptorList
//I/Osystemdefinitions.
//
//DefineaMemoryDescriptorList(MDL)
//
//AnMDLdescribespagesinavirtualbufferintermsofphysicalpages.The
//pagesassociatedwiththebufferaredescribedinanarraythatisallocated
//justaftertheMDLheaderstructureitself.
//
//Onesimplycalculatesthebaseofthearraybyaddingonetothebase
//MDLpointer:
//
//Pages=(PPFN_NUMBER)(Mdl+1);
//
//Noticethatwhileinthecontextofthesubjectthread,thebasevirtual
//addressofabuffermappedbyanMDLmaybereferencedusingthefollowing:
//
//Mdl->StartVa|Mdl->ByteOffset
//
typedefstruct_MDL{
struct_MDL*Next;
CSHORTSize;
CSHORTMdlFlags;
struct_EPROCESS*Process;
PVOIDMappedSystemVa;
PVOIDStartVa;
ULONGByteCount;
ULONGByteOffset;
}MDL,*PMDL;
#defineMDL_MAPPED_TO_SYSTEM_VA0x0001
#defineMDL_PAGES_LOCKED0x0002
#defineMDL_SOURCE_IS_NONPAGED_POOL0x0004
#defineMDL_ALLOCATED_FIXED_SIZE0x0008
#defineMDL_PARTIAL0x0010
#defineMDL_PARTIAL_HAS_BEEN_MAPPED0x0020
#defineMDL_IO_PAGE_READ0x0040
#defineMDL_WRITE_OPERATION0x0080
#defineMDL_PARENT_MAPPED_SYSTEM_VA0x0100
#defineMDL_FREE_EXTRA_PTES0x0200
#defineMDL_DESCRIBES_AWE0x0400
#defineMDL_IO_SPACE0x0800
#defineMDL_NETWORK_HEADER0x1000
#defineMDL_MAPPING_CAN_FAIL0x2000
#defineMDL_ALLOCATED_MUST_SUCCEED0x4000
#defineMDL_MAPPING_FLAGS(MDL_MAPPED_TO_SYSTEM_VA|\
MDL_PAGES_LOCKED|\
MDL_SOURCE_IS_NONPAGED_POOL|\
MDL_PARTIAL_HAS_BEEN_MAPPED|\
MDL_PARENT_MAPPED_SYSTEM_VA|\
MDL_SYSTEM_VA|\
MDL_IO_SPACE)
模型包
簡介
MDL檔案並不是單純的模型檔案,他是一個檔案包,裡面包含模型,貼圖,所有動作,以及腳本。
編繪
MDL檔案並不是單純的模型檔案,他是一個檔案包,裡面包含模型,貼圖,所有動作,以及腳本。所以要想建立一個MDL檔案是很麻煩的,可以找一個現成的MDL檔案(從CS或者半條命里找),用Milkshape的外掛程式給解壓縮,選單tools-hl-decompnormalhlmdlfile,。解完後找到裡面的後綴SMD的檔案,其中一個是模型,用MS導入3DS,套用這個SMD里的骨骼,在MS里設定好權重,然後覆蓋這個SMD檔案。接著選單tools-hl-Compileqcfile選擇剛才解壓縮出來的一個後綴QC的檔案把MDL重新打包就可以了。
.mdl
用rose生成的格式檔案,它支持UML用來畫用例圖,序列圖,狀態圖,類圖等;
不能用powerdesigner打開你可以下載一個rose看看。