(Tekla Structures二次开发)分享官方示例DimensionCreator

本文主要是介绍(Tekla Structures二次开发)分享官方示例DimensionCreator,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

分享一个Tekla官方的示例DimensionCreator,首先在vs中新建项目,添加引用文件,新建控件如下图所示:
窗口样式
控件名称如下代码所示:

        private System.Windows.Forms.Button angleDimensionButton;private System.Windows.Forms.Button radiusDimensionButton;private System.Windows.Forms.Button straightDimensionButton;private System.Windows.Forms.Button curvedRadialDimensionButton;private System.Windows.Forms.Button curvedOrthogonalDimensionButton;private System.Windows.Forms.CheckBox repeatCheckBox;private System.Windows.Forms.NumericUpDown distanceNumericUpDown;private System.Windows.Forms.Label distanceLabel;private System.Windows.Forms.NumericUpDown numberOfPointsToPickNumericUpDown;private System.Windows.Forms.Label numberOfPointsToPickLabel;private System.Windows.Forms.GroupBox groupBox1;private System.Windows.Forms.GroupBox groupBox2;private System.Windows.Forms.GroupBox groupBox3;private System.Windows.Forms.Button quitButton;

添加类,代码如下:

using System;
using Tekla.Structures.Drawing;
using Tekla.Structures.Geometry3d;
using Tekla.Structures.Drawing.UI;namespace DimensionCreator
{class DimensionCreator{private static readonly PointList lastPoints = new PointList();private static ViewBase lastView;public static bool Repeat = false;public static int Points = 3;static void PickPoints(int numberToPick, ref PointList pointList, ref ViewBase view){if(Repeat){view = lastView;foreach (Point pointt in lastPoints){pointList.Add(new Point(pointt));}return;}var picker = new DrawingHandler().GetPicker();int ii = numberToPick;lastPoints.Clear();while(--ii!=-1){Point point;picker.PickPoint("Pick point", out point, out view);pointList.Add(point);lastPoints.Add(new Point(point));}lastView = view;}public static void CreateAngleDimension(){PointList pointList = new PointList();ViewBase view = null;PickPoints(3, ref pointList, ref view);double distance = Math.Sqrt(new Vector(pointList[1] - pointList[0]).Dot(new Vector(pointList[1] - pointList[0])));double viewScale = 1.0;if (view is View)viewScale = (view as View).Attributes.Scale;distance = distance / viewScale;AngleDimension ad = new AngleDimension(view, pointList[0], pointList[1], pointList[2], distance);ad.Insert();new DrawingHandler().GetActiveDrawing().CommitChanges();}internal static void CreateRadiunDimension(double distance){PointList pointList = new PointList();ViewBase view = null;PickPoints(3, ref pointList, ref view);RadiusDimension rd = new RadiusDimension(view, pointList[0], pointList[1], pointList[2], distance);rd.Insert();new DrawingHandler().GetActiveDrawing().CommitChanges();}internal static void CreateStraightDimension(double distance){PointList pointList = new PointList();ViewBase view;Point firstPoint;Point secondPoint;Picker picker = new DrawingHandler().GetPicker();picker.PickTwoPoints("Pick first point", "Pick second point", out firstPoint, out secondPoint, out view);pointList.Add(firstPoint);pointList.Add(secondPoint);//获取与第一点,第二点连线方向垂直的向量Vector direction = new Vector(firstPoint.Y - secondPoint.Y, secondPoint.X - firstPoint.X, firstPoint.Z);StraightDimensionSet sds = new StraightDimensionSetHandler().CreateDimensionSet(view, pointList, direction, distance);//至少一点与零件关联,否则标记不起作用sds.Attributes.LeftLowerTag.Add(new TextElement("LeftLow"));sds.Attributes.LeftMiddleTag.Add(new TextElement("LeftMiddle"));sds.Attributes.LeftUpperTag.Add(new TextElement("LeftUpper"));sds.Attributes.RightLowerTag.Add(new TextElement("RightLow"));sds.Attributes.RightMiddleTag.Add(new TextElement("RightMiddle"));sds.Attributes.RightUpperTag.Add(new TextElement("RightUpper"));bool isOk = sds.Modify();new DrawingHandler().GetActiveDrawing().CommitChanges();}//弯曲尺寸(增加直角参考线)internal static void CreateCurvedOrthoDimension(double distance){PointList pointList = new PointList();ViewBase view = null;PickPoints(Points, ref pointList, ref view);new CurvedDimensionSetHandler().CreateCurvedDimensionSetOrthogonal(view, pointList[0], pointList[1],pointList[pointList.Count-1], pointList, distance);new DrawingHandler().GetActiveDrawing().CommitChanges();}//弯曲尺寸(增加半径参考线)internal static void CreateCurvedRadialDimension(double distance){PointList pointList = new PointList();ViewBase view = null;PickPoints(3, ref pointList, ref view);new CurvedDimensionSetHandler().CreateCurvedDimensionSetRadial(view, pointList[0], pointList[1], pointList[2],pointList, distance);new DrawingHandler().GetActiveDrawing().CommitChanges();}}
}

窗体控件操作代码如下:

using System;
using System.Windows.Forms;namespace DimensionCreator
{public partial class Form1 : Form{public Form1(){InitializeComponent();}private void angleDimensionButton_Click(object sender, EventArgs e){try { DimensionCreator.CreateAngleDimension(); }catch (Exception) { }}private void radiusDimensionButton_Click(object sender, EventArgs e){try { DimensionCreator.CreateRadiunDimension((double)this.distanceNumericUpDown.Value); }catch (Exception) { }}private void straightDimensionButton_Click(object sender, EventArgs e){try { DimensionCreator.CreateStraightDimension((double)this.distanceNumericUpDown.Value); }catch (Exception) { }}private void curvedRadialDimensionButton_Click(object sender, EventArgs e){try { DimensionCreator.CreateCurvedRadialDimension((double)this.distanceNumericUpDown.Value); }catch { }}private void curvedOrthogonalDimensionButton_Click(object sender, EventArgs e){try { DimensionCreator.CreateCurvedOrthoDimension((double)this.distanceNumericUpDown.Value); }catch (Exception) { }}private void repeatCheckBox_CheckedChanged(object sender, EventArgs e){DimensionCreator.Repeat = !DimensionCreator.Repeat;}private void numberOfPointsToPickNumericUpDown_ValueChanged(object sender, EventArgs e){DimensionCreator.Points = (int)this.numberOfPointsToPickNumericUpDown.Value;}}
}

说明:
半径标注与value框中的值无关,其余四个会受到distance值的影响。
其中“弯曲尺寸(增加直角参考线)”拾取点的数量会受到NumberOfPoint影响。

关于Option中Repeat的作用:使用除“直尺寸标注”外的四个标注中任一标注完后,勾选Repeat,另外三个不会再拾取点,而是使用第一个已经拾取的点进行标注。

这篇关于(Tekla Structures二次开发)分享官方示例DimensionCreator的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/701817

相关文章

Golang操作DuckDB实战案例分享

《Golang操作DuckDB实战案例分享》DuckDB是一个嵌入式SQL数据库引擎,它与众所周知的SQLite非常相似,但它是为olap风格的工作负载设计的,DuckDB支持各种数据类型和SQL特性... 目录DuckDB的主要优点环境准备初始化表和数据查询单行或多行错误处理和事务完整代码最后总结Duck

python实现pdf转word和excel的示例代码

《python实现pdf转word和excel的示例代码》本文主要介绍了python实现pdf转word和excel的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价... 目录一、引言二、python编程1,PDF转Word2,PDF转Excel三、前端页面效果展示总结一

在MyBatis的XML映射文件中<trim>元素所有场景下的完整使用示例代码

《在MyBatis的XML映射文件中<trim>元素所有场景下的完整使用示例代码》在MyBatis的XML映射文件中,trim元素用于动态添加SQL语句的一部分,处理前缀、后缀及多余的逗号或连接符,示... 在MyBATis的XML映射文件中,<trim>元素用于动态地添加SQL语句的一部分,例如SET或W

Mybatis官方生成器的使用方式

《Mybatis官方生成器的使用方式》本文详细介绍了MyBatisGenerator(MBG)的使用方法,通过实际代码示例展示了如何配置Maven插件来自动化生成MyBatis项目所需的实体类、Map... 目录1. MyBATis Generator 简介2. MyBatis Generator 的功能3

Redis延迟队列的实现示例

《Redis延迟队列的实现示例》Redis延迟队列是一种使用Redis实现的消息队列,本文主要介绍了Redis延迟队列的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习... 目录一、什么是 Redis 延迟队列二、实现原理三、Java 代码示例四、注意事项五、使用 Redi

将Python应用部署到生产环境的小技巧分享

《将Python应用部署到生产环境的小技巧分享》文章主要讲述了在将Python应用程序部署到生产环境之前,需要进行的准备工作和最佳实践,包括心态调整、代码审查、测试覆盖率提升、配置文件优化、日志记录完... 目录部署前夜:从开发到生产的心理准备与检查清单环境搭建:打造稳固的应用运行平台自动化流水线:让部署像

在Pandas中进行数据重命名的方法示例

《在Pandas中进行数据重命名的方法示例》Pandas作为Python中最流行的数据处理库,提供了强大的数据操作功能,其中数据重命名是常见且基础的操作之一,本文将通过简洁明了的讲解和丰富的代码示例,... 目录一、引言二、Pandas rename方法简介三、列名重命名3.1 使用字典进行列名重命名3.编

Python使用Colorama库美化终端输出的操作示例

《Python使用Colorama库美化终端输出的操作示例》在开发命令行工具或调试程序时,我们可能会希望通过颜色来区分重要信息,比如警告、错误、提示等,而Colorama是一个简单易用的Python库... 目录python Colorama 库详解:终端输出美化的神器1. Colorama 是什么?2.

Go Gorm 示例详解

《GoGorm示例详解》Gorm是一款高性能的GolangORM库,便于开发人员提高效率,本文介绍了Gorm的基本概念、数据库连接、基本操作(创建表、新增记录、查询记录、修改记录、删除记录)等,本... 目录1. 概念2. 数据库连接2.1 安装依赖2.2 连接数据库3. 数据库基本操作3.1 创建表(表关

Python视频剪辑合并操作的实现示例

《Python视频剪辑合并操作的实现示例》很多人在创作视频时都需要进行剪辑,本文主要介绍了Python视频剪辑合并操作的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习... 目录介绍安装FFmpegWindowsMACOS安装MoviePy剪切视频合并视频转换视频结论介绍