Bao Cao

  • November 2019
  • PDF

This document was uploaded by user and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this DMCA report form. Report DMCA


Overview

Download & View Bao Cao as PDF for free.

More details

  • Words: 2,989
  • Pages: 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. Là chương trình biên dịch được sử dụng để dịch file nguồn MDL. Các thư viện được sử dụng để quản lý tệp hình ảnh trong file thư viện. Linker được dùng để kết hợp các đối tượng vào chương trình. Chương trình dịch tài nguyên được dùng để biên dịch tài nguyên nguồn. Thư viện tài nguyên được dùng để trộn nhiều file tài nguyên vào một file. 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.

mcomp mlib mlink rcomp rlib rsctype

- Các kiểu file nguồn Kiểu file .h

Mô tả Được tham chiếu đến như tệp tiêu đề hay tệp include. Tệp tiêu đề được

.ma

.mc .mke .ml .mm .mo .mp

.mt

.r

.rsc

khai báo trong file .mc, .mt và .r. Đượ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. Được tham chiếu đến như nguồn MDL. Đượ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. Được tham chiếu đến như file thư viện, được tạo ra và cập nhật bởi mlib. Được tham chiếu đến như map file, được tạo ra bởi mlink. Đượ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. Đượ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. Đượ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 Đượ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. Đượ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

B-spline functions

152 msbsplin.fdf

Accudraw

1

mdllib.fdf

Cell functions

42

mscell.fdf

21

msscell.fdf

Shared Cell functions

Tiền tố trong hàm chú giải API mdlBspline_ Dùng để thiết lập và quản lí Bspline mdlAccudraw_ để Accudraw đạt được sự tối ưu mdlCell_ Dùng để đọc, lặp lại, tạo thành, thực mdlCellIterator_ hiện hoặc xoá các cell trong thư viện mdlSharedCell_ cell, và để đặt các cell vào file

design Element

2

changetrack.fdf mdlChangeTrack_

20

mselemen.fdf

13

mselemen.fdf

43

mselemen.fdf

4

msmisc.fdf

Element 4 modification

msmisc.fdf

change tracking Element creation

Element information extraction Element common functions Element intersection

Element descriptor functions

105 mselmdsc.fdf

Element clipping Element association

5

msmisc.fdf

23

msassoc.fdf

Cho phép giám sát mọi sự thay đổi trong file DGN mdl..._create Dùng cho sự tạo thành các đối tượng ( Arc, Circle, Cone, Curve, Ellipse, Line, LineString, PointString, Shape, Surface, Text, TextNode, ComplexChain) mdl..._extract Để tách thông tin từ các đối tượng cụ thể. mdlElement_ Dùng cho thao tác trên các đối tượng đơn phổ biến mdlIntersect_ Đáp ứng như API cho các đối tượng giao nhau mdlModify_ Cho phép thay đổi các đối tượng đơn hoặc sự miêu tả các đối tượng mdlElmdscr_ Dùng để thực hiện các thao tác với mdlCopyContext_ các đối tượng thành phần trong các đối tượng phức tạp mdlClip_ Cho phép liên kết các đối tượng mdlAsoc_ Cung cấp sự truy cập vào khả năng

Element linkage

34

mslinkge.fdf

mdlLinkage_

Multi-line elements

21

msmline.fdf

mdlMline_

Measurments 8 functions

msmisc.fdf

mdlMeasure_

Transient elements

mstrnsnt.fdf

mdlTransient...

msdim.fdf

mdlDim_

14

Dimensioning 23 element 28 Function Nested 30 Element instances presentation Element 30 reference Surface creation Patterining Mesh elements

msdimstyle.fdf mdlDimStyle_ msdisplaypath.h mdlDisplayPath_

elementref.h

elementRef_

7

mselemen.fdf

mdlSurface_

8 71

msmisc.fdf mdlPattern_ msmdlmesh.fdf mdlMesh_

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 Cho phép gắn kết, thay đổi, xoá hoặc tách các gói cơ sở dữ liệu của các đối tượng Dùng để thiết lập và thay đổi các đối tượng đa đường Lấy các thuộc tính kích thước cơ bản của sự miêu tả các đối tượng Cung cấp API cho các đối tượng chuyển tiếp Dùng cho các thao tác trên kích thước của đối tượng Cho phép quản lí nhiều trường hợp của đối tượng trong các file hoặc cell tham chiếu Cho phép nhận dạng duy nhất một đối tượng trong session Dùng cho các thao tác bề mặt Dùng cho các khía cạnh hình học

3.2. Tìm kiếm đối tượng Loacate elements Scanning Snapping

Hit list

40 mslocate.fdf 62 msscan.fdf

mdlLocate_ mdlAutoLocate_ mdlScan_

Cho phép định vị các đối tượng API dùng để quét file cho các đối tượng

msscancrit.fdf mdlScanCriteria_ 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 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 storage Embedded Arrays Dynamic arrays String List

26

msmdlmatrix.fdf mdlMatrix_

Đáp ứng như một container cho các ma trận số 165 embedded....fdf jdmlEmbedded.... Cung cấp nhiều loại linear container có giá trị 13 msdarray.fdf mdlDArray_... cung cấp các mảng động đơn 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 handling functions

23

msinput.fdf

mdlInput_

API dùng cho việc quản lí đầu vào

Output handling

47

State control 21

msoutput.fdf

mdlOutput_

msstate.fdf

mdlState_

API dùng cho các thông điêp đầu ra

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 ditemlib.fdf item functions msritem.fdf htmllib.fdf miscilib.fdf View handling Digitizer function

..and otheres 193 msview....fdf

mdlView....

3

mdlDigitize_

msinput.fdf

Cho phép xem và quản lý các nhóm xem Điều khiển sự kiện số hóa

3.5. Tài nguyên Resource 25 msrmgr.h management Parse 10 msparse.fdf command table 3.6. Thao tác

mdlResource_ API cho quản lý tài nguyên mdlParse_ Hàm Command table

C Expression 18 mscexpr.fdf BASIC 3 msbasic.fdf interface inter 19 extprg.fdf program communicati on Dynamic link 14 dlmsys.fdf modules

mdlCExpression Cho phép đánh giá _ biểu thức C trong runtime mdlBasic_ Sử dụng cho macro của BASIC mdlExternal_ Cho phép chương trình bên ngoài giao tiếp với extprg_ Microstation dlmSystem_

Cho phép thao tác giữa DLM(DLL) và MDL

7. Hệ thống MDL system

85

mssystem.fdf

mdlSystem_

Undo API

9

msundo.fdf

mdlUndo_

Version

2

msver.fdf

mdlVersion_

License API 14

mslicens.fdf

mdlLicense_

Active setting functions

msmisc.fdf

mdlParams_

4

API cho các hàm hệ thống khác nhau, điều khiển các sự kiện và các biến quản lí các hàm redo/undo Tách các thông tin về các bản đang chạy hiện thời của MicroStation Cho phép truy vấn các thông tin bản quyền Thay đổi các tham số của Microstation

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 dgnBuf

Type MSElement*

statedata

MSStateData

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

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.

Related Documents

Bao Cao.
June 2020 27
Bao-cao
July 2020 19
Bao Cao
November 2019 40
Bao Cao
November 2019 29
Bao Cao
May 2020 20
Bao Cao
November 2019 28