UG/NX 二次开发(C#)自动出2D零件图(标准件配置Bata版)

news2024/11/19 22:24:44

一、前言

        昨天分享了自动出2D零件图的思路(UG/NX 二次开发(C#)自动出2D零件图思路),今天整理了Q群里各位大佬的意见,结合当前实际项目情况,做了一个可配置的半自动出图版本,暂且称之为标准件配置Bata版。

        虽然没能实现自动出2D零件图,但是拿着去跟老板交差,应该勉强过关吧,毕竟也年底了,大家都想早点回家过年。

二、实现原理

先引入昨天的思路:

1、出图方案设置

     出图方式千千万,每个人都有自己的想法,我们需要先定一个标准,然后程序才能按照标准自动出图,标准如下:

      1)图纸参数设置,包括图纸类型,视图比例,图纸名称

      2)视图布局方案,根据用户需求对视图进行布局,视图包括:顶视图、左视图、右视图、后视图、底视图、正三轴视图、右剖视图、底剖视图。

      3)标注方案,目前我想到的先从简单的平面尺寸开始,先做水平、垂直、角度的标注

2、自动创建图纸、自动创建视图

3、自动标注

经过今天的梳理,再整理一个版本:

1、创建图纸

      涉及到图纸参数设置,这个小意思容易解决

2、创建视图

      需要根据需求配置视图方案,个人认为做成配置文件即可,先放一放

3、创建尺寸标注 

      重点来了,如何创建标注才是自动出图的重头戏,因为每个视图的情况不一样,不同产品在不同视图里面的情况就更复杂了。所以今天引入了标准件和配置的概念。既然一口吃不了一个胖子,就先把标准的东西搞出来。

此版本效果图如下:

三、详细方案 

这里只针对标准件做自动出图,而且加入了出图配置文件,也就是根据配置文件程序一步一步的执行,先看看配置文件:

<?xml version="1.0" encoding="utf-8" ?>
<Draw>
  <view title="顶视图" name="TOP" point="120, 200, 0.0">
    <dim type="CreateVerticalDim" edgeStart="EDGESTART" edgeEnd="EDGEEND" dimension_3d_origin="50, 210, 0"></dim>
    <dim type="CreateParallelDim" edgeStart="EDGE3" edgeEnd="EDGEEND" dimension_3d_origin="57, 165, 0"></dim>
    <dim type="CreateParallelDim" edgeStart="EDGE1" edgeEnd="EDGE2" dimension_3d_origin="120, 265, 0"></dim>
    <dim></dim>
  </view>
  <view title="左视图" name="LEFT" point="120, 80, 0.0">
    <dim type="CreateDiameterDim" holeFlag="hole" dimension_3d_origin="140, 100, 0.0"></dim>
  </view>
  <view title="正三轴视图" name="TFR-ISO" point="300, 180, 0.0">
  </view>
</Draw>

view标签代表出图的视图,标签详情包括了视图类别、视图的位置坐标

dim标签代表每一个尺寸标注, 标签详情包括了标注的类别、起始位置、坐标

有这些信息加持,自动出尺寸标注就很清晰了吧

下面正式开始进入程序分享:

1、新建图纸

Tag dragTag = DrawTool.CreatDWG(workPart, "Sheet1");


/// <summary>
/// 创建图纸
/// </summary>
/// <param name="workPart"></param>
/// <returns></returns>
public static Tag CreatDWG(Part workPart,string sheetName)
{
    NXOpen.Drawings.DrawingSheet nullDrawings_DrawingSheet = null;
    NXOpen.Drawings.DrawingSheetBuilder drawingSheetBuilder1;
    drawingSheetBuilder1 = workPart.DrawingSheets.DrawingSheetBuilder(nullDrawings_DrawingSheet);
    drawingSheetBuilder1.StandardMetricScale = NXOpen.Drawings.DrawingSheetBuilder.SheetStandardMetricScale.S11;
    drawingSheetBuilder1.EnglishSheetTemplateLocation = "";
    drawingSheetBuilder1.Height = 297.0;
    drawingSheetBuilder1.Length = 420.0;
    drawingSheetBuilder1.StandardMetricScale = NXOpen.Drawings.DrawingSheetBuilder.SheetStandardMetricScale.S11;
    drawingSheetBuilder1.StandardEnglishScale = NXOpen.Drawings.DrawingSheetBuilder.SheetStandardEnglishScale.S11;
    drawingSheetBuilder1.ScaleNumerator = 1.0;
    drawingSheetBuilder1.ScaleDenominator = 1.0;
    drawingSheetBuilder1.Units = NXOpen.Drawings.DrawingSheetBuilder.SheetUnits.Metric;
    drawingSheetBuilder1.ProjectionAngle = NXOpen.Drawings.DrawingSheetBuilder.SheetProjectionAngle.First;
    drawingSheetBuilder1.Number = "1";
    drawingSheetBuilder1.SecondaryNumber = "";
    drawingSheetBuilder1.Revision = "A";
    drawingSheetBuilder1.Name = sheetName;
    drawingSheetBuilder1.MetricSheetTemplateLocation = "D:\\Program Files\\Siemens\\NX 8.0\\localization\\prc\\simpl_chinese\\startup\\A3-noviews-template.prt";
    NXObject nXObject1;
    nXObject1 = drawingSheetBuilder1.Commit();
    drawingSheetBuilder1.Destroy();
    return nXObject1.Tag;
}

2、读取配置文件,并遍历view,创建视图

//读取配置文件
XmlDocument xml = new XmlDocument();
xml.Load(AppDomain.CurrentDomain.BaseDirectory.ToString() + @"dimconfig.xml");
XmlNode xn = xml.SelectSingleNode("Draw");
XmlNodeList xnl = xn.ChildNodes;
Tag topViewTag, leftViewTag, tfrViewTag;
Tag topDrawViewTag, leftDrawViewTag, tfrDrawViewTag;
Tag dimTag1, dimTag2, dimTag3;
            
string strPoint;
Point3d point = new Point3d();
string edgeStart, edgeEnd, holeFlag, dimension_3d_origin_str;
double[] dimension_3d_origin;
Tag edgeStartTag = Tag.Null;
Tag edgeEndTag = Tag.Null;
Tag holeTag = Tag.Null;

//创建视图
foreach (XmlNode xnitem in xnl)
{
    XmlElement xe = (XmlElement)xnitem;
    string name = xe.GetAttribute("name");
    strPoint = xe.GetAttribute("point");
    point = GetPointFromStr(strPoint);
    if (name == "TOP")
    {
        DrawTool.CreateView(dragTag, name, point, out topViewTag, out topDrawViewTag);
    }
    else if(name == "LEFT")
    {
        DrawTool.CreateView(dragTag, name, point, out leftViewTag, out leftDrawViewTag);
    }
    else if (name == "TFR-ISO")
    {
        DrawTool.CreateView(dragTag, name, point, out tfrViewTag, out tfrDrawViewTag);
    }
    else
    {
                
    }
}

3、创建视图的同时,遍历view标签下的dim标签,创建尺寸标注

//创建尺寸标注
XmlNodeList cldList = xnitem.ChildNodes;
foreach (XmlNode item in cldList)
{
    XmlElement xeitem = (XmlElement)item;
    string type = xeitem.GetAttribute("type");
    edgeStart = xeitem.GetAttribute("edgeStart");
    edgeEnd = xeitem.GetAttribute("edgeEnd");
    holeFlag = xeitem.GetAttribute("holeFlag");
    dimension_3d_origin_str = xeitem.GetAttribute("dimension_3d_origin");
    dimension_3d_origin = GetOriginFromStr(dimension_3d_origin_str);
    edgeStartTag = Tag.Null;
    edgeEndTag = Tag.Null;
    holeTag = Tag.Null;
    theUFSession.Obj.CycleByName(edgeStart, ref edgeStartTag);
    theUFSession.Obj.CycleByName(edgeEnd, ref edgeEndTag);
    theUFSession.Obj.CycleByName(holeFlag, ref holeTag);

    if (type == "CreateVerticalDim")
    {
        dimTag1 = Tag.Null;
        DrawTool.CreateVerticalDim(leftDrawViewTag, edgeStartTag, edgeEndTag, dimension_3d_origin, out dimTag1);
    }
    else if (type == "CreateParallelDim")
    {
        dimTag2 = Tag.Null;
        DrawTool.CreateParallelDim(leftDrawViewTag, edgeStartTag, edgeEndTag, dimension_3d_origin, out dimTag2);
    }
    else if (type == "CreateDiameterDim")
    {
        dimTag3 = Tag.Null;
        DrawTool.CreateDiameterDim(leftDrawViewTag, holeTag, dimension_3d_origin, out dimTag3);
    }
}

四、总结

        这个版本已初具自动出2D图的雏形,能满足标准件经过配置后出图的基本需求,后面会继续挖掘并分享给大家,如果对源码感兴趣可以给我留言索要。

        同时也欢迎各位大佬提供宝贵意见和建议。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/156940.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

steam/csgo搬砖项目详解

steam搬砖项目简单来说&#xff0c;就是在steam平台购买游戏装备到网易BUFF平台出售&#xff0c;赚取汇率差和装备差价。 我今天也就给大家讲解一下steam项目的原理&#xff0c;还有存在什么样的风险。 做steam搬砖需要什么准备&#xff1a; 1.手机 2.电脑 3.美服steam账号 4.…

【hcip】多点双向重发布实验

目录 1.拓扑图 2.要求 3.主要配置 4.测试 1.拓扑图 2.要求 达到所有目标最优&#xff0c;互有备份 3.主要配置 左边区域配置rip&#xff0c;右边区域配置ospf&#xff0c;以r2为例 [r2]rip [r2-rip-1]version 2 [r2-rip-1]network 12.0.0.0 [r2-rip-1]network 2.0.…

堆排序详细说明及实现-python

先了解什么是堆&#xff1a; 堆的定义 n个元素的序列 [ k1&#xff0c;k2&#xff0c;...&#xff0c;kn ]&#xff0c;满足以下的性质时称之为堆&#xff1a; ki≥k2i 且 ki≥k2i1 (1≤i≤ ) 或 ki≤k2i 且 ki≤k2i1 (1≤i≤ ) 如果采用顺序方式即用一维数组存储这个序列&…

《回眸2022·圆满收官||展望2023·砥砺奋发》

系列文章目录 文章目录系列文章目录寄言和CSDN相遇大学生活从小白到千粉博主回眸2022|圆满收官展望2023|砥砺奋发致每一个追梦人寄言 岁月不距&#xff0c;时节如流&#xff01;站在岁末的门槛前&#xff0c;回望2022这一年&#xff0c;不知你是否已经完美的书写完2022的答卷&…

计算机工作过程(超详细)

文章目录一、计算机组成框图二、思维导图三、部件剖析&#xff08;1&#xff09;存储器&#xff08;2&#xff09;运算器&#xff08;3&#xff09;控制器四、案例剖析&#xff08;重点&#xff09;&#xff08;1&#xff09;a2&#xff08;2&#xff09;a*b&#xff08;3&…

vscode配置Markdown snippet 的快捷键

Snippet 是&#xff1f; 不同文件的模板语法/代码片段&#xff0c;可以设置好后在不同类型文件快速插入&#xff0c;提高效率。 例如&#xff1a;可以在Markdown使用快捷键生成自己想要的模板内容&#xff0c;自定义输入时tab的跳转位置 具体设置 官方文档 生成snippet的在…

Apache Spark 机器学习 数据源 2

数据源 数据源作为机器学习的数据输入&#xff0c;以供给Spark进行机器学习&#xff0c;Spark技术框架除了支持Parquet、CSV、JSON以及JDBC这些常用的数据源&#xff0c;还提供一些特殊数据源的支持&#xff0c;例如&#xff0c;图像或者LIBSVM。 Parquet数据源 该数据源是a…

2023什么蓝牙耳机值得入手?值得入手的半入耳蓝牙耳机推荐

毫无疑问&#xff0c;近年来蓝牙耳机的外出使用频率越来越高&#xff0c;这是由于其外出携带的便捷性以及配置越来越高端、先进&#xff0c;而半入耳式蓝牙耳机又凭借更舒适的佩戴体验以及便携性受到用户的喜爱。但&#xff0c;面对形形色色的蓝牙耳机&#xff0c;不同价位、不…

Shell中的 test 命令

Shell中的 test 命令用于检查某个条件是否成立&#xff0c;它可以进行数值、字符和文件三个方面的测试。数值测试参数说明-eq等于则为真-ne不等于则为真-gt大于则为真-ge大于等于则为真-lt小于则为真-le小于等于则为真实例num1100num2100if test $[num1] -eq $[num2]thenecho 两…

完全背包理论基础

目录 一.理论基础 二.遍历顺序问题 2.1 01背包 2.2完全背包 3.相关题型 3.1零钱兑换 3.1.数组总和IV 一.理论基础 题目描述&#xff1a; 有N件物品和一个最多能背重量为W的背包。第i件物品的重量是weight[i]&#xff0c;得到的价值是value[i] 。每件物品都有无限个&…

重置Entity Framework Core的数据迁移

本文主要参考文章重置EntityFramework数据迁移到洁净状态&#xff0c;感谢哈~。可能是版本问题&#xff0c;文中所述操作跟我稍微有所出入&#xff0c;故在此做下记录。注意&#xff0c;本人的IDE是JetbrainsRider&#xff0c;并非Visual Studio&#xff0c;但主要操作是通用的…

Spring事务源码解析

Spring事务源码解析一、基本概念1、ACID属性2、事务的隔离级别3、事务行为4、Spring事务的传播级别5、Spring事务支持方式二、Spring事务的执行源码1、事务AOP2、事务处理拦截器TransactionInterceptor2.1 主要流程2.2 尝试创建事务2.3 清除线程事务信息2.4 事务提交2.5 事务异…

品牌控价、淘宝控价、拼多多控价,如何有效利用平台投诉

低价链接&#xff0c;是品牌渠道管控最重要的工作&#xff0c;同时&#xff0c;也是最难的&#xff0c;尤其是非授权低价链接&#xff0c;不受经销管理制度约束&#xff0c;极可能屡次沟通仍不配合整改&#xff0c;进行平台投诉&#xff0c;也不被平台支持诉求。 确实&#xf…

高级ACL的基础配置命令

ACL概述 ACL是由一系列permit或deny语句组成的、有序规则的列表。 ACL是一个匹配工具&#xff0c;能够对报文进行匹配和区分。 ACL的组成 CL由若干条permit或deny语句组成。每条语句就是该ACL的一条规则&#xff0c;每条语句中的permit或deny就是与这条规则相对应的处理动作。…

各社区文艺团队疫情首秀演出《金龄会》受邀提供全程服务

疫情放开后&#xff0c;各地活动逐渐恢复&#xff0c;受到广州各社区的中老年文艺团队邀约&#xff0c;广东省金龄会于1月9日在金龄会演播厅举办了疫情后的首秀——“健康广东&#xff0c;抗疫成功&#xff0c;再创辉煌”广东中老年文化艺术大赛&#xff0c;由广东省健康金龄公…

MAC(m1)-CentOS8 Docker安装MySQL

1、查看可用的MySQL版本 访问 MySQL 镜像库地址&#xff1a;Docker 查看老版本&#xff1a; 2、拉取MySQL镜像 我们可以拉取官方的最新版本的镜像&#xff1a; docker pull mysql:latest 我的MAC m1安装的mysql是8&#xff0c;准备在虚拟机上安装5.7 没找到哦&#xff0c;呜…

MySQL高级篇第01章(Linux下MySQL的安装与使用)

CentOS环境的准备 虚拟机的克隆 mac地址 主机名 ip地址 UUID 查看是否安装过MySQL 如果是用rpm安装&#xff0c;检查一下RPM PACKAGE rpm -qa | grep -i mysql # -i 忽略大小写检查mysql service服务&#xff1a; systemctl status mysqld.service如果存在mysql-libs的旧…

Vue2.0开发之——Vue组件-生命周期(37)

一 概述 了解生命周期和生命周期函数的概念初步了解组件创建的过程了解beforeCreate和Created生命周期函数的特点了解beforeMount和mounted生命周期函数组件运行阶段的生命周期函数组件销毁阶段的生命周期函数 二 了解生命周期和生命周期函数的概念 2.1 生命周期&生命周期…

李宏毅ML-机器学习任务功略

文章目录机器学习任务功略机器学习框架训练模型通用指南1. training loss is large2. training loss is small2.1 training loss is small and testing loss is large2.2 training loss is small and testing loss is small3. 偏差与复杂度的平衡机器学习任务功略 机器学习框架…

Yolov5训练自己的数据集

一、从官网下载最新的yolov5代码二、新建VOCData文件夹三、VOCData文件夹结构新建Annotations文件夹&#xff0c;存放标签简单的xml文件&#xff0c;应该长这样复杂的xml文件&#xff0c;应该长这个样子新建images文件夹&#xff0c;存放图片数据注意&#xff1a;需要观察自己的…