找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 728|回复: 4

[日积月累]:结合MicroStation与Visual BASIC的综合应用

[复制链接]
发表于 2003-5-2 16:10:16 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
在结合 MicroStation BASIC和微软的Visual BASIC 提供了一个快速而且全面的方法,可用来发展单位内中等与大规模的应用系统。我在经历了使用MDL,UCM与宏指令集来设计程序之后,发现MicroStation和Visual BASIC的结合有一个截然不同优势,可用来作为设计和草案的自动化处理程序。

使用MicroStation和Visual BASIC的优点,包括快速的发展时间,无大小限制的应用系统,与设计良好的使用者介面环境。主要的限制是当使用者的设计图档在执行时,也必须同时开启MicroStation。在大部分的情况之下,这并不会造成使用者任何困扰,只会使得使用者于观看设计图时觉得更加的生动有趣,与画图过程中必要的互动。

学习用MicroStation和Visual BASIC的基本指令仅仅只需要使用者几天的时间。而使用者所换得的却是一种广泛的能力, 来使用MicroStation与Visual BASIC以便开发更加复杂的系统。

MicroStation中记录宏指令集的组合工作,可以复制到Visual BASIC中,并可被修改以便在Visual BASIC中执行。下面所叙述的就是一个MicroStation中记录的宏指令集与转换成Visual BASIC的程序码之间的比较。唯一差异的地方是,物件msApp与稍微的修改。 point z则可被忽略。

正如此处所显示的,使用宏指令集和BASIC程序码,使用者可以下载档案 Form1.frm,是在本篇文章的 Visual BASIC form 档案所产生的。或者,从本篇文章的线上说明版本中将程序码剪贴。将本段程序码复制并贴上于MicroStaion BASIC 宏指令集的编辑程序软件中,或是Visual BASIC 中,如同被要求的动作,以便测试。

放在MicroStation BASIC 宏指令集的编辑程序里的文字:

Sub main

Dim startPoint As MbePoint

Dim point As MbePoint, point2 As MbePoint



MbeSendCommand "PLACE DIALOGTEXT ICON "

MbeSendAppMessage "TEXTEDIT", "FirstLine Place This Text"



startPoint.x = -5.136406#

startPoint.y = 28.803958#



point.x = startPoint.x

point.y = startPoint.y

MbeSendDataPoint point, 1%



MbeSendReset

End Sub



Visual BASIC 程序码 (复制到一个 VB 按钮中):

Dim msApp As Object

Dim msPoint As Object

Set msApp = CreateObject("MicroStation.Application")

Set msPoint = msApp.mbePoint



msApp.MbeSendCommand "PLACE TEXT"

msApp.mbesendkeyin "Place This Text"

msPoint.x = -5.136406

msPoint.y = 28.803958

msApp.MbeSendDataPoint msPoint, 1

msApp.MbeSendReset

注意:

l 输入编辑程序一定要被打开,以便能寄送信息。

l 任何可被输入的命令,也可随著msApp.MbeSendCommand 程序呼叫而寄送出去。

l 这是一个好主意 - 每次只打开一个MicroStaion,如此一来,当对程序进行修改时,只会对那唯一的档案进行修改。

呼叫程序 msApp.MbeSendDataPoint msPoint,1 传送于早先msPoint.x和 msPoint.y 变数所定义的点。这个1代表著视景一,它是需要被打开的。设计图将需要使用这个视景,而且准确性是依据视景对物体放大焦距的大小。 为增加准确性可设定误差容忍度为零(msApp.MbeState.LocateTolerance = 0) 。 该设定值可在改变前先存档,然后在程序的结束后再更改。

下面是一个使用Visual BASIC与MicroStation外部命令更加彻底的例子,使用Visual BASIC 与MicroStation外部指令来介接MicroStation。再次说明,该段程序码是相似于宏指令集,即可被纪录并且用于MicroStation本身。该范例允许MicroStation打开 .dgn档,并输入文字内容。

奔特力的SELECT服务,为这个线上说明提供了几个例子,一些已经在下面合并了。基本的说明文件档案和该SELECT线上说明资源是十分有价值的辅助工具。

一个简单例子的步骤

MicroStation档案的档名与档案路径必须被指定用C:\temp\Seed2d.dgn。使用下述的名字来新增下面的按钮矩阵:

          Command1(0) with the Caption Open DGN File

          Command1(1) with the Caption Place Text

          Command1(2) with the Caption Place a Line

          Command1(3) with the Caption Quit

新增下面这些文字的栏位

          txtFileName 'Fill text box with DGN file name and path



          Text1(0)扵'Text to be placed

          Text1(1)扲'Random x,y coordinates in this one and below.



          Text1(2)

          Text1(3)

          Text1(4)

形式应该看起来像是图1的对话视窗

'

图1. Visual BASIC 格式视窗

 

MicroStation Objects

Dim msApp As Object

Dim msPoint As Object

  

'mbeCall Variables

Dim DATA As String 'Text to transfer (string)

Dim LEVEL As String 'LV="##" (string)

Dim ANGLE As String 'AA="##" (string)

Dim MSFONT As String 'FT="##" (string)

Dim LINECODE As String 'LC="##" (string)

Dim MSFONTSIZE As String 'TX="##" (string)



'Generic Points

Dim P1X, P1Y, P2X, P2Y



Private Sub Form_Load()



Set msApp = CreateObject("MicroStation.Application")

Set msPoint = msApp.mbePoint



End Sub



Private Sub Command1_Click(Index As Integer)



If Index = 0 Then

  Call StartMicroStation 'Open MicroStation file

ElseIf Index = 1 Then 'Place Text

   LEVEL = "10"

   ANGLE = "0"

   MSFONT = "23"

   MSFONTSIZE = ":4"

   DATA = Text1(0).Text

   P1X = Text1(1).Text

   P1Y = Text1(2).Text

   Call mbePlaceText

elseIf Index = 2 Then 'Draw Line

   LINECODE = 0

   LEVEL = "1"

   P1X = Text1(1).Text

   P1Y = Text1(2).Text

   P2X = Text1(3).Text

   P2Y = Text1(4).Text

   Call mbePlaceLine

elseIf Index = 3 Then Unload Me 'Cancel



End If



End Sub



Sub StartMicroStation()



Dim MyFileName As String

Dim TestFileExist As String



MyFileName = txtFileName.Text



'Check to see if the file exist.

TestFileExist = Dir(MyFileName) 'Returns only the file name if it exist.

If TestFileExist = Empty Then

   'If file does not exist copy a seed file to desired location.

   'FileCopy SourceFile, DestinationFile

End If



'Open MicroStation with previously created file.

Set msApp = CreateObject ("MicroStation.Application")

'It is a good idea only to have one MicroStation file open

'at a time. If dgnFileName variable is empty then no file

'is open.

MicroStaionFileName = msApp.MbeDgnInfo.dgnFileName()

If MicroStaionFileName = Empty Then

   msApp.MbeSendCommand ("newfile " + MyFileName) 'Actual opens DGN file.

Else

   MsgBox "Close MicroStation then try again "

End If



End Sub



Sub mbePlaceText()

' ------------

If DATA = Null Then: DATA = " "

With msApp

   .MbeSendCommand "SET PARSE OFF" 'Allows key words to be printed

   .MbeSendCommand "LV=" + LEVEL

   .MbeSendCommand "AA=" + ANGLE

   .MbeSendCommand "FT=" + MSFONT

   .MbeSendCommand "TX=" + MSFONTSIZE

   .MbeSendCommand "PLACE TEXT"

'.MbeSendCommand "active txj = cc" 'This will center the text

   .mbesendkeyin DATA

   msPoint.x = P1X

   msPoint.y = P1Y

   .MbeSendDataPoint msPoint, 1


   .MbeSendReset

   .MbeSendCommand "SET PARSE ON"

End With

End Sub



Sub mbePlaceLine()

' ------------

With msApp

   .MbeSendCommand "LC=" + LINECODE

   .MbeSendCommand "LV=" + LEVEL

   .MbeSendCommand "PLACE LINE "

   msPoint.x = P1X

   msPoint.y = P1Y

   .MbeSendDataPoint msPoint, 1

   msPoint.x = P2X

   msPoint.y = P2Y

   .MbeSendDataPoint msPoint, 1

   .MbeSendReset

End With

End Sub

上述程序码提供了一个范例,关于如何使用MicroStation BASIC与Visual BASIC来结合成一个综合性的设计与草案的设计项目工作。花费时间来学习MicroStation与Visual BASIC的基本功夫,它将可以增加使用者结合MicroStation BASIC与 Visual BASIC的能力。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2004-4-3 20:53:37 | 显示全部楼层
向一楼的致敬!!!!!!!!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-4-4 14:28:40 | 显示全部楼层
谢谢了!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-4-23 18:19:42 | 显示全部楼层
我也想用vb开发一些ms功能,可就是没有关于ms在vb中可引用的函数,对象
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-4-25 16:05:33 | 显示全部楼层
受益匪淺呀.想問樓主,你有關於用C#和MS相結合的開發秘訣嗎?請賜教!!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-27 17:52 , Processed in 0.398668 second(s), 38 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表