一、前言

项目需要自动出2D零件图,可是我之前没做过这方面的内容,没有一点思路。然后我就做了下面几件事:

1、百度、google翻了一遍,搜索关键字“UG二次开发自动出图”

2、csdn.com 和 cnblogs.com翻了一遍

3、平时逛的qq技术群,微信技术群问候了一遍

4、做二开之后结交的技术大牛、小达人请教了一遍

现在有了一点思路,整理出来,自己也写了一部分主要源码分享出来供大家欣赏。

二、思路整理

自动出图方案经过我一番辛苦整理后,需要完成以下几步:

1、出图方案设置

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

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

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

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

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

3、自动标注

三、已完成部分源码分享

1、创建图纸

/// <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、创建视图

/// <summary>
/// 创建基本视图(ufun)
/// </summary>
/// <param name="drawTag"></param>
public static void CreateView(Tag drawTag, string viewName, Point3d point,out Tag viewTag, out Tag drawViewTag)
{Session theSession = Session.GetSession();Part workPart = theSession.Parts.Work;Part displayPart = theSession.Parts.Display;theUFSession = UFSession.GetUFSession();viewTag = Tag.Null;//根据名字获取视图的TagtheUFSession.Obj.CycleByNameAndType(workPart.Tag, viewName, UFConstants.UF_view_type, false, ref viewTag);double[] dwg_point = new double[2] { point.X, point.Y };UFDraw.ViewInfo viewInfo = new UFDraw.ViewInfo();theUFSession.Draw.InitializeViewInfo(out viewInfo);drawViewTag = Tag.Null;//初始化视图信息theUFSession.Draw.ImportView(drawTag, viewTag, dwg_point, ref viewInfo, out drawViewTag);theUFSession.Draw.UpdateOneView(drawTag, drawViewTag);//更新视图
}

这里通过ufun方法创建视图,可以完成根据viewName创建各种视图,包括顶视图、左视图、右视图、后视图、底视图、正三轴视图、右剖视图、底剖视图。

目前这个方法能基本符合需求,难点在于视图的位置point怎么确定下来?

3、创建垂直标注尺寸

//ufun创建垂直尺寸
UFDrf.Object object1 = new UFDrf.Object();
UFDrf.Object object2 = new UFDrf.Object();
object1.object_view_tag = topDrawViewTag;
object1.object_assoc_type = UFDrf.AssocType.EndPoint;
object1.object_assoc_modifier = UFConstants.UF_DRF_last_end_point;
object1.object_tag = edgeStart;
object2.object_view_tag = topDrawViewTag;
object2.object_assoc_type = UFDrf.AssocType.EndPoint;
object2.object_assoc_modifier = UFConstants.UF_DRF_first_end_point;
object2.object_tag = edgeEnd;UFDrf.Text drf_text = new UFDrf.Text();
drf_text.user_dim_text = "";
drf_text.lines_app_text = 0;
drf_text.appended_text = "";
double[] dimension_3d_origin = new double[3] { 50, 200, 0 };
Tag dimTag1 = Tag.Null;
theUFSession.Drf.CreateVerticalDim(ref object1, ref object2, ref drf_text, dimension_3d_origin, out dimTag1);

使用了ufun函数theUFSession.Drf.CreateVerticalDim来创建垂直尺寸,能实现标注的创建,但是问题还有很多:

1、各种视图分别需要哪些标注

2、如何创建需要的标注

3、标准的摆放位置的确定也是一个难点

4、调用主方法

public static int Main(string[] args)
{theSession = Session.GetSession();theUFSession = UFSession.GetUFSession();displayPart = theSession.Parts.Display;workPart = theSession.Parts.Work;theUI = UI.GetUI();int retValue = 0;try{#region 创建标注Body rightBody = null;BodyTool.GetRightBody(theSession, out rightBody);Auto_Init.BodyInit init = new Auto_Init.BodyInit(rightBody);BodyModel model = init.ProcBody();int moduleid;theUFSession.UF.AskApplicationModule(out moduleid);if (moduleid != UFConstants.UF_APP_DRAFTING){theUI.MenuBarManager.ApplicationSwitchRequest("UG_APP_DRAFTING");}//新建图纸Tag topViewTag, leftViewTag, tfrViewTag;Tag topDrawViewTag, leftDrawViewTag, tfrDrawViewTag;Tag dragTag = DrawTool.CreatDWG(workPart, "Sheet1");Point3d point1 = new Point3d(120, 200, 0.0);DrawTool.CreateView(dragTag, "TOP", point1, out topViewTag, out topDrawViewTag);Point3d point2 = new Point3d(120, 80, 0.0);DrawTool.CreateView(dragTag, "LEFT", point2, out leftViewTag, out leftDrawViewTag);Point3d point3 = new Point3d(300, 180, 0.0);DrawTool.CreateView(dragTag, "TFR-ISO", point3, out tfrViewTag, out tfrDrawViewTag);Tag edgeStart = Tag.Null;Tag edgeEnd = Tag.Null;theUFSession.Obj.CycleByName("EDGESTART1", ref edgeStart);theUFSession.Obj.CycleByName("EDGEEND1", ref edgeEnd);//ufun创建垂直尺寸UFDrf.Object object1 = new UFDrf.Object();UFDrf.Object object2 = new UFDrf.Object();object1.object_view_tag = topDrawViewTag;object1.object_assoc_type = UFDrf.AssocType.EndPoint;object1.object_assoc_modifier = UFConstants.UF_DRF_last_end_point;object1.object_tag = edgeStart;object2.object_view_tag = topDrawViewTag;object2.object_assoc_type = UFDrf.AssocType.EndPoint;object2.object_assoc_modifier = UFConstants.UF_DRF_first_end_point;object2.object_tag = edgeEnd;UFDrf.Text drf_text = new UFDrf.Text();drf_text.user_dim_text = "";drf_text.lines_app_text = 0;drf_text.appended_text = "";double[] dimension_3d_origin = new double[3] { 50, 200, 0 };Tag dimTag1 = Tag.Null;theUFSession.Drf.CreateVerticalDim(ref object1, ref object2, ref drf_text, dimension_3d_origin, out dimTag1);#endregion           }catch (NXOpen.NXException ex){}return retValue;
}

四、总结

以上只是一个不完整的思路和实现方案,希望有懂的大佬给一些建议,后续我会继续完善这一块内容并无偿分享给大家。

附一张当前完成度的效果图:

UG/NX 二次开发(C#)自动出2D零件图思路相关推荐

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

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

  2. UG/NX 二次开发(C#) 自动刻字三部曲3-布尔求差

    自动刻字功能是建模过程中必须用到的,但是网上没有找到完整的刻字功能实现,所以我花了一些时间写了一套简易程序,希望能给初学者带来一点帮助 先介绍一下建模环境下刻字功能的实现,分三步走(本节主要介绍布尔求 ...

  3. UG NX二次开发(C#)-装配-删除阵列矩阵

    前言 在外部模式对装配体进行替换或者删除时,有时遇到部分组件不能替换或者删除,其中一个原因是阵列主组件,是不允许更改的.下面介绍下采用UG NX二次开发的方法删除阵列主组件. 错误介绍 在一个装配体模 ...

  4. UG/NX二次开发Siemens官方NXOPEN实例解析—1.6 BlockStyler/SelectionExample

    列文章目录 UG/NX二次开发Siemens官方NXOPEN实例解析-1.1 BlockStyler/ColoredBlock UG/NX二次开发Siemens官方NXOPEN实例解析-1.2 Blo ...

  5. UG\NX二次开发 获取工作部件下所有对象的类型和子类型 UF_OBJ_ask_type_and_subtype

    文章作者:里海 来源网站:https://blog.csdn.net/WangPaiFeiXingYuan 简介: UG\NX二次开发 获取工作部件下所有对象的类型和子类型,使用函数 UF_OBJ_a ...

  6. UG NX二次开发(C#)-装配-添加组件AddComponent

    在UG NX的使用过程中,装配是很重要的一环,本文是为了实现组件的批量装配,采用UG NX二次开发,采用的主要函数为AddComponent. AddComponent()的帮助说明如下: 其是属于N ...

  7. UG\NX二次开发 获取曲线上某个位置的点坐标、切线矢量、主法线矢量、副法线矢量 UF_MODL_ask_curve_props

    文章作者:里海 来源网站:https://blog.csdn.net/WangPaiFeiXingYuan 简介: UG\NX二次开发 获取曲线上某个位置的点坐标.切线矢量.主法线矢量.副法线矢量 U ...

  8. UG\NX二次开发 获取相切面的三种方法

    文章作者:里海 来源网站:https://blog.csdn.net/WangPaiFeiXingYuan 简介: UG\NX二次开发 获取相切面的三种方法 方法1: 使用NX Open C++ 的面 ...

  9. UG/NX二次开发 选择坐标系控件 uc1630

    文章作者:里海 来源网站:https://blog.csdn.net/WangPaiFeiXingYuan 简介: UG/NX二次开发 uc1630 选择坐标系控件.第二个参数可以按照下图使用: 效果 ...

最新文章

  1. 微软家浏览器挺有意思,大家体会一下
  2. Android inline hook手记
  3. 安卓获取手机网络强度_USB调试和USB网络共享,安卓有线投屏究竟选哪个?
  4. oracle 德部分操作笔记(自己用的)
  5. 20191015:基数排序法
  6. 解决android自定义标题充满的问题
  7. 如何用命令行运行python程序_如何使用运行python代码命令行.exe从C应用程序?
  8. Java报错 -- The public type c must be defined in its own file
  9. 这个“达芬奇”不一般!它是美国医生的好帮手
  10. Linux打印全部的内容,linux提取指定列字符并打印所有内容(awk)
  11. DoTween动画系统
  12. 计算机cpu天体图,cpu性能天梯排行图 最新的2021年电脑cpu天梯图5月高清图
  13. python文献检索工具与技巧答案_文献检索(答案)
  14. 温哥华岛大学计算机科学,温哥华有哪些知名大学排名(温哥华地区大学排名一览)...
  15. 网络攻防“三剑客”正式加盟墨者安全 担任首席安全顾问
  16. Android仿淘宝详情页面viewPager滑动到最后一张图片跳转的功能
  17. 微信小程序对接快递鸟接口返回格式有误的解决
  18. Spring入门自学
  19. Jasper 中文字体
  20. 怎样才能让孩子愿意和家长合作

热门文章

  1. 微信网页audio标签无法正常播放音频
  2. android手机采集,Android手机直播之采集技术分析
  3. 南桥芯片和北桥芯片都有什么作用
  4. iOS扫一扫功能开发
  5. 骁龙8gen1性能怎么样 骁龙8gen1和苹果A15 哪个强
  6. sdcard/DCIM/.thumbnails文件夹里的庞然大物 是这样来的
  7. python 库的安装(cmd+pip)
  8. linux中ls命令查看文件大小与时间
  9. 计算机连接电视显示超范围,HDMI连接后电脑操作界面的边框超出电视屏幕,怎么解决...
  10. 解决别人在收到我们发送的*.md文档时,图片无法显示的问题。