QuickBridge使用说明 之 XML 模板 篇

guanghui7 发表了文章 • 0 个评论 • 475 次浏览 • 2016-05-10 17:30 • 来自相关话题

QuickBridge是基于Bentley 的 PowerCivil  开发的一个实验性质的小插件,主要包含了创建几何元素,创建civil元素 以及 自定义参数化模板三大功能。


其特点是结合了 LUA和 XML两种模板扩展方式,可以灵活多变创建模板

本篇文章主要讲解的是XML方式创建参数化模板

一 .安装事项:
 请在选择安装目录时选择PowerCivil目录,例如:> C:\Program Files (x86)\Bentley\PowerCivil V8i (SELECTSeries 4)\PowerCivil\ 
否则程序会安装失败。


二.使用功能介绍
 创建参数化实体key-in:QBAddins Xml SolidEdit ; 或者 key-in:QBAddins  Xml SolidPlace; 
 
三.使用方法
1.输入key-in命令,打开命令窗口,如下图





 
当用户点击add按钮时,将弹出实体模板编辑对话框,如下图
 





当用户点击不同的节点时将弹出不同的窗体和提示
 
例如 右键Temolate,如下图所示:





其他的Parameter和Placepoint情况类似。
 
不同实体模板的定义,如下图






有了上面定义还需要在绘图区定义平面的几何元素,如下图






注意:用户在定义几何元素的坐标值中可以输入带参数的表达式
例如前面定义了一个a变量其值是10,则在定义点的x坐标是输入 a+10 表达式,程序将会自动计算结果为20,如果用户更改了变量值程序将重新计算坐标值。
 
未完待续.....
  查看全部


QuickBridge是基于Bentley 的 PowerCivil  开发的一个实验性质的小插件,主要包含了创建几何元素,创建civil元素 以及 自定义参数化模板三大功能。



其特点是结合了 LUA和 XML两种模板扩展方式,可以灵活多变创建模板

本篇文章主要讲解的是XML方式创建参数化模板


一 .安装事项:
 请在选择安装目录时选择PowerCivil目录,例如:> C:\Program Files (x86)\Bentley\PowerCivil V8i (SELECTSeries 4)\PowerCivil\ 
否则程序会安装失败。



二.使用功能介绍
 创建参数化实体key-in:QBAddins Xml SolidEdit ; 或者 key-in:QBAddins  Xml SolidPlace; 
 
三.使用方法
1.输入key-in命令,打开命令窗口,如下图

qb-1.png

 
当用户点击add按钮时,将弹出实体模板编辑对话框,如下图
 
qb-2.png


当用户点击不同的节点时将弹出不同的窗体和提示
 
例如 右键Temolate,如下图所示:

qb-3.png

其他的Parameter和Placepoint情况类似。
 
不同实体模板的定义,如下图

qb-4.png


有了上面定义还需要在绘图区定义平面的几何元素,如下图

qb-5.png


注意:用户在定义几何元素的坐标值中可以输入带参数的表达式
例如前面定义了一个a变量其值是10,则在定义点的x坐标是输入 a+10 表达式,程序将会自动计算结果为20,如果用户更改了变量值程序将重新计算坐标值。
 
未完待续.....
 

QuickBridge使用说明 之 安装事项及下载地址

guanghui7 发表了文章 • 0 个评论 • 513 次浏览 • 2016-05-10 17:05 • 来自相关话题

安装事项:很重要
1.请用管理员权限运行安装文件
2. 请在选择安装目录时选择PowerCivil目录,例如:> C:\Program Files (x86)\Bentley\PowerCivil V8i (SELECTSeries 4)\PowerCivil\ 
否则程序会安装失败。另外注意:
1.本插件并不能保证所有版本的PowerCivil都能正常运行,目前在0.8.11.09.845版本中运行正常)
2.本插件还在不断的完善中,不能保证所有功能都能正常运行.

介绍:QuickBridge是一个基于PowerCivil的Addin模式开发的实验性插件,其目的是为了探索新技术的融合,以及研究PowerCivil的开发方式,希望通过此插件能是大家了解到更多的PowerCivil的二次开发功能,同时我也在社区里分享了一些开发文章,欢迎和大家讨论。 

 使用方法见以下文章:
1.Lua 模板篇链接地址
2.xml模板篇链接地址
 

下载地址: QuickBridgeSetup.zip,MSChart.zip  第一个是安装包,第二个是用到的微软的控件的安装包,两个都需要安装。
  查看全部
安装事项:很重要
1.请用管理员权限运行安装文件
2. 请在选择安装目录时选择PowerCivil目录,例如:> C:\Program Files (x86)\Bentley\PowerCivil V8i (SELECTSeries 4)\PowerCivil\ 
否则程序会安装失败。
另外注意:
1.本插件并不能保证所有版本的PowerCivil都能正常运行,目前在0.8.11.09.845版本中运行正常)
2.本插件还在不断的完善中,不能保证所有功能都能正常运行.


介绍:QuickBridge是一个基于PowerCivil的Addin模式开发的实验性插件,其目的是为了探索新技术的融合,以及研究PowerCivil的开发方式,希望通过此插件能是大家了解到更多的PowerCivil的二次开发功能,同时我也在社区里分享了一些开发文章,欢迎和大家讨论。 


 使用方法见以下文章:
1.Lua 模板篇链接地址
2.xml模板篇链接地址
 

下载地址: QuickBridgeSetup.zip,MSChart.zip  第一个是安装包,第二个是用到的微软的控件的安装包,两个都需要安装。
 

基于C#的Addin方式的MicroStation二次开发 快速入门系列[5] ---编辑几何元素

guanghui7 发表了文章 • 0 个评论 • 541 次浏览 • 2016-05-10 16:27 • 来自相关话题

前面一节讲了如何创建元素,这一节讲一个简单的编辑元素的方法
 
一,首先创建一个命令EditGeometry以及相应的静态函数EditGeometry,如下图:





 
二,获取选择元素
 MS为我们提供了Bentley.Interop.MicroStationDGN.ModelReference.GetSelectedElements() 函数,帮我们获取当前用户的选择元素,然后我们可以通过判断元素的类型来获取我们想要的元素类型。
在MS中我们通过Element类的Is...() 开头的函数来判断元素类型。
 
三,编辑选择元素
当我们过滤出所要的元素后便可以通过Element类提供的As..()系列函数把我们的元素转换成需要的元素, 然后我们就能够调用该元素提供的属性和方法来完成我们希望的变化,这里我们就改变偏移line元素并改变颜色,
然后最后我们需要重新绘制,并把改变结果保存下来,具体代码如下:public static void EditGeometry(string unparsed)
{
Bentley.Interop.MicroStationDGN.Application app = Utilities.ComApp;
if (app == null || app.ActiveModelReference == null)
{
return;
}

ElementEnumerator selectElements = app.ActiveModelReference.GetSelectedElements();//获取选择的
if (selectElements == null)
{
return;
}

//循环选中的元素
while (selectElements.MoveNext())
{
Element elem = selectElements.Current;//当前元素
if(!elem.IsLineElement())//判断是否是线元素
{
continue;
}
//开始编辑元素的属性
LineElement lineElem = elem.AsLineElement();
Point3d movePoint = app.Point3dFromXYZ(100, 100, 100);//创建点
lineElem.Move(ref movePoint);//移动点
lineElem.Color = 1;//改变线的颜色

//编辑完成后,重绘并保存
lineElem.Redraw(); //重新绘制
lineElem.Rewrite();//保存到文件里
break;//退出循环
}

return;
}
 
 
 四.编译并执行代码
在MS中先画一条直线,然后选中该直线,然后运行keyin命令caddin test editgeometry ,并查看结果
  查看全部
前面一节讲了如何创建元素,这一节讲一个简单的编辑元素的方法
 
一,首先创建一个命令EditGeometry以及相应的静态函数EditGeometry,如下图:

Edit-1.png

 
二,获取选择元素
 MS为我们提供了Bentley.Interop.MicroStationDGN.ModelReference.GetSelectedElements() 函数,帮我们获取当前用户的选择元素,然后我们可以通过判断元素的类型来获取我们想要的元素类型。
在MS中我们通过Element类的Is...() 开头的函数来判断元素类型。
 
三,编辑选择元素
当我们过滤出所要的元素后便可以通过Element类提供的As..()系列函数把我们的元素转换成需要的元素, 然后我们就能够调用该元素提供的属性和方法来完成我们希望的变化,这里我们就改变偏移line元素并改变颜色,
然后最后我们需要重新绘制,并把改变结果保存下来,具体代码如下:
public static void EditGeometry(string unparsed)
{
Bentley.Interop.MicroStationDGN.Application app = Utilities.ComApp;
if (app == null || app.ActiveModelReference == null)
{
return;
}

ElementEnumerator selectElements = app.ActiveModelReference.GetSelectedElements();//获取选择的
if (selectElements == null)
{
return;
}

//循环选中的元素
while (selectElements.MoveNext())
{
Element elem = selectElements.Current;//当前元素
if(!elem.IsLineElement())//判断是否是线元素
{
continue;
}
//开始编辑元素的属性
LineElement lineElem = elem.AsLineElement();
Point3d movePoint = app.Point3dFromXYZ(100, 100, 100);//创建点
lineElem.Move(ref movePoint);//移动点
lineElem.Color = 1;//改变线的颜色

//编辑完成后,重绘并保存
lineElem.Redraw(); //重新绘制
lineElem.Rewrite();//保存到文件里
break;//退出循环
}

return;
}

 
 
 四.编译并执行代码
在MS中先画一条直线,然后选中该直线,然后运行keyin命令caddin test editgeometry ,并查看结果
 

基于C#的Addin方式的MicroStation二次开发 快速入门系列[4] ---创建基本图形

guanghui7 发表了文章 • 2 个评论 • 869 次浏览 • 2016-05-10 16:26 • 来自相关话题

这一章将讲一下用如何用C#调用MicroStation里创建几何元素
 
一.准备工作:
打开第一章完成的工程,在项目的引用中添加两个MicroStation的DLL引用:
…\MicroStation\assemblies\bentley.interop.microstationdgn.dll
…\MicroStation\assemblies\bentley.microstation.dll
结果如下图:





 
其中主要的几何元素都在bentley.interop.microstationdgn.dll ,各个元素的用法还需要在写的过程中慢慢品味。
另外,上次为了演示在函数加入了一些winform的messagebox,这一章就不需要了,可以把它们都删掉了。
 
二.添加创建命令
1.打开CommandsFunction.cs文件,在CommandsFunction类中添加一个新的静态函数用来创建几何元素。using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using System.Windows.Forms;
namespace CAddin
{
public class CommandsFunction
{
public static void TestKeyIn(string unparsed)
{
//MessageBox.Show("Test Command");

}

public static void CreatGeometry(string unparsed)
{
//后面将在这里添加创建几何元素的函数
}

}
}2.打开commands.xml文件,在里面添加新的key-in命令,结果如下:<?xml version="1.0" encoding="utf-8" ?>
<KeyinTree xmlns="http://www.bentley.com/schemas ... gt%3B
<RootKeyinTable ID="root">
<Keyword SubtableRef="CAddinCommands"
CommandClass="MacroCommand" CommandWord="CAddin" >
<Options Required ="true"/>
</Keyword>
</RootKeyinTable>
<SubKeyinTables>
<KeyinTable ID="CAddinCommands">
<Keyword SubtableRef="TestCommands" CommandWord="Test">
<Options Required ="true"/>
</Keyword>
</KeyinTable>
<KeyinTable ID="TestCommands">
<Keyword CommandWord="Dialog"> </Keyword>
<Keyword CommandWord="Geometry"> </Keyword>
</KeyinTable>
</SubKeyinTables>
<KeyinHandlers>
<KeyinHandler Keyin="CAddin Test Dialog"
Function="CAddin.CommandsFunction.TestKeyIn"/>
<KeyinHandler Keyin="CAddin Test Geometry"
Function="CAddin.CommandsFunction.CreatGeometry"/>
</KeyinHandlers>
</KeyinTree>
三、编写创建几何元素的代码
打开CommandsFunction.cs文件,引入MS的几何元素的命名空间(具体内容如下)using Bentley.MicroStation.InteropServices;
using Bentley.Interop.MicroStationDGN;

namespace CAddin
{
public class CommandsFunction
{
public static void TestKeyIn(string unparsed)
{
//MessageBox.Show("Test Command");

}

public static void CreatGeometry(string unparsed)
{
//MessageBox.Show("Test Command");
//ms 把创建几何元素的函数封装到了Application这个类中,我们可以通过他的实例来调用这些函数
Bentley.Interop.MicroStationDGN.Application app = Utilities.ComApp;

Point3d p1 = app.Point3dFromXYZ(0,0,0);//创建点
Point3d p2 = app.Point3dFromXYZ(0, 100, 0);//创建点
LineElement l = app.CreateLineElement2(null, ref p1, ref p2);//创建一个直线
app.ActiveModelReference.AddElement(l);//把直线保存到DGN文件里

}

}
}好现在可以编译并运行代码了

四、其他创建函数
在Bentley.Interop.MicroStationDGN.Application 类中我们可以看到系统提供了很多的创建函数:创建圆弧
ArcElement CreateArcElement1(Element Template, ref Point3d StartPoint, ref Point3d CenterPoint, ref Point3d EndPoint);创建样条曲线和样条面 
BsplineCurveElement CreateBsplineCurveElement1(Element Template, BsplineCurve Curve);







创建复杂面 
ComplexShapeElement CreateComplexShapeElement1(ref ChainableElement ChainableElements, MsdFillMode FillMode = 0);







 
等等.....以Create开头的函数都是创建函数,在后续的进阶教程中将会逐一讲解各个创建函数的用法. 查看全部
这一章将讲一下用如何用C#调用MicroStation里创建几何元素
 
一.准备工作:
打开第一章完成的工程,在项目的引用中添加两个MicroStation的DLL引用:
…\MicroStation\assemblies\bentley.interop.microstationdgn.dll
…\MicroStation\assemblies\bentley.microstation.dll
结果如下图:

qb-6.png

 
其中主要的几何元素都在bentley.interop.microstationdgn.dll ,各个元素的用法还需要在写的过程中慢慢品味。
另外,上次为了演示在函数加入了一些winform的messagebox,这一章就不需要了,可以把它们都删掉了。
 
二.添加创建命令
1.打开CommandsFunction.cs文件,在CommandsFunction类中添加一个新的静态函数用来创建几何元素。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using System.Windows.Forms;
namespace CAddin
{
public class CommandsFunction
{
public static void TestKeyIn(string unparsed)
{
//MessageBox.Show("Test Command");

}

public static void CreatGeometry(string unparsed)
{
//后面将在这里添加创建几何元素的函数
}

}
}
2.打开commands.xml文件,在里面添加新的key-in命令,结果如下:
<?xml version="1.0" encoding="utf-8" ?>
<KeyinTree xmlns="http://www.bentley.com/schemas ... gt%3B
<RootKeyinTable ID="root">
<Keyword SubtableRef="CAddinCommands"
CommandClass="MacroCommand" CommandWord="CAddin" >
<Options Required ="true"/>
</Keyword>
</RootKeyinTable>
<SubKeyinTables>
<KeyinTable ID="CAddinCommands">
<Keyword SubtableRef="TestCommands" CommandWord="Test">
<Options Required ="true"/>
</Keyword>
</KeyinTable>
<KeyinTable ID="TestCommands">
<Keyword CommandWord="Dialog"> </Keyword>
<Keyword CommandWord="Geometry"> </Keyword>
</KeyinTable>
</SubKeyinTables>
<KeyinHandlers>
<KeyinHandler Keyin="CAddin Test Dialog"
Function="CAddin.CommandsFunction.TestKeyIn"/>
<KeyinHandler Keyin="CAddin Test Geometry"
Function="CAddin.CommandsFunction.CreatGeometry"/>
</KeyinHandlers>
</KeyinTree>

三、编写创建几何元素的代码
打开CommandsFunction.cs文件,引入MS的几何元素的命名空间(具体内容如下)
using Bentley.MicroStation.InteropServices;
using Bentley.Interop.MicroStationDGN;

namespace CAddin
{
public class CommandsFunction
{
public static void TestKeyIn(string unparsed)
{
//MessageBox.Show("Test Command");

}

public static void CreatGeometry(string unparsed)
{
//MessageBox.Show("Test Command");
//ms 把创建几何元素的函数封装到了Application这个类中,我们可以通过他的实例来调用这些函数
Bentley.Interop.MicroStationDGN.Application app = Utilities.ComApp;

Point3d p1 = app.Point3dFromXYZ(0,0,0);//创建点
Point3d p2 = app.Point3dFromXYZ(0, 100, 0);//创建点
LineElement l = app.CreateLineElement2(null, ref p1, ref p2);//创建一个直线
app.ActiveModelReference.AddElement(l);//把直线保存到DGN文件里

}

}
}
好现在可以编译并运行代码了

四、其他创建函数
在Bentley.Interop.MicroStationDGN.Application 类中我们可以看到系统提供了很多的创建函数:
创建圆弧
ArcElement CreateArcElement1(Element Template, ref Point3d StartPoint, ref Point3d CenterPoint, ref Point3d EndPoint);
创建样条曲线和样条面 
BsplineCurveElement CreateBsplineCurveElement1(Element Template, BsplineCurve Curve);







创建复杂面 
ComplexShapeElement CreateComplexShapeElement1(ref ChainableElement ChainableElements, MsdFillMode FillMode = 0);







 
等等.....以Create开头的函数都是创建函数,在后续的进阶教程中将会逐一讲解各个创建函数的用法.

基于C#的Addin方式的MicroStation二次开发 快速入门系列[2] ---开发调试及常见问题

guanghui7 发表了文章 • 1 个评论 • 469 次浏览 • 2016-05-10 16:25 • 来自相关话题

上一节讲了一个简单完整的Addin例子,以后的教程内容都会跟着这个例子来做,但是在开发中总是会碰到各种问题,那么调试方法就是必不可少的了。
 
当你采用Addin的方式做二次开发时,程序的调试还是非常简单的。
1.首先启动VS2010 ,此处一定要注意采用管理员模式启动,否则会导致编译失败。
2.编译程序,看看有没有错误,注意一定不要把引用的MS库文件拷贝到输出目录下,否则会导致MS运行不正常3.运行MS,并打开一个DGN文件,如果你想调试加载过程就不要打开文件直接下一步
4.选择VS工具上的Debug目录下的Attch to Process ,在弹出的对话框中选择ustation.exe进程,然后就能够在VS中设置断点,调试运行了 ,具体如下图所示










 
除此之外,在程序运行的过程中会出现各种问题,大家一定要注意观察MS的log文件,以及抛出的异常的栈。
有时间我会写一写关于MS的Log
 
最后,常用的开发工具有:
VS2010,NotePad++
 
 
  查看全部
上一节讲了一个简单完整的Addin例子,以后的教程内容都会跟着这个例子来做,但是在开发中总是会碰到各种问题,那么调试方法就是必不可少的了。
 
当你采用Addin的方式做二次开发时,程序的调试还是非常简单的。
1.首先启动VS2010 ,此处一定要注意采用管理员模式启动,否则会导致编译失败。
2.编译程序,看看有没有错误,注意一定不要把引用的MS库文件拷贝到输出目录下,否则会导致MS运行不正常3.运行MS,并打开一个DGN文件,如果你想调试加载过程就不要打开文件直接下一步
4.选择VS工具上的Debug目录下的Attch to Process ,在弹出的对话框中选择ustation.exe进程,然后就能够在VS中设置断点,调试运行了 ,具体如下图所示

debug-1.png


debug-2.png

 
除此之外,在程序运行的过程中会出现各种问题,大家一定要注意观察MS的log文件,以及抛出的异常的栈。
有时间我会写一写关于MS的Log
 
最后,常用的开发工具有:
VS2010,NotePad++
 
 
 

基于C#的Addin方式的MicroStation二次开发 快速入门系列[1] ---一个简单完整的入门实例

guanghui7 发表了文章 • 2 个评论 • 1114 次浏览 • 2016-05-10 16:00 • 来自相关话题

由于现在MicroStation已经为C#提供了很完善的库,大部分功能都可以通过C#语言完成开发,因此本系列教程完全采用C#在VS2010开发环境下完成。

完成一个基本的addin程序,只需要以下三个主要部分
一 、创建Addin工程并进行配置
二、添加命令KEY-IN
三、 配置MicroStation.

下面我将通过一个实例来演示这三部分内容

一 、创建Addin工程并进行配置

1.创建一个C#的classlibrary项目
打开VS2010创建新工程,命名为CAddin,注意选择.net3.5平台,如图:






创建好之后如图:






2. 添加所需要的MicroStation库
分别选择MicroStation的安装目录下的
…\MicroStation\ustation.dll
…\MicroStation\assemblies\bentley.microstation.interfaces.1.0.dll
…\MicroStation\assemblies\ECFramework\bentley.general.1.0.dll
三个基本的库文件。
添加过程如图:






添加完之后如图:






为了演示效果,我们还需要添加System.Windows.Forms库,如下图:








注意在所有添加过的MicroStation类库后为了防止类库冲突一定要设置引用的MicroStation类库为不拷贝,设置方式如图







3.添加入口类
类似于WindowsFormsApplication程序开发需要static class Program 类一样,MicroStation的Addin必须有一个包含有一个派生于Bentley.MicroStation.Addin的类,同时派生类必须提供一个带IntPtr类型参数的构造函数,且该构造函数需要链接到基类构造函数上,最后该派生类必须覆盖Addin基类中的虚方法Run()
具体过程如图:






为了显示演示效果我们还需要加入一些windows的提示窗体,代码如图所示:






4.配置工程编译路径
为了能够使得本项目能够被MicroStation加载并运行,我们需要把生成的dll文件放到MicroStation安装目录下的mdlapps文件夹下。
为了方便管理我们现在mdlapps文件夹下创建一个新的文件夹命名为CAddin,结果如下图:






然后设置项目的编译目录指定到该文件夹下,设置方法如下图所示:






然后编译工程,在CAddin文件中便可以看到生成的dll文件。

二、为程序设置key-in命令
用过MicroStation的朋友都知道,MicroStation可以通过key-in的命令方式来激活相应的功能,因此本程序将添加一个简单的key-in命令。
1.添加一个commands.xml 定义key-in 命令
过程如下图所示:






生成commands.xml设置其build action 属性为 Embedded Resource。

2.添加一个CommandsFunction.cs文件定义与key-in命令绑定的静态函数
过程如图所示:






其中的public static void TestKeyIn(string unparsed)
{
MessageBox.Show("Test Command");
}
函数在后面定义的xml文件中与key-in命令绑定

3.定义commands.xml,具体文件内容如下:<?xml version="1.0" encoding="utf-8" ?>
<KeyinTree xmlns="http://www.bentley.com/schemas ... gt%3B
<RootKeyinTable ID="root">
<Keyword SubtableRef="CAddinCommands"
CommandClass="MacroCommand" CommandWord="CAddin" >
<Options Required ="true"/>
</Keyword>
</RootKeyinTable>
<SubKeyinTables>
<KeyinTable ID="CAddinCommands">
<Keyword SubtableRef="TestCommands" CommandWord="Test">
<Options Required ="true"/>
</Keyword>
</KeyinTable>
<KeyinTable ID="TestCommands">
<Keyword CommandWord="Dialog"> </Keyword>
</KeyinTable>
</SubKeyinTables>
<KeyinHandlers>
<KeyinHandler Keyin="CAddin Test Dialog"
Function="CAddin.CommandsFunction.TestKeyIn"/>
</KeyinHandlers>
</KeyinTree>
具体设置方法及含义如下图所示:






4.修改入口类“class CAddin ” 的属性,使得MicroStation能够在加载dll时,加载相应的定义key-in的xml文件。






完成后编译项目。

三、配置MicroStation
前面两部分完成了程序的主框架,下面我们要让MicroStation在运行时能自动加载我们的程序,则需要在MicroStation的安装目录的..\MicroStation\config\appl 中定义一个.cfg文件
因为操作系统的权限问题,不能直接在appl 文件夹中创建文件,我们可以通过cmd的方式创建。
首先用管理员权限启动cmd并cd到..\MicroStation\config\appl 目录下,输入命令cd.>CAddin.cfg 创建文件
过程如下图:






打开刚刚创建的文件,并在文件中输入一下内容#PLEASE DO NOT USE FIRST LINE OF CONFIG FILE. IT WILL BE IGNORED.
CADINN_BIN_DIR = $(MSDIR)mdlapps/CAddin/

MS_ADDINPATH < ${CADINN_BIN_DIR}
MS_ADDIN_DEPENDENCYPATH < ${CADINN_BIN_DIR}
MS_DGNAPPS < ${CADINN_BIN_DIR}CAddin.dll
如下图所示(注意.cfg文本一定要用utf-8的格式保存,可以用notepad++文本编辑器更改格式)






其中的CADINN_BIN_DIR 是路径的变量名,MS_ADDINPATH 指的是Addin程序的文件路径,MS_ADDIN_DEPENDENCYPATH是Addin文件依赖的其他库的地址,MS_DGNAPPS是MS加载时的入口dll.

完成以上三个步骤后便大功告成了,重新编译addin项目后,运行MicroStation,就能够看到效果了
效果如下图:











后面我还会分享更多的ADDIN开发内容
 
实例代码:
  查看全部
由于现在MicroStation已经为C#提供了很完善的库,大部分功能都可以通过C#语言完成开发,因此本系列教程完全采用C#在VS2010开发环境下完成。

完成一个基本的addin程序,只需要以下三个主要部分
一 、创建Addin工程并进行配置
二、添加命令KEY-IN
三、 配置MicroStation.


下面我将通过一个实例来演示这三部分内容

一 、创建Addin工程并进行配置

1.创建一个C#的classlibrary项目
打开VS2010创建新工程,命名为CAddin,注意选择.net3.5平台,如图:

vs2010-0.png


创建好之后如图:

vs2010-2.png


2. 添加所需要的MicroStation库
分别选择MicroStation的安装目录下的
…\MicroStation\ustation.dll
…\MicroStation\assemblies\bentley.microstation.interfaces.1.0.dll
…\MicroStation\assemblies\ECFramework\bentley.general.1.0.dll
三个基本的库文件。
添加过程如图:

vs2010-3.png


添加完之后如图:

vs2010-4.png


为了演示效果,我们还需要添加System.Windows.Forms库,如下图:


vs2010-5.png



注意在所有添加过的MicroStation类库后为了防止类库冲突一定要设置引用的MicroStation类库为不拷贝,设置方式如图

vs2010-01.png



3.添加入口类
类似于WindowsFormsApplication程序开发需要static class Program 类一样,MicroStation的Addin必须有一个包含有一个派生于Bentley.MicroStation.Addin的类,同时派生类必须提供一个带IntPtr类型参数的构造函数,且该构造函数需要链接到基类构造函数上,最后该派生类必须覆盖Addin基类中的虚方法Run()
具体过程如图:

vs2010-6.png


为了显示演示效果我们还需要加入一些windows的提示窗体,代码如图所示:

vs2010-7.png


4.配置工程编译路径
为了能够使得本项目能够被MicroStation加载并运行,我们需要把生成的dll文件放到MicroStation安装目录下的mdlapps文件夹下。
为了方便管理我们现在mdlapps文件夹下创建一个新的文件夹命名为CAddin,结果如下图:

vs2010-10.png


然后设置项目的编译目录指定到该文件夹下,设置方法如下图所示:

vs2010-9.png


然后编译工程,在CAddin文件中便可以看到生成的dll文件。

二、为程序设置key-in命令
用过MicroStation的朋友都知道,MicroStation可以通过key-in的命令方式来激活相应的功能,因此本程序将添加一个简单的key-in命令。
1.添加一个commands.xml 定义key-in 命令
过程如下图所示:

vs2010-11.png


生成commands.xml设置其build action 属性为 Embedded Resource

2.添加一个CommandsFunction.cs文件定义与key-in命令绑定的静态函数
过程如图所示:

vs2010-12-2.png


其中的
public static void TestKeyIn(string unparsed)
{
MessageBox.Show("Test Command");
}

函数在后面定义的xml文件中与key-in命令绑定

3.定义commands.xml,具体文件内容如下:
<?xml version="1.0" encoding="utf-8" ?>
<KeyinTree xmlns="http://www.bentley.com/schemas ... gt%3B
<RootKeyinTable ID="root">
<Keyword SubtableRef="CAddinCommands"
CommandClass="MacroCommand" CommandWord="CAddin" >
<Options Required ="true"/>
</Keyword>
</RootKeyinTable>
<SubKeyinTables>
<KeyinTable ID="CAddinCommands">
<Keyword SubtableRef="TestCommands" CommandWord="Test">
<Options Required ="true"/>
</Keyword>
</KeyinTable>
<KeyinTable ID="TestCommands">
<Keyword CommandWord="Dialog"> </Keyword>
</KeyinTable>
</SubKeyinTables>
<KeyinHandlers>
<KeyinHandler Keyin="CAddin Test Dialog"
Function="CAddin.CommandsFunction.TestKeyIn"/>
</KeyinHandlers>
</KeyinTree>

具体设置方法及含义如下图所示:

vs2010-13-1.png


4.修改入口类“class CAddin ” 的属性,使得MicroStation能够在加载dll时,加载相应的定义key-in的xml文件。

vs2010-14.png


完成后编译项目。

三、配置MicroStation
前面两部分完成了程序的主框架,下面我们要让MicroStation在运行时能自动加载我们的程序,则需要在MicroStation的安装目录的..\MicroStation\config\appl 中定义一个.cfg文件
因为操作系统的权限问题,不能直接在appl 文件夹中创建文件,我们可以通过cmd的方式创建。
首先用管理员权限启动cmd并cd到..\MicroStation\config\appl 目录下,输入命令cd.>CAddin.cfg 创建文件
过程如下图:

vs2010-15.png


打开刚刚创建的文件,并在文件中输入一下内容
#PLEASE DO NOT USE FIRST LINE OF CONFIG FILE. IT WILL BE IGNORED.
CADINN_BIN_DIR = $(MSDIR)mdlapps/CAddin/

MS_ADDINPATH < ${CADINN_BIN_DIR}
MS_ADDIN_DEPENDENCYPATH < ${CADINN_BIN_DIR}
MS_DGNAPPS < ${CADINN_BIN_DIR}CAddin.dll

如下图所示(注意.cfg文本一定要用utf-8的格式保存,可以用notepad++文本编辑器更改格式)

vs2010-16.png


其中的CADINN_BIN_DIR 是路径的变量名,MS_ADDINPATH 指的是Addin程序的文件路径,MS_ADDIN_DEPENDENCYPATH是Addin文件依赖的其他库的地址,MS_DGNAPPS是MS加载时的入口dll.

完成以上三个步骤后便大功告成了,重新编译addin项目后,运行MicroStation,就能够看到效果了
效果如下图:

vs2010-17.png


vs2010-18.png


后面我还会分享更多的ADDIN开发内容
 
实例代码:
 

QuickBridge使用说明 之 Lua 模板 篇

guanghui7 发表了文章 • 1 个评论 • 543 次浏览 • 2016-05-10 15:27 • 来自相关话题

QuickBridge是基于Bentley 的 PowerCivil  开发的一个实验性质的小插件,主要包含了创建几何元素,创建civil元素 以及 自定义参数化模板三大功能。

其特点是结合了 LUA和 XML两种模板扩展方式,可以灵活多变创建模板

本篇文章主要讲解的是LUA方式创建参数化模板

一 .安装事项:
 请在选择安装目录时选择PowerCivil目录,例如:> C:\Program Files (x86)\Bentley\PowerCivil V8i (SELECTSeries 4)\PowerCivil\ 
否则程序会安装失败。

二.使用功能介绍

1. 创建几何元素 key-in : QBAddins Lua Geo; 主要是用于创建MicroStation的元素
2. 创建Civil的元素 key-in: QBAddins Lua Civil; 主要用于创建civil的平面线
3. 创建参数化实体key-in:QBAddins Lua SolidEdit ; 主要是用于编辑参数化实体模板; key-in:QBAddins Lua SolidPlace; 用于放置参数实体
4. 访问帮助 key-in : QBAddins Help Web ; 将会打开本网页

三.脚本语言基础
本插件采用了lua语言作为脚本语言,并结合C#并在脚本中引入了一些C#类库和自定义的几何类库
C#类库包含有:System.Text,System.Linq,System.Collections.Generic,System.Windows.Forms,System.IO等
自定义几何类库有:QBGeometry 包含有点,线,多段线,面,体 五大类 以及 坐标系和变化矩阵类
例如点的定义:public class QBPoint : QBGeometryBase
{
public QBPoint(double _x, double _y, double _z, string _name = "");
public QBPoint();
public QBPoint(QBPoint src, string _name = "");
public double X;
public double Y;
public double Z;
public double this[int idx];
public void SetValue(double _x, double _y, double _z, string _name = "");
public double GetValue(int x_y_z);
public QBPoint Clone();
public void CopyFrom(QBPoint src);
}

其他的类型后面再讲。

接着讲一下Lua脚本的基本语法,通过一个函数定义的例子来说明> (这个例子可以在QBAddins Civil Line2d 命令中直接运行看到效果)function Run()
local p1 = QBPoint(0,0,0);
local p2 = QBPoint(100,0,0);
local L = QBLineSegment(p1,p2);
Env:DrawLine2D(L );
end
  上面定义了一个Run函数 ,函数名前要加function  关键字,结尾用end 结尾
在函数体内定义了两个点和一根线,并通过调用系统函数实现在图纸中绘制。
local p1 = QBPoint(0,0,0);该句是new了一个QBPoint点对象,(其中的关键字local 是指当前变量p1是局部变量)
local L = QBLineSegment(p1,p2); 是new了一个线段,并传入点p1,p2作为初始化参数。
Env:DrawLine2D(L ); 这句是调用了系统变量Env的DrawLine2D函数,该函数是把线段L绘制到图纸中。
其中Env是插件在脚本中定义的全局系统变量,它提供了很多与PowerCivil交互的函数,通过调用这些函数可以达到与PowerCivil交互的目的。

从上面这个例子可以看到如何定义变量,如何创建类对象,如何访问全局函数。(本插件中用到的几何对象在后面介绍)
总体来说:
函数定义: function 函数名(变量)
..函数体
end 
if语句 if not f then
return f, message
end

访问类对象的属性 对象名+点+属性: p1.X  
访问类对象的函数 对象名+冒号+函数名: p1:CopyFrom(p2)
访问类对象的静态函数 对象名+点+函数名

其他可参考lua 5.2 版本语法。

四 创建Civil元素
通过key-in :QBAddins Lua Civil 打开脚本编辑窗口。
在文本中输入脚本语言,必须定义Run函数,这个是脚本和插件的接口函数,通过这个函数来执行脚本动作。
例如function Run()
local p1 = QBPoint(0,0,0);
local p2 = QBPoint(100,0,0);
local L = QBLineSegment(p1,p2);
Env:DrawLine2D(L );
end
上面代买将绘制一个civil的2D线出来。

在这个对话的环境变量Env 包含了如下函数 public List<QBPoint> NewPointList();//创建point的list
public List<QBLine> NewLineList();//创建Line的list;
public List<QBPolyLine> NewPolyList();//创建多段线的list
public void DrawLine2D(QBLine l);//绘制直线
public void DrawLine2D(QBPoly l); //绘制多段线
五 创建几何元素
 (待补充.....)

六 创建参数化实体
 建立参数化实体分为两个步骤:1 .QBAddins Lua SolidEdit 创建实体模板 2.key-in:QBAddins Lua SolidPlace  放置实体(或者是在文件中创建模板实例)
 (1)创建实体的模板QBAddins Template Edit
   点击文件>新建  创建一个模板文件,在文本框中写入lua脚本文件,然后可以通过点击test按钮,在程序中任选一点,便可查看生成结果,点击对号保存模板文件。例如:function Regist()
Env:Add("L",500);
Env:Need("CO");
end
function Solid()

local ll = Env:Get("L");
local pts = Env:NewPointList();
pts:Add(QBPoint(0,0,0,"a"));
pts:Add(QBPoint(50,0,0,"a"));
pts:Add(QBPoint(50,0,50,"a"));
pts:Add(QBPoint(0,0,50,"a"));

local se1 = QBSectionSimple(pts);

local pts2 = Env:NewPointList();
pts2:Add(QBPoint(0,0,0,"a"));
pts2:Add(QBPoint(0,ll,50,"a"));
local p1 = QBPolyLine(pts2);
local s=QBSolidExtrude(se1,p1);

Env:AddSolid(s) ;
end
在脚本语言中需要定义两个关键函数Regist() 和 Solid()
其中Regist()函数是向程序注册参数以及参数的初始值,Env:Add("L",500);    向程序注册了参数L 其初始值为500,这样后面就可以通过Env:Get("L");获取到用户修改过的参数值。除此之外还可以通过Need()函数 向程序申请服务,例如Env:Need("CO");标示需要获取用户指定的放置点,这样在Solid函数中就可以通过Env:GetCoordinate()获取当前局部坐标系了.

Solid() 函数 是程序运行脚本生成实体的函数,所有的实体创建过程应该在此函数中完成,并通过Env:AddSolid(s) 函数添加到程序环境中,程序自动将这些实体创建出来。注意:此函数是必不可少的,否则无法创建实体。

在当前的命令环境中包含以下环境变量和函数 public QBPoint GetLocation()// 获取用户选择点
public QBCoordinate GetCoordinate(); //坐标系
public QBPoly GetCenterLine();//获取道路设计线
public double GetSpan(); //获取跨径
public double GetStartStation();//起点桩号
public double GetEndStation(); //终点桩号
public double Get(string _name);//根据名字获取自定义参数
public void AddSolid(QBSolid si);//添加实体
public void Need(string typename); //注册系统需求
public QBPoint NewPoint(double x,double y, double z, string name ="");//创建基于当前坐标的点
public List<QBPoint> NewPointList();//创建point的list
public List<QBLine> NewLineList();
public List<QBPolyLine> NewPolyList();
public List<QBSection> NewSectionList();
public List<QBSolid> NewSolidList();


七 自定义几何类型

线段line//直线段:
public class QBLineSegment : QBLine
{
public QBPoint P0;//点0
public QBPoint P1;//点1
public QBLineSegment();
public QBLineSegment(QBPoint _P0, QBPoint _P1, string _name = "");
public QBPoint StartPoint();//起点
public QBPoint EndPoint(); //终点

public QBPoint GetPoint(int index);//根据index获取点 (从0开始)
public QBPoint GetPoints();//获取点的数组
public QBLine Clone();//克隆
public void CopyFrom(QBLine src);//复制
public void Reverse();//翻转
public List<QBPoint> PointList();//获取点组的list
}
//圆弧线段
public class QBLineArc : QBLine
{
public QBPoint P0;
public QBPoint P1;
public QBPoint P2;
public QBLineArc();
public QBLineArc(string _name);
public QBLineArc(QBPoint _P0, QBPoint _P1, QBPoint _P2, string _name="");
public QBPoint StartPoint();
public QBPoint EndPoint();
public List<QBPoint> PointList();//获取点组的list
}





多段线POLY//点组式多段线
public class QBPolyLine : QBPoly
{
public QBPoint Points;//点组
public QBPolyLine();
public QBPolyLine(QBPoint points, string name="");
public QBPolyLine(List<QBPoint> points, string name = "");
public QBPoint GetPoints();//获取点组
public QBPoly Clone();//克隆
public override void CopyFrom(QBPoly src);//复制
public override bool IsClosed();//是否闭合
public List<QBPoint> PointList();//获取点组的list
}

//线段式多段线
public class QBPolyLineString : QBPoly
{
public QBLine Lines;//线组
public QBPolyLineString();//构造
public QBPolyLineString(List<QBLine> lines, string _name = "");//构造
public QBPolyLineString(QBLine lines, string _name = "");//构造
public QBPoint GetPoints();//获取点组
public void CopyFrom(QBPoly src);//复制
public QBPoly Clone();//克隆
public bool IsClosed(); //是否闭合
public List<QBPoint> PointList();//获取点组的list
public List<QBLine> LineList();//获取线段的list
}






截面section//由点组成的截面
public class QBSectionSimple : QBSection
{
private QBPolyLine mPolyLine;
public QBPolyLine PolyLine;
public QBPoint Points;
public QBSectionSimple();
public QBSectionSimple(QBPoint points);
public QBSectionSimple(List<QBPoint> points, string _name = "");
public QBSectionSimple(QBPolyLine polyline, string _name);
public QBPoint GetPoints();
public QBSection Clone();
public void CopyFrom(QBSection src);
}
//由线段组成的截面
public class QBSectionComplex : QBSection
{
private QBPolyLineString mLineString;
public QBPolyLineString LineString;
public QBSectionComplex();
public QBSectionComplex(List<QBLine> lines);
public QBSectionComplex(List<QBLine> lines, string _name="");
public QBSectionComplex(QBPolyLineString linestring, string _name="");
public QBPoint GetPoints();
public QBSection Clone();
public void CopyFrom(QBSection src)
}
//圆截面
public class QBSectionCircle : QBSection
{
public QBPoint CenterPoint;//中心点
public double Radius;//半径
public QBPoint NormalVector;//截面方向单位向量
public QBSectionCircle();
public QBSectionCircle(QBPoint cpt, QBPoint cv, double r, string _name="");
public QBPoint GetPoints();
public QBSection Clone();
public void CopyFrom(QBSection src);
}

//空心截面
public class QBSectionHollow : QBSection
{
public QBPoly SolidSection;
public QBPoly HollowSections;
public QBSectionHollow();
public QBSectionHollow(QBPoly solidsec, QBPoly hollowsecs, string _name = "");
public QBSectionHollow(QBPoly solidsec, List<QBPoly> hollowsec, string _name = "");
public QBPoint GetPoints();
public QBSection Clone();
public void CopyFrom(QBSection src);
}

实体模型//拉伸实体
public class QBSolidExtrude : QBSolid
{
public QBSection Section;
public QBPoly Path;
public QBSolidExtrude();
public QBSolidExtrude(QBSection sec, QBPoly path, string _name="");
public QBSection GetSection(string _name);
public QBSection GetSections();
public QBPoint GetPoints();
public void CopyFrom(QBSolid src);
public QBSolid Clone();
}
//两条路径线拉伸实体
public class QBSolidMultiExtrude : QBSolid
{
public QBSection SectionI;
public QBSection SectionJ;
public QBPoly Path1;
public QBPoly Path2;
public QBSolidMultiExtrude();
public QBSolidMultiExtrude(QBSection seci, QBSection secj, QBPoly path1, QBPoly path2, string _name = "");
override public QBSection GetSection(string _name);
override public QBSection GetSections();
public QBPoint GetPoints();
public void CopyFrom(QBSolid src);
public QBSolid Clone();
}

//多断面体
public class QBSolidCross : QBSolid
{
public QBSection CrossSections;
public QBSolidCross();
public QBSolidCross(QBSection crossSection, string _name = "");
public QBSolidCross(List<QBSection> crossSection, string _name = "");
public QBSection GetSection(string _name);
public QBSection GetSections();
public QBPoint GetPoints();
public void CopyFrom(QBSolid src);
public QBSolid Clone();
} 查看全部
QuickBridge是基于Bentley 的 PowerCivil  开发的一个实验性质的小插件,主要包含了创建几何元素,创建civil元素 以及 自定义参数化模板三大功能。

其特点是结合了 LUAXML两种模板扩展方式,可以灵活多变创建模板

本篇文章主要讲解的是LUA方式创建参数化模板

一 .安装事项:
 请在选择安装目录时选择PowerCivil目录,例如:> C:\Program Files (x86)\Bentley\PowerCivil V8i (SELECTSeries 4)\PowerCivil\ 
否则程序会安装失败。

二.使用功能介绍

1. 创建几何元素 key-in : QBAddins Lua Geo; 主要是用于创建MicroStation的元素
2. 创建Civil的元素 key-in: QBAddins Lua Civil; 主要用于创建civil的平面线
3. 创建参数化实体key-in:QBAddins Lua SolidEdit ; 主要是用于编辑参数化实体模板; key-in:QBAddins Lua SolidPlace; 用于放置参数实体
4. 访问帮助 key-in : QBAddins Help Web ; 将会打开本网页

三.脚本语言基础
本插件采用了lua语言作为脚本语言,并结合C#并在脚本中引入了一些C#类库和自定义的几何类库
C#类库包含有:System.Text,System.Linq,System.Collections.Generic,System.Windows.Forms,System.IO等
自定义几何类库有:QBGeometry 包含有点,线,多段线,面,体 五大类 以及 坐标系和变化矩阵类
例如点的定义:
public class QBPoint : QBGeometryBase
{
public QBPoint(double _x, double _y, double _z, string _name = "");
public QBPoint();
public QBPoint(QBPoint src, string _name = "");
public double X;
public double Y;
public double Z;
public double this[int idx];
public void SetValue(double _x, double _y, double _z, string _name = "");
public double GetValue(int x_y_z);
public QBPoint Clone();
public void CopyFrom(QBPoint src);
}


其他的类型后面再讲。

接着讲一下Lua脚本的基本语法,通过一个函数定义的例子来说明> (这个例子可以在QBAddins Civil Line2d 命令中直接运行看到效果)
function Run()
local p1 = QBPoint(0,0,0);
local p2 = QBPoint(100,0,0);
local L = QBLineSegment(p1,p2);
Env:DrawLine2D(L );
end

  上面定义了一个Run函数 ,函数名前要加function  关键字,结尾用end 结尾
在函数体内定义了两个点和一根线,并通过调用系统函数实现在图纸中绘制。
local p1 = QBPoint(0,0,0);该句是new了一个QBPoint点对象,(其中的关键字local 是指当前变量p1是局部变量)
local L = QBLineSegment(p1,p2); 是new了一个线段,并传入点p1,p2作为初始化参数。
Env:DrawLine2D(L ); 这句是调用了系统变量Env的DrawLine2D函数,该函数是把线段L绘制到图纸中。
其中Env是插件在脚本中定义的全局系统变量,它提供了很多与PowerCivil交互的函数,通过调用这些函数可以达到与PowerCivil交互的目的。

从上面这个例子可以看到如何定义变量,如何创建类对象,如何访问全局函数。(本插件中用到的几何对象在后面介绍)
总体来说:
函数定义: 
function 函数名(变量)
..函数体
end
 
if语句
 if not f then
return f, message
end


访问类对象的属性 对象名+点+属性: p1.X  
访问类对象的函数 对象名+冒号+函数名: p1:CopyFrom(p2)
访问类对象的静态函数 对象名+点+函数名

其他可参考lua 5.2 版本语法。

四 创建Civil元素
通过key-in :QBAddins Lua Civil 打开脚本编辑窗口。
在文本中输入脚本语言,必须定义Run函数,这个是脚本和插件的接口函数,通过这个函数来执行脚本动作。
例如
function Run()
local p1 = QBPoint(0,0,0);
local p2 = QBPoint(100,0,0);
local L = QBLineSegment(p1,p2);
Env:DrawLine2D(L );
end

上面代买将绘制一个civil的2D线出来。

在这个对话的环境变量Env 包含了如下函数
      public  List<QBPoint> NewPointList();//创建point的list
public List<QBLine> NewLineList();//创建Line的list;
public List<QBPolyLine> NewPolyList();//创建多段线的list
public void DrawLine2D(QBLine l);//绘制直线
public void DrawLine2D(QBPoly l); //绘制多段线

五 创建几何元素
 (待补充.....)

六 创建参数化实体
 建立参数化实体分为两个步骤:1 .QBAddins Lua SolidEdit 创建实体模板 2.key-in:QBAddins Lua SolidPlace  放置实体(或者是在文件中创建模板实例)
 (1)创建实体的模板QBAddins Template Edit
   点击文件>新建  创建一个模板文件,在文本框中写入lua脚本文件,然后可以通过点击test按钮,在程序中任选一点,便可查看生成结果,点击对号保存模板文件。例如:
function Regist()
Env:Add("L",500);
Env:Need("CO");
end
function Solid()

local ll = Env:Get("L");
local pts = Env:NewPointList();
pts:Add(QBPoint(0,0,0,"a"));
pts:Add(QBPoint(50,0,0,"a"));
pts:Add(QBPoint(50,0,50,"a"));
pts:Add(QBPoint(0,0,50,"a"));

local se1 = QBSectionSimple(pts);

local pts2 = Env:NewPointList();
pts2:Add(QBPoint(0,0,0,"a"));
pts2:Add(QBPoint(0,ll,50,"a"));
local p1 = QBPolyLine(pts2);
local s=QBSolidExtrude(se1,p1);

Env:AddSolid(s) ;
end

在脚本语言中需要定义两个关键函数Regist() 和 Solid()
其中Regist()函数是向程序注册参数以及参数的初始值,Env:Add("L",500);    向程序注册了参数L 其初始值为500,这样后面就可以通过Env:Get("L");获取到用户修改过的参数值。除此之外还可以通过Need()函数 向程序申请服务,例如Env:Need("CO");标示需要获取用户指定的放置点,这样在Solid函数中就可以通过Env:GetCoordinate()获取当前局部坐标系了.

Solid() 函数 是程序运行脚本生成实体的函数,所有的实体创建过程应该在此函数中完成,并通过Env:AddSolid(s) 函数添加到程序环境中,程序自动将这些实体创建出来。注意:此函数是必不可少的,否则无法创建实体。

在当前的命令环境中包含以下环境变量和函数
        public QBPoint GetLocation()//  获取用户选择点    
public QBCoordinate GetCoordinate(); //坐标系
public QBPoly GetCenterLine();//获取道路设计线
public double GetSpan(); //获取跨径
public double GetStartStation();//起点桩号
public double GetEndStation(); //终点桩号
public double Get(string _name);//根据名字获取自定义参数
public void AddSolid(QBSolid si);//添加实体
public void Need(string typename); //注册系统需求
public QBPoint NewPoint(double x,double y, double z, string name ="");//创建基于当前坐标的点
public List<QBPoint> NewPointList();//创建point的list
public List<QBLine> NewLineList();
public List<QBPolyLine> NewPolyList();
public List<QBSection> NewSectionList();
public List<QBSolid> NewSolidList();



七 自定义几何类型

线段line
//直线段:
public class QBLineSegment : QBLine
{
public QBPoint P0;//点0
public QBPoint P1;//点1
public QBLineSegment();
public QBLineSegment(QBPoint _P0, QBPoint _P1, string _name = "");
public QBPoint StartPoint();//起点
public QBPoint EndPoint(); //终点

public QBPoint GetPoint(int index);//根据index获取点 (从0开始)
public QBPoint GetPoints();//获取点的数组
public QBLine Clone();//克隆
public void CopyFrom(QBLine src);//复制
public void Reverse();//翻转
public List<QBPoint> PointList();//获取点组的list
}
//圆弧线段
public class QBLineArc : QBLine
{
public QBPoint P0;
public QBPoint P1;
public QBPoint P2;
public QBLineArc();
public QBLineArc(string _name);
public QBLineArc(QBPoint _P0, QBPoint _P1, QBPoint _P2, string _name="");
public QBPoint StartPoint();
public QBPoint EndPoint();
public List<QBPoint> PointList();//获取点组的list
}





多段线POLY
//点组式多段线
public class QBPolyLine : QBPoly
{
public QBPoint Points;//点组
public QBPolyLine();
public QBPolyLine(QBPoint points, string name="");
public QBPolyLine(List<QBPoint> points, string name = "");
public QBPoint GetPoints();//获取点组
public QBPoly Clone();//克隆
public override void CopyFrom(QBPoly src);//复制
public override bool IsClosed();//是否闭合
public List<QBPoint> PointList();//获取点组的list
}

//线段式多段线
public class QBPolyLineString : QBPoly
{
public QBLine Lines;//线组
public QBPolyLineString();//构造
public QBPolyLineString(List<QBLine> lines, string _name = "");//构造
public QBPolyLineString(QBLine lines, string _name = "");//构造
public QBPoint GetPoints();//获取点组
public void CopyFrom(QBPoly src);//复制
public QBPoly Clone();//克隆
public bool IsClosed(); //是否闭合
public List<QBPoint> PointList();//获取点组的list
public List<QBLine> LineList();//获取线段的list
}






截面section
//由点组成的截面
public class QBSectionSimple : QBSection
{
private QBPolyLine mPolyLine;
public QBPolyLine PolyLine;
public QBPoint Points;
public QBSectionSimple();
public QBSectionSimple(QBPoint points);
public QBSectionSimple(List<QBPoint> points, string _name = "");
public QBSectionSimple(QBPolyLine polyline, string _name);
public QBPoint GetPoints();
public QBSection Clone();
public void CopyFrom(QBSection src);
}
//由线段组成的截面
public class QBSectionComplex : QBSection
{
private QBPolyLineString mLineString;
public QBPolyLineString LineString;
public QBSectionComplex();
public QBSectionComplex(List<QBLine> lines);
public QBSectionComplex(List<QBLine> lines, string _name="");
public QBSectionComplex(QBPolyLineString linestring, string _name="");
public QBPoint GetPoints();
public QBSection Clone();
public void CopyFrom(QBSection src)
}
//圆截面
public class QBSectionCircle : QBSection
{
public QBPoint CenterPoint;//中心点
public double Radius;//半径
public QBPoint NormalVector;//截面方向单位向量
public QBSectionCircle();
public QBSectionCircle(QBPoint cpt, QBPoint cv, double r, string _name="");
public QBPoint GetPoints();
public QBSection Clone();
public void CopyFrom(QBSection src);
}

//空心截面
public class QBSectionHollow : QBSection
{
public QBPoly SolidSection;
public QBPoly HollowSections;
public QBSectionHollow();
public QBSectionHollow(QBPoly solidsec, QBPoly hollowsecs, string _name = "");
public QBSectionHollow(QBPoly solidsec, List<QBPoly> hollowsec, string _name = "");
public QBPoint GetPoints();
public QBSection Clone();
public void CopyFrom(QBSection src);
}


实体模型
//拉伸实体
public class QBSolidExtrude : QBSolid
{
public QBSection Section;
public QBPoly Path;
public QBSolidExtrude();
public QBSolidExtrude(QBSection sec, QBPoly path, string _name="");
public QBSection GetSection(string _name);
public QBSection GetSections();
public QBPoint GetPoints();
public void CopyFrom(QBSolid src);
public QBSolid Clone();
}
//两条路径线拉伸实体
public class QBSolidMultiExtrude : QBSolid
{
public QBSection SectionI;
public QBSection SectionJ;
public QBPoly Path1;
public QBPoly Path2;
public QBSolidMultiExtrude();
public QBSolidMultiExtrude(QBSection seci, QBSection secj, QBPoly path1, QBPoly path2, string _name = "");
override public QBSection GetSection(string _name);
override public QBSection GetSections();
public QBPoint GetPoints();
public void CopyFrom(QBSolid src);
public QBSolid Clone();
}

//多断面体
public class QBSolidCross : QBSolid
{
public QBSection CrossSections;
public QBSolidCross();
public QBSolidCross(QBSection crossSection, string _name = "");
public QBSolidCross(List<QBSection> crossSection, string _name = "");
public QBSection GetSection(string _name);
public QBSection GetSections();
public QBPoint GetPoints();
public void CopyFrom(QBSolid src);
public QBSolid Clone();
}

MicroStation介绍

guanghui7 发表了文章 • 0 个评论 • 446 次浏览 • 2016-05-10 15:21 • 来自相关话题

MicroStation是美国Bentley公司研发的CAD软件。MicroStation的第三方软件超过1000种以上,其领域覆盖了土木、建筑、交通、结构、机电、管线、图纸管理、地理信息系统等多方面。
MicroStation 具有以下几大优势:
- (1)MicroStation是综合软件解决方案中的创新平台。使用此平台,用户可在保持整个项目所有数据真实性的同时,使用行业特定的解决方案“进入细分行业”并提高工作效率。
- (2)易于学习和使用。MicroStation 拥有强大的二维/三维建模和可视化功能。此外,MicroStation V8 XM Edition 还支持多种访问形式。简洁直观的新界面使新老用户都可以轻松访问各种强大的新功能。新的键盘定位映射使用户绩效和工作效率提高 2 倍。
- (3)本地dwg支持。MicroStation 通过一个平台支持多种文件格式。全球 95% 的基础设施都是使用DGN 和DWG文件进行设计、建造和维护的。MicroStation 用户可以同时以这两种文件格式直接编辑内容。
- (4)Mircosoft Sharepoint 协作。ProjectWise StartPoint 是一个以 Microsoft Office SharePoint 技术为基础的入门级协作工具。其核心功能在于:支持用户管理、查找和共享 CAD 及地理信息内容、项目数据和 Office 文档。ProjectWise StartPoint 技术通过 MicroStation V8 XM Edition 实现,并在ProjectWise Passport 中启用。ProjectWise StartPoint 为大部分时间在同一办公室工作的团队提供了低成本的入门级解决方案。
- (5)高级表面/实体建模工具。MicroStation 提供了一系列三维建模选项。用于创建和修改带有映射纹理的复杂表面和网状模型的工具,高级建模工具可创建实体建模,更改基于特征的参数化实体建模。此外,可将二维/三维几何图形从 MicroStation 发布到Google Earch,SketchUp 模型也可以直接从Google3DWarehouse 导入到 MicroStation V8 XM Edition 中。
- (6)PDF发布和集成。使用 MicroStation 中的 PDF 发布和集成功能,用户可以采用 PDF 文件格式共享二维和三维设计。MicroStation 用户还可以将 PDF 文件作为参考文件附加到现有的 DGN 和DWG文件中,完成整个设计和评估过程。
- (7)。在可视化方面,MicroStation 推出了 Microsoft DirectX 提供强大支持的新图形系统。最终形成线框或阴影视图中的动态控制模型新功能。这一新功能还支持元素透明以及 PANTONE® 和 RAL® 色彩系统,使可视化效果色彩更丰富。此外,照片实感渲染方面的重大进步和全新品牌的动画系统完善了整套全新可视化功能。
- (8)。设计历史记录功能提供了完整的修改控制系统,支持用户跟踪和查看不断进行的各种更改,并使用数字签名验证所做更改,从而确认任何设计文档的状态。通过在 DGN 文件中启用设计历史记录,每次添加、删除、控制或编辑都会记录下来,以供将来跟踪。设计迭代可以在关键阶段进行比较,也可比较图形之间的差异。使用设计历史记录之后,设想如果没有这种功能,管理变更将是一件多么棘手的事情。
- (9)。在一致性方面,MicroStation推出了全新的基于任务的工具和元素模板,结合使用这些工具和模板可让团队协同工作,创造一致的工作成果。Tasks 功能还可采用统一方式将各个行业应用程序的所有功能组合在一起,使用户可以将其对产品的了解和认识传递给他人。在 MicroStation V8 XM Edition 平台中开发时,MicroStation 这一强大的创新功能还可使 Bentley 行业单点综合解决方案保持一致性。
(10)。V8 CAD 标准一如继往地保持对 DGN 文件格式的支持,使现有 MicroStation 可以轻松进行更新,从而使分布式企业中的文件和内容保持稳定不变。在 MicroStation 和 AutoCAD 之间保留了完整而持续的团队互操作性。未更改的文件格式可不断扩展数据并传递给所有相关团队的参与者,对于长期的大型基础设施项目而言,文件格式的更改极易引起混乱,因此往往不予采纳,不过 MicroStation V8 XM Edition 提供了关键且必要的一致性解决方案。 查看全部
MicroStation是美国Bentley公司研发的CAD软件。MicroStation的第三方软件超过1000种以上,其领域覆盖了土木、建筑、交通、结构、机电、管线、图纸管理、地理信息系统等多方面。
MicroStation 具有以下几大优势:
- (1)MicroStation是综合软件解决方案中的创新平台。使用此平台,用户可在保持整个项目所有数据真实性的同时,使用行业特定的解决方案“进入细分行业”并提高工作效率。
- (2)易于学习和使用。MicroStation 拥有强大的二维/三维建模和可视化功能。此外,MicroStation V8 XM Edition 还支持多种访问形式。简洁直观的新界面使新老用户都可以轻松访问各种强大的新功能。新的键盘定位映射使用户绩效和工作效率提高 2 倍。
- (3)本地dwg支持。MicroStation 通过一个平台支持多种文件格式。全球 95% 的基础设施都是使用DGN 和DWG文件进行设计、建造和维护的。MicroStation 用户可以同时以这两种文件格式直接编辑内容。
- (4)Mircosoft Sharepoint 协作。ProjectWise StartPoint 是一个以 Microsoft Office SharePoint 技术为基础的入门级协作工具。其核心功能在于:支持用户管理、查找和共享 CAD 及地理信息内容、项目数据和 Office 文档。ProjectWise StartPoint 技术通过 MicroStation V8 XM Edition 实现,并在ProjectWise Passport 中启用。ProjectWise StartPoint 为大部分时间在同一办公室工作的团队提供了低成本的入门级解决方案。
- (5)高级表面/实体建模工具。MicroStation 提供了一系列三维建模选项。用于创建和修改带有映射纹理的复杂表面和网状模型的工具,高级建模工具可创建实体建模,更改基于特征的参数化实体建模。此外,可将二维/三维几何图形从 MicroStation 发布到Google Earch,SketchUp 模型也可以直接从Google3DWarehouse 导入到 MicroStation V8 XM Edition 中。
- (6)PDF发布和集成。使用 MicroStation 中的 PDF 发布和集成功能,用户可以采用 PDF 文件格式共享二维和三维设计。MicroStation 用户还可以将 PDF 文件作为参考文件附加到现有的 DGN 和DWG文件中,完成整个设计和评估过程。
- (7)。在可视化方面,MicroStation 推出了 Microsoft DirectX 提供强大支持的新图形系统。最终形成线框或阴影视图中的动态控制模型新功能。这一新功能还支持元素透明以及 PANTONE® 和 RAL® 色彩系统,使可视化效果色彩更丰富。此外,照片实感渲染方面的重大进步和全新品牌的动画系统完善了整套全新可视化功能。
- (8)。设计历史记录功能提供了完整的修改控制系统,支持用户跟踪和查看不断进行的各种更改,并使用数字签名验证所做更改,从而确认任何设计文档的状态。通过在 DGN 文件中启用设计历史记录,每次添加、删除、控制或编辑都会记录下来,以供将来跟踪。设计迭代可以在关键阶段进行比较,也可比较图形之间的差异。使用设计历史记录之后,设想如果没有这种功能,管理变更将是一件多么棘手的事情。
- (9)。在一致性方面,MicroStation推出了全新的基于任务的工具和元素模板,结合使用这些工具和模板可让团队协同工作,创造一致的工作成果。Tasks 功能还可采用统一方式将各个行业应用程序的所有功能组合在一起,使用户可以将其对产品的了解和认识传递给他人。在 MicroStation V8 XM Edition 平台中开发时,MicroStation 这一强大的创新功能还可使 Bentley 行业单点综合解决方案保持一致性。
(10)。V8 CAD 标准一如继往地保持对 DGN 文件格式的支持,使现有 MicroStation 可以轻松进行更新,从而使分布式企业中的文件和内容保持稳定不变。在 MicroStation 和 AutoCAD 之间保留了完整而持续的团队互操作性。未更改的文件格式可不断扩展数据并传递给所有相关团队的参与者,对于长期的大型基础设施项目而言,文件格式的更改极易引起混乱,因此往往不予采纳,不过 MicroStation V8 XM Edition 提供了关键且必要的一致性解决方案。