Download as doc, pdf, or txt
Download as doc, pdf, or txt
You are on page 1of 13

Mở đầu

MDL – “MicroStation Development Language được giới thiệu trong


Microstation v.4 năm 1991 như là một giải pháp cho việc phát triển một
cách chuyên nghiệp những ứng dụng của Microstation. Với mục đích là để
thiết kế framework đi đầu mà có đủ sức mạnh tạo ra cả những ứng dụng đơn
giản cho khách hàng cũng như những ứng dụng trong thương mại, những
ứng dụng này hoàn toàn thích hợp với hệ thống Microstation, nghĩa là trông
giống và có vẻ như hợp thành một thể thổng nhất với Microstation. Một
công cụ có thể thay thế cho MicroCSL hoặc UCM và đó chính là MDL.
MDL có cách viết mã độc lập, đó là lí do tại sao sự tham chiếu tới bất
kì hệ thống chức năng phụ thuộc nào đều hầu như bị xoá hoặc thay thế bởi
các chức năng rộng hơn của MDL. Tuy nhiên hiện nay, mục tiêu của
Microstation chỉ là chạy trên nền Windows.
MDL là một thế mạnh của Microstation về khía cạnh lập trình. Để
phát triển các ứng dụng chuyên nghiệp trong Microstation chúng ta cần nắm
được những yếu tố cơ bản của lập trình MDL. Bài báo cáo này đưa ra cơ sở
lý thuyết và một chương trình minh họa cho việc lập trình bằng MDL.

I. Cơ sở lý thuyết
1. Khái niệm
Trước hết, MDL không phải là ngôn ngữ C cho Microstation. Chúng
ta dùng C làm nền tảng và sử dụng các tính năng cần thiết như chương trình
dịch, linker, runtime, giao diện đồ họa người dùng... để phát triển
Microstation.
MDL cho phép phát triển những ứng dụng có khả năng tương tác với
nhau chạy trên MicroStation và nhưng ứng dụng này thoạt nhìn có vẻ giống
như là một phần của MicroStation. Thực tế, các chức năng MicroStation
chính là những ứng dụng của nó.
Phát triển các ứng dụng có khả năng thích nghi với các chuẩn phẩn
cứng khác nhau. MDL loại bỏ ở mức độ cho phép những hệ đồ hoạ phụ, hệ
điều hành và CPU. Việc chuyển các ứng dụng của MDL sang một hệ phần
cứng khác chỉ đơn thuần là việc chuyển các file nguồn và xây dựng lại.
Đồng thời cho phép sắp xếp những thông tin về giao diện để để dịch sang
những ngôn ngữ khác nhau một cách hiệu quả.

2. Tổng quan về MDL framework


- State machine engine : Microstation hoạt động như một bộ máy
trạng thái. Nó theo dõi tất cả các sự kiện như là sự kiện đầu vào bằng bàn
phím, chuột, các sự kiện biến đổi trạng thái, sự kiện thời gian, và các sự kiện
khác. Khi một sự kiện xuất hiện, Microstation kiểm tra trạng thái của nó và
tác động trở lại sự kiện.
- MDL runtime : là tập hợp con của MDL framework, nó hỗ trợ sự
thực thi (nhưng không phải sự phát triển) của ứng dụng MDL. MDL runtime
bao gồm MDL Virtual Machine, MDL debugger, MDL task manager, quản
lý tài nguyên, quản lý hộp thoại, quản lý tác vụ của hệ thống và các dịch vụ
khác.
- MDL virtual machine : đặc tính không phụ thuộc vào nền phần
cứng thực sự là một trong những lý do vì sao mã nguồn MDL không được
biên dịch trực tiếp vào các chỉ thị của CPU mà hơn thế lại được đưa vào
code giả được biên dịch bởi MicroStation MDL virtual machine. Điều đó
nghĩa là chuơng trình MDL không thể chạy được ngoài môi trường
Microstation.
MDL virtual machine đóng vai trò là giao diện hay lớp trung gian giữa
p-code nhị phân MDL và bộ vi xử lý (hay nền hệ điều hành) nơi thực hiện
các chỉ thị của chương trình.
- MDL debugger : Bentley thiết kế cùng với Virtual Machine
chuương trình gỡ rối theo dòng lệnh không phụ thuộc vào platform. Nhưng
không may đó là điểm yếu của MDL framework. Chương trình debugger có
thể thực hiện các tác vụ cần thiết, nhưng chỉ thân thiện khi hoạt động theo
kiểu “command-line” Nếu bạn thích gõ lệnh hơn là click chuột thì bạn có thể
hài lòng với lập trình MDL. Dù vậy, bạn sẽ thấy các kinh nghiệm gỡ rối với
các ứng dụng MDL là rất hữu ích.
- MDL Utilities

Tên tiện ích Mô tả

bmake Làm cho các tiện ích được sử dụng


trong biên dịch, liên kết tự động, và
xây dựng tài nguyên cho các ứng
dụng phức tạp.
mcomp Là chương trình biên dịch được sử
dụng để dịch file nguồn MDL.
mlib Các thư viện được sử dụng để quản
lý tệp hình ảnh trong file thư viện.
mlink Linker được dùng để kết hợp các đối
tượng vào chương trình.
rcomp Chương trình dịch tài nguyên được
dùng để biên dịch tài nguyên nguồn.
rlib Thư viện tài nguyên được dùng để
trộn nhiều file tài nguyên vào một
file.
rsctype Dùng để tạo ra sự mô tả các kiểu cho
một nhóm các hàm built-in được sử
dụng trong biểu ngữ C trong runtime.

- Các kiểu file nguồn

Kiểu file Mô tả
.h Được tham chiếu đến như tệp tiêu đề
hay tệp include. Tệp tiêu đề được
khai báo trong file .mc, .mt và .r.
.ma Được tham chiếu đến như tệp ứng
dụng, đây là file nguồn nơi tất cả các
tài nguyên được liên kết với nhau
trong một ứng dụng. File ứng dụng
có thể được tạo ra bởi mlink hay rlib.
.mc Được tham chiếu đến như nguồn
MDL.
.mke Được tham chiếu đến như makefile,
dược đọc bởi bmake để biết cách
thức xây dựng một ứng dụng.
.ml Được tham chiếu đến như file thư
viện, được tạo ra và cập nhật bởi
mlib.
.mm Được tham chiếu đến như map file,
được tạo ra bởi mlink.

.mo Được tham chiếu đến như file đối


tượng, được tạo ra bởi mcomp.
Những file này là đầu vào của mlink.
.mp Được tham chiếu đến như file
chương trình. Đây là một kiểu file tài
nguyên mà có thể trộn với các tài
nguyên khác sử dụng rlib.File
chương trình được tạo ra bởi mlink.
.mt Được tham chiếu đến như type file,
file nguồn dược sử dụng để tạo định
nghĩa kiểu cho các biểu thức C trong
hàm built-in. rsctype đọc type file và
tạo ra file tài nguyên nguồn
.r Được tham chiếu đến như file tài
nguyên nguồn, chẳng hạn như sự mô
tả hộp thoại, bảng lệnh...rcomp đọc
các file tài nguyên nguồn và tạo ra
file tài nguyên.
.rsc Được tham chiếu đến như file tài
nguyên, rcomp tạo ra các file tài
nguyên này.
3. MDL API
Giao diện lập trình ứng dụng MDL, viết tắt là MDL API, là một tập
hợp các hàm và biến được khai báo mà trong đó Microstation cung cấp chủ
yếu cho người lập trình phần mềm. Thư viện MDL API là một trong những
phần cốt lõi của MDL framework. Các hàm của MDL API thuờng được coi
như các hàm gắn liền (built-in) bởi vì bản thân nó chỉ được thấy ở bên trong
các thủ tục của Microstation. Các hàm built-in giống như thế được các lập
trình viên sử dụng để phát triển các thành phần thiết yếu của Microstation.
Bởi vậy, khi là một người lập trình MDL, bạn có cũng các khả năng để điều
khiển Microstation như Bentley đã làm.
MDL API là một API phức tạp nhất trong các API của Bentley như
Microstation Basic, JMDL....MDL runtime và các hàm API cư trú trong một
tập hợp các thư viện liên kết động (DLL), do đó nó được thực thi trực tiếp.
Điều này là rất quan trọng cho quá trình hoạt động. Một số thư viện API
(khoảng 14) được thiết kế như là Thư viện dùng chung của Microstation
(Microstation Shared Libraries-MSL) đã được biên dịch.
Chúng ta có thể chia các hàm API thành 4 nhóm:
- Hàm của cơ chế CAD
- Hàm của ứng dụng và hệ thống
- Hàm cơ sở dữ liệu
- Giao diện người dùng đồ họa (GUI)
Thông thường, các hàm đó có cấu trúc chung như sau :
mdl + lĩnh vực lập trình + gạch dưới + thao tác
Ví dụ: mdlFile_create, mdlLineString_create.
Việc thực hiện MDL được diễn ra như sau : mã nguồn viết bằng ngôn
ngữ C sẽ được chương trình biên dịch chuyển thành pseudocodes (code giả -
viết tắt là p-code) được thông dịch bởi Microstation runtime. MDL API tồn
tại trong cả mã nguồn của Microstation như DLL hoặc trong MSL được
thông dịch. MDL có thể tương tác với các module liên kết động (DLM). Tất
cả các thành phần này chạy trong tiến trình của Microstation.
Tổng quan về các hàm MDL API

3.1. Hàm các đối tượng có thể hiển thị

Kiểu API # File fdf Tiền tố trong hàm chú giải


API
B-spline 152 msbsplin.fdf mdlBspline_ Dùng để thiết lập
functions và quản lí B-
spline
Accudraw 1 mdllib.fdf mdlAccudraw_ để Accudraw đạt
được sự tối ưu
Cell 42 mscell.fdf mdlCell_ Dùng để đọc, lặp
functions lại, tạo thành, thực
mdlCellIterator_ hiện hoặc xoá các
cell trong thư viện
21 msscell.fdf mdlSharedCell_ cell, và để đặt các
Shared Cell cell vào file
functions
design

Element 2 changetrack.fdf mdlChangeTrack_ Cho phép giám


sát mọi sự thay
change đổi trong file
tracking DGN
Element 20 mselemen.fdf mdl..._create Dùng cho sự tạo
creation thành các đối
tượng ( Arc,
Circle, Cone,
Curve, Ellipse,
Line, LineString,
PointString,
Shape, Surface,
Text, TextNode,
ComplexChain)
Element 13 mselemen.fdf mdl..._extract Để tách thông tin
information từ các đối tượng
extraction cụ thể.
Element 43 mselemen.fdf mdlElement_ Dùng cho thao tác
common trên các đối tượng
functions đơn phổ biến
Element 4 msmisc.fdf mdlIntersect_ Đáp ứng như API
intersection cho các đối tượng
giao nhau
Element 4 msmisc.fdf mdlModify_ Cho phép thay đổi
modification các đối tượng đơn
hoặc sự miêu tả
các đối tượng
Element 105 mselmdsc.fdf mdlElmdscr_ Dùng để thực hiện
descriptor các thao tác với
functions mdlCopyContext_ các đối tượng
thành phần trong
các đối tượng
phức tạp
Element 5 msmisc.fdf mdlClip_ Cho phép liên kết
clipping các đối tượng
Element 23 msassoc.fdf mdlAsoc_ Cung cấp sự truy
association cập vào khả năng
liên kết các đối
tượng để tạo thành
các điểm liên kết
trong kích thước,
các đường và các
cell dùng chung
Element 34 mslinkge.fdf mdlLinkage_ Cho phép gắn kết,
linkage thay đổi, xoá hoặc
tách các gói cơ sở
dữ liệu của các
đối tượng
Multi-line 21 msmline.fdf mdlMline_ Dùng để thiết lập
elements và thay đổi các
đối tượng đa
đường
Measurments 8 msmisc.fdf mdlMeasure_ Lấy các thuộc tính
functions kích thước cơ bản
của sự miêu tả các
đối tượng
Transient 14 mstrnsnt.fdf mdlTransient... Cung cấp API cho
elements các đối tượng
chuyển tiếp
Dimensioning 23 msdim.fdf mdlDim_ Dùng cho các thao
element tác trên kích thước
Function 28 msdimstyle.fdf mdlDimStyle_ của đối tượng
Nested 30 msdisplaypath.h mdlDisplayPath_ Cho phép quản lí
nhiều trường hợp
Element của đối tượng
instances trong các file hoặc
presentation cell tham chiếu
Element 30 elementref.h elementRef_ Cho phép nhận
reference dạng duy nhất một
đối tượng trong
session
Surface 7 mselemen.fdf mdlSurface_ Dùng cho các thao
creation tác bề mặt
Patterining 8 msmisc.fdf mdlPattern_
Mesh 71 msmdlmesh.fdf mdlMesh_ Dùng cho các khía
elements cạnh hình học
3.2. Tìm kiếm đối tượng

Loacate 40 mslocate.fdf mdlLocate_ Cho phép định vị các


elements mdlAutoLocate_ đối tượng
Scanning 62 msscan.fdf mdlScan_ API dùng để quét file
cho các đối tượng
msscancrit.fdf mdlScanCriteria_
Snapping 19 mslocate.fdf mdlSnap Cho phép bắt các đối
tượng bằng cách thăm
mdlAccuSnap_ dò Các điểm hoặc tự
động khi con chuột đi
qia các đối tượng
Hit list 10 mshitpath.h mdlHitPath_ Tìm kiếm đối tượng
theo cách gần các
điểm kiểm tra nhất

3.3. Hàm container

Matrix 26 msmdlmatrix.fdf mdlMatrix_ Đáp ứng như một


storage container cho các
ma trận số
Embedded 165 embedded....fdf jdmlEmbedded.... Cung cấp nhiều loại
Arrays linear container có
giá trị
Dynamic 13 msdarray.fdf mdlDArray_... cung cấp các mảng
arrays động đơn
String List 37 msstrlst.h mdlStringList_ Cho phép sử dụng
danh sách các chuỗi
rmgrstrl.h strlist_ như một mảng động

3.4. Giao diện người dùng

Input 23 msinput.fdf mdlInput_ API dùng cho việc quản


handling lí đầu vào
functions
Output 47 msoutput.fdf mdlOutput_ API dùng cho các thông
handling điêp đầu ra

State control 21 msstate.fdf mdlState_


Cho phép thực hiện các
hàm điều khiển trạng
thái
Windows 87 mswindow.fdf mdlWindow_ general windows
functions management, drawing
and docking quản lí hệ
điều hành window một
cách tổng quát
Function key 9 msmisc.fdf mdlFuncKey_ Điều khiển thực đơn
Func key
Dialog box 705 msdialog.fdf mdlDialog_ API cho hộp thoại và
and Dialog danh mục thoại
item ditemlib.fdf
functions
msritem.fdf

htmllib.fdf

miscilib.fdf

..and otheres
View 193 msview....fdf mdlView.... Cho phép xem và quản
handling lý các nhóm xem
Digitizer 3 msinput.fdf mdlDigitize_ Điều khiển sự kiện số
function hóa

3.5. Tài nguyên

Resource 25 msrmgr.h mdlResource_ API cho quản lý tài


management nguyên
Parse 10 msparse.fdf mdlParse_ Hàm Command table
command
table

3.6. Thao tác


C Expression 18 mscexpr.fdf mdlCExpression Cho phép đánh giá
_ biểu thức C trong
runtime
BASIC 3 msbasic.fdf mdlBasic_ Sử dụng cho macro của
interface BASIC
inter 19 extprg.fdf mdlExternal_ Cho phép chương trình
program bên ngoài giao tiếp với
communicati extprg_ Microstation
on
Dynamic link 14 dlmsys.fdf dlmSystem_ Cho phép thao tác giữa
modules DLM(DLL) và MDL

7. Hệ thống

MDL 85 mssystem.fdf mdlSystem_ API cho các hàm hệ


system thống khác nhau, điều
khiển các sự kiện và
các biến
Undo API 9 msundo.fdf mdlUndo_ quản lí các hàm
redo/undo
Version 2 msver.fdf mdlVersion_ Tách các thông tin về
các bản đang chạy
hiện thời của
MicroStation
License API 14 mslicens.fdf mdlLicense_ Cho phép truy vấn
các thông tin bản
quyền
Active 4 msmisc.fdf mdlParams_ Thay đổi các tham số
setting của Microstation
functions

API của MDL không chỉ chứa các hàm mà còn bao gồm một tập hợp
các biến toàn cục mà bạn có thể truy nhập vào trong ứng dụng MDL của
bạn. Các biến này như là bộ nhớ dùng chung giữa Microstation và các ứng
dụng MDL. Mặc dù tên và kiểu của các biến toàn cục này đã được chương
trình biên dich của Microstation biết nên bạn không cần khai báo rõ ràng
chúng trong chương trình nhưng để lập trình tốt thì nên khai báo các biến đó
như là các biến ngoài.
Rất nhiều các biến built-in là kiểu cấu trúc hoặc kiểu hợp (union),
chẳng hạn như biến tcb (terminal control block) là một con trỏ trỏ đến cấu
trúc lưu thông tin về file design hiện thời..
Bảng dưới đây liệt kê một số kiểu biến cơ bản với tên, mô tả và tệp
tiêu đề chứa nó.

Variable Type Description


dgnBuf MSElement* Giữ thông tin của các đối tượng
hiện thời trong dgnBuf.

statedata MSStateData
Chứa các thông tin trong hàm
trạng thái hiện thời, được định
nghĩa trong global.h
tcb Tcb* “Terminal Control Block” giữ tất
cả các thông tin trong file DGN
hiện thời, được định nghĩa trong
tcb.h
mgds_modes Mgds_modes Chứa các thông tin về sự thực thi
hiện thời của MicroStation, được
định nghĩa trong global.h
graphConfig MSGraphConfig Chứa các cấu hình đồ hoạ, được
định nghĩa trong global.h
mdlCommandNumber long Chứa số lệnh của ứng dụng MDL
gần nhất
userPrefsP UserPrefs* Chứa các thói quen khác nhau của
người sử dụng, được định nghĩa
trong userpref.h
mgdsPrompt[35] char Giữ các bài text treong dấu nhắc,
mặc định là "uStn>"
render_designLightP void* Cho phép định nghiã các độ sáng
thích hợp, được định nghĩa trong
light.h
msTransientElmP TransDescrP Mục đích chung cho sự miêu tả
tạm thời
mdlErrno int Số lỗi cho các hàm MDL khác
nhau
III. Chương trình minh họa
Chương trình có chức năng chính là tính toán tọa độ điểm đo chi tiết
từ file số liệu đầu vào, hiển thị các điểm đó lên file dgn trong Microstation
và tạo ra file tọa độ các điểm chi tiết.
Chương trình sử dụng các hàm chính là
- Hàm double Phvi(double XM,double YM,double XH,double YH)
để tính phương vị của một cạnh.
- Hàm int File_Read(void) đọc file đầu vào.
- Hàm int File_getFile(char *filename,char *defaultExtension,char
*prompt) nhận file được nhập vào.
- Hàm int File_pushButtonHook(DialogItemMessage *dimP) hiển
thị các mức móc nối trong hộp thoại mở file.
- Hàm int File_unloadFunction(void) có chức năng unload một hàm.
- Hàm int File_dialogBoxHook để nhận hộp thoại.
Chương trình gồm các file
- file.mc : là file nguồn
- file.h và filetxt.h : là 2 tệp tiêu đề.
- filetyp.r và filedlg.r: là 2 file tài nguyên
- filetyp.mt
- File số liệu đo chi tiết đầu vào.
- File bat để chạy chương trình.

Kết luận
MDL là một môi trường phát triển hoàn chỉnh, cho phép các ứng dụng
lợi dụng tối đa khả năng của Microstation CAD engine. MDL có thể được
dung để phát triển các tiện ích đơn giản, những yêu cầu của khách hàng, hay
những ứng dụng trong thương mại đòi hỏi cần sự tinh vi, chi tiết.
Trên đây chúng ta đã tìm hiểu ngôn ngữ MDL để lập trình trong
Microstation. Đây là một hướng phát triển các ứng dụng chuyên nghiệp
trong Microstation để mang lại hiệu quả cao trong công việc. Chuơng trình
minh họa còn đơn giản và có nhiều thiếu sót nên sẽ được nghiên cứu phát
triển trong thời gian sắp tới để có thể hoàn thiện hơn.

You might also like