Civil 3d 路线(alignment)之浮动(Floating)图元API
结合学习和研究,在此留下笔记,加深印象,也希望给大家提供参考:
在Civil 3d的.Net API中,有非常多的浮动图元接口,如下:
public AlignmentSCS AddFloatingArcWithSpiral(int attachEntityId, EntityAttachType attachType, double spParam, SpiralParamType spType, double radius, Point3d passThroughPoint, bool isGreaterThan180, SpiralType spiralDefinition);
public AlignmentSCS AddFloatingArcWithSpiral(int attachEntityId, EntityAttachType attachType, double spParam, SpiralParamType spType, double radius, double arcLength, bool isClockwise, SpiralType spiralDefinition);
public AlignmentSSCSS AddFloatingCSS(int nextEntityId, Point3d passThroughPoint1, Point3d passThroughPoint2, double sp3Param, double sp4Param, SpiralParamType spType, SpiralType spiralDefinition);
public AlignmentSSCSS AddFloatingCSS(int nextEntityId, double radius, Point3d passThroughPoint, double sp3Param, double sp4Param, SpiralParamType spType, SpiralType spiralDefinition);
public AlignmentArc AddFloatingCurve(int previousEntityId, Point3d passThroughPoint);
public AlignmentArc AddFloatingCurve(int previousEntityId, Point3d passThroughPoint, double radius, bool isGreaterThan180, CurveType curveType);
public AlignmentArc AddFloatingCurve(Point3d passThroughPoint, Vector3d directionAtPassThroughPoint, int nextEntityId);
public AlignmentArc AddFloatingCurve(Point3d passThroughPoint, int nextEntityId);
public AlignmentArc AddFloatingCurve(Point3d passThroughPoint, double radius, bool isGreaterThan180, CurveType curveType, int nextEntityId);
public AlignmentArc AddFloatingCurve(int previousEntityId, Point3d passThroughPoint, Vector3d directionAtPassThroughPoint);
public AlignmentArc AddFloatingCurve(int previousEntityId, double radius, double paramValue, CurveParamType paramType, bool isClockwise);
public AlignmentArc AddFloatingCurve(double radius, double paramValue, CurveParamType paramType, bool isClockwise, int nextEntityId);
public AlignmentLine AddFloatingLine(int previousEntityId, Point3d passThroughPoint);
public AlignmentLine AddFloatingLine(int previousEntityId, double length);
public AlignmentLine AddFloatingLine(Point3d passThroughPoint, int nextEntityId);
public AlignmentLine AddFloatingLine(double length, int nextEntityId);
public AlignmentSTS AddFloatingLineWithSpiral(int attachEntityId, EntityAttachType attachType, double spParam, SpiralParamType spType, Point3d passThroughPoint, SpiralType spiralDefinition);
public AlignmentSTS AddFloatingLineWithSpiral(int attachEntityId, EntityAttachType attachType, double spParam, SpiralParamType spType, double tanLength, SpiralType spiralDefinition);
public AlignmentSSCSS AddFloatingSSC(int previousEntityId, double sp1Param, double sp2Param, SpiralParamType spType, double radius, Point3d passThroughPoint, SpiralType spiralDefinition);
public AlignmentSSCSS AddFloatingSSC(int previousEntityId, double sp1Param, double sp2Param, SpiralParamType spType, Point3d passThroughPoint1, Point3d passThroughPoint2, SpiralType spiralDefinition);
public AlignmentSpiral AddFloatSpiral(double radius, double length, int nextEntityId, bool isClockwise, SpiralType spiralDefinition);
public AlignmentSpiral AddFloatSpiral(int previousEntityId, double radius, double length, bool isClockwise, SpiralType spiralDefinition);
下面我简单从里面我研究有结果的函数进行说明和分析:
public AlignmentSCS AddFloatingArcWithSpiral(int attachEntityId, EntityAttachType attachType, double spParam, SpiralParamType spType, double radius, Point3d passThroughPoint, bool isGreaterThan180, SpiralType spiralDefinition);
public AlignmentSCS AddFloatingArcWithSpiral(int attachEntityId, EntityAttachType attachType, double spParam, SpiralParamType spType, double radius, double arcLength, bool isClockwise, SpiralType spiralDefinition);
这两个很简单,第一个整清楚了,第二个就简单了,注意一些注意事项就ok
attachEntityId 就很简单了,就是依附实体Id(同样注意,路线的图元id不是从0开始的)
attachType 枚举依附类型,Append为依附实体向后添加(依附于前一图元),prepend依附实体前添加(依附于前一图元)
spParam 参数值,这个值的表示与后面的参数有关系;
spType 枚举,A值(Avalue)和 长度(Length)这里都是指缓和曲线的参数
radius 半径;
passThroughPoint 经过的点,其实是圆弧的终点,注意,不能是圆弧的起点(圆弧长度为0)否则会异常,当然这点必须在有前面参数(spParam,spType,radius)所确定的圆上,不然也会报错;
isGreaterThan180 是否大于180度
spiralDefinition 缓和曲线的类型(见本人对spiralDefinition的理解博客)
第一个所有参数分析完毕,第二个就和第一个有一点不同,经过的点变成了长度而已;
结果都是生成带缓和曲线的圆弧。
接下来这二个进行分析:
public AlignmentSpiral AddFloatSpiral(double radius, double length, int nextEntityId, bool isClockwise, SpiralType spiralDefinition);
public AlignmentSpiral AddFloatSpiral(int previousEntityId, double radius, double length, bool isClockwise, SpiralType spiralDefinition);
先说说这两个API生成的结果:都是生成“前”缓和曲线
带有nextEntityId的是约束于后一图元,带有previousEntityId是约束于后一图元
radius和length分别为半径和长度,也决定和缓和权限的A值(Avalue )公式(Avalue的平方=radius*length)
接下来谈谈AddFloatingCurve:
public AlignmentArc AddFloatingCurve(int previousEntityId, Point3d passThroughPoint);
public AlignmentArc AddFloatingCurve(int previousEntityId, Point3d passThroughPoint, double radius, bool isGreaterThan180, CurveType curveType);
public AlignmentArc AddFloatingCurve(Point3d passThroughPoint, Vector3d directionAtPassThroughPoint, int nextEntityId);
public AlignmentArc AddFloatingCurve(Point3d passThroughPoint, int nextEntityId);
public AlignmentArc AddFloatingCurve(Point3d passThroughPoint, double radius, bool isGreaterThan180, CurveType curveType, int nextEntityId);
public AlignmentArc AddFloatingCurve(int previousEntityId, Point3d passThroughPoint, Vector3d directionAtPassThroughPoint);
public AlignmentArc AddFloatingCurve(int previousEntityId, double radius, double paramValue, CurveParamType paramType, bool isClockwise);
public AlignmentArc AddFloatingCurve(double radius, double paramValue, CurveParamType paramType, bool isClockwise, int nextEntityId);
第一个:根据前一图元的终点和致电点以及前一图元的切线方向绘制浮动圆弧
第二个:圆弧的终点为passThroughPoint,半径为radius,并经过前一图元的终点, isGreaterThan180不用再说,但是CurveType值得注意,很容易异常,CurveType枚举有两个值(Compound,Reverse)Compound翻译过来是复合的意思,加上一点个人的理解在里面,其实就是同向,特别注意:Reverse为反向,前一图元不能为直线,如有误望指正;
第三个,通过点和nextEntityId的起点,以及方向得到圆弧图元,注意这里的方向directionAtPassThroughPoint,表达能力有限,多做尝试总结即可
第四个,不动后一图元的起点得到圆弧
第五个和第二个类似
第六个和第三个类似
第七个和第八个是一对,由于CurveParamType枚举有9个,所以,下面慢慢来说明部分(有几个我暂时也没有搞清楚,有时间在继续研究补上)
public enum CurveParamType
{
Radius = 0, /// 其实翻译很简单,但是在应用的时候,真不知道怎么传
DegreeOfCurve = 1, ///Degree翻译:度,但是不是幅度(PI),也不是360度这个
TangentLength = 2, ///切线长度,这个经过多次计算终于知道,就是两条切线,交点到图元起点或终点的距离
ChordLength = 3, ///弦长
CurveLength = 4, ///弧长
ExternalDist = 5, ///ExternalSecant 外割线,圆弧上的终点到两条切线交点的距离
MiddleOrdinate = 6, ///弦心距,就是弦与圆心的距离
CurveAngle = 7, ///幅度,PI/2 (90度圆弧)
CurveThroughPoint = 8 ///这个也不知道,看起来是一个点坐标,但是怎么用一个double参数来表示,头疼
}
这下面的是浮动直线,就不用说 了,很简单:
public AlignmentLine AddFloatingLine(int previousEntityId, Point3d passThroughPoint);
public AlignmentLine AddFloatingLine(int previousEntityId, double length);
public AlignmentLine AddFloatingLine(Point3d passThroughPoint, int nextEntityId);
public AlignmentLine AddFloatingLine(double length, int nextEntityId);
上面的来源并非官方来源,只是自己通过一些数学知识和翻译了进行了一些尝试性的测试,如有无望指点,评论,我即时修改。
AddFloatingCSS 和 AddFloatingSSC后期继续
Civil 3d 路线(alignment)之浮动(Floating)图元API相关推荐
- Civil 3d 路线之固定图元(AlignmentEntity)部分分析
研究路线图元,再很大程度上,可以实现数字创建路线,目前,再civil 3d中存在的路线图元主要分为3类:固定图元.浮动图元.自由图元,今天再这里对固定图元接口进行简单的说明: public Align ...
- AutoCAD Civil 3d道路建模路线-规范编辑器及超高
Civil 3d道路建模路线-规范编辑器及超高.在路线已设计好的情况下,Civil 3d的规范编辑器主要用于生成超高数据,以构建更精细模型和横断面出图.若模型无需超高数据,则可忽略规范编辑器. 市政道 ...
- Civil 3D CustomDraw .NET混合项目设置
样例文件中的CustomDraw项目使用的是COM API, 但COM API不完整, 某些时候需要使用.NET API, 此时需要将C++项目设置成"公共语言运行时支持(/clr)&quo ...
- vb 打开sdf数据_DWG、DGN、SDF、DWF!Civil 3D图形数据共享的几种方法
来源:欧特克BIM俱乐部 版权归原作者所有 我们可以使用多种方法来共享 Autodesk Civil 3D 图形数据.下表列出了每种方法所使用的功能: 使用代理图形 代理图形保存最后一次查看的 Aut ...
- AutoCAD Civil 3D笔记
本文纯属笔记,年纪大了备忘而已.不喜勿入,不懂速出! 1.块编辑及定义 块编辑命令:BE 块定义命令:BM 添加属性:ATTDEF 管理块属性:BATTMAN 创建块:BLOCK 写块:WBLOCK ...
- AutoCAD Civil 3D中将CASS地形图中地形点转换成CAD点实体
使用AutoCAD Civil 3D打开CASS生成的地形图,由于CASS地形图中的地形点是以块形式存在的,虽然我们可以使用CAD的图元对象中的块进行曲面定义,但这样做的结果就是虽有曲面但没有对应的地 ...
- AutoCAD Civil 3D装配道路
经过前两次的努力,你已经有了设计路面,但是它只是一个二维的平面,就像被二向箔攻击过一样,没什么卵用.接下来,你需要设计装配,并创建道路实体. Civil 3D喜欢以路的中心线作为道路的基准线.所以你最 ...
- AutoCAD Civil 3D中的对象和标签
前面在Civil3D学习方法中也有提过: 在学习AutoCAD Civil 3D 的过程中,首先要充分的理解一下几个概念: 对象和对象样式 标签和标签样式 对象和对象 对象和标签. 这几个词看似很相近 ...
- Civil 3d 之枚举 SpiralType
最近研究路线的创建问题,通过一系列的尝试,总算是对Civil 3d中的枚举 SpiralType有了初步的了解: 根据界面见下面对应的值: public enum SpiralType { ...
最新文章
- 通用权限管理模块系列————参考资料————Windows安全性参考
- 3——PHP 简单运算符的使用
- Mysql 拿指定经纬度与数据库多条经纬度进行距离计算
- Linux shell命令最常用的快捷键
- 用python读取excel文件观看节目的总时长_python读取excel所有数据(cmd界面)
- 洛谷P1258 小车问题(题解)
- [原创].触摸屏滤波的一点心得
- c语言实现运输问题表上作业法,运输问题表上作业法
- php 递归函数 示例,php递归使用示例(php递归函数)_PHP
- Unity游戏开始界面制作教学
- java resourcebundle_Java ResourceBundle.getBundle如何加载属性文件?
- 一文读懂大比例尺地形图测绘
- 汇编指令lea取偏移地址
- 史上最系统的程序员未来职业规划路线
- 11月03日 星期四
- Raspberry Pi远程多功能监控摄像机
- shader Cg 基本数据类型
- python抓取京东的商品信息
- 三星nfc添加门禁卡实测有效_小米的NFC功能到底有多强大?看完折服!
- 零基础学习Python 作业 第28章