当前位置: 首页 > news >正文

济南网站建设山东聚搜网咨询百度搜索大数据

济南网站建设山东聚搜网咨询,百度搜索大数据,自己家的电脑宽带50m做网站服务器,小x导航正品我们在UG装配的过程中,经常会遇到需要调整组件目录位置,在软件设计过程中可以通过在目录树里面拖动组件来完成。 那么,如果要用程序实现组件的移动/拖动,我们要怎么做呢? 本节就完成了添加/拖动/删除组件方法的实现&…

我们在UG装配的过程中,经常会遇到需要调整组件目录位置,在软件设计过程中可以通过在目录树里面拖动组件来完成。

那么,如果要用程序实现组件的移动/拖动,我们要怎么做呢?

本节就完成了添加/拖动/删除组件方法的实现,先看效果图:

根节点test下,有SHCS_01、SHCS_02、SHCS_03、SHCS_04这四个组件。

下面分别给出了添加组件、移动组件和删除组件的方法。

一、添加组件

1、实现方法

/// <summary>
/// 添加组件
/// </summary>
/// <param name="templatePrt">模板路径</param>
/// <param name="basePoint">中心点坐标位置</param>
/// <param name="orientation">矢量方向</param>
/// <param name="expModel">表达式集</param>
public static void AddComponent(string templatePrt, Point3d basePoint, Matrix3x3 orientation, ExpressionModel expModel)
{theUFSession = UFSession.GetUFSession();theSession = Session.GetSession();displayPart = theSession.Parts.Display;workPart = theSession.Parts.Work;componentNameList = new List<string>();BasePart basePart1;PartLoadStatus partLoadStatus1;step1:string fileName = "";string newfile = GetNewFile(templatePrt, out fileName); //先拷贝一个备份try{basePart1 = theSession.Parts.OpenBase(newfile, out partLoadStatus1);}catch (Exception){componentNameList.Add(fileName);goto step1;}partLoadStatus1.Dispose();#region 修正表达式ExpressionCollection expressionCollection = basePart1.Expressions;EventHelper.UpdateExpression(expressionCollection, expModel);#endregion#region 添加属性basePart1.SetAttribute("模具编号", "", Update.Option.Now);basePart1.SetAttribute("材料标准", "", Update.Option.Now);basePart1.SetAttribute("塑胶材料", "", Update.Option.Now);basePart1.SetAttribute("缩水率", "", Update.Option.Now);basePart1.SetAttribute("穴数", "", Update.Option.Now);basePart1.SetAttribute("客户", "", Update.Option.Now);basePart1.SetAttribute("项目编号", "", Update.Option.Now);basePart1.SetAttribute("产品名称", "", Update.Option.Now);basePart1.SetAttribute("产品编号", "", Update.Option.Now);basePart1.SetAttribute("设计", "", Update.Option.Now);#endregionPartLoadStatus partLoadStatus3;NXOpen.Assemblies.Component component1;component1 = workPart.ComponentAssembly.AddComponent(newfile, "model", fileName, basePoint, orientation, -1, out partLoadStatus3, true);
}public static string GetNewFile(string fullFileName, out string fileName)
{fileName = "";string newFullFileName = "";displayPart = theSession.Parts.Display;FileInfo file = new FileInfo(fullFileName);List<Component> allComponents = new List<Component>();List<ComponentModel> componentList = new List<ComponentModel>();Component root = displayPart.ComponentAssembly.RootComponent;if (root != null){GetAllComponents(displayPart.ComponentAssembly.RootComponent, allComponents, componentList);}foreach (ComponentModel model in componentList){if (!componentNameList.Contains(model.instanceName)){componentNameList.Add(model.instanceName.ToLower());}}for (int i = 1; i < 100; i++){newFullFileName = AppDomain.CurrentDomain.BaseDirectory.ToString() + "temp\\" + GetCompantName(fullFileName) + "_0" + i.ToString() + ".prt";fileName = GetCompantName(fullFileName) + "_0" + i.ToString();FileInfo fi = new FileInfo(newFullFileName);if (!fi.Exists){file.CopyTo(newFullFileName);}if (componentNameList.Contains(fileName.ToLower())){continue;}else{break;}}return newFullFileName;
}/// <summary>
/// 修正表达式,自动完全匹配
/// </summary>
/// <param name="expCol"></param>
/// <param name="expModel"></param>
public static void UpdateExpression(ExpressionCollection expCol, ExpressionModel expModel)
{Expression[] expressions = expCol.ToArray();foreach (var ex in expressions){foreach (PropertyInfo pi in expModel.GetType().GetProperties()){double value = 0.0;var name = pi.Name;string strVal = pi.GetValue(expModel, null).ToString();if (!string.IsNullOrEmpty(strVal)){value = double.Parse(strVal);}if (ex.Name == name){ex.Value = value == 0.0 ? ex.Value : value;}}}
}

添加组件,主要使用了workPart.ComponentAssembly.AddComponent方法来实现,需要注意的是:

1、为了实现零件的重复添加,需要在添加组件的方法里做特殊处理,复制多个模板临时文件并实现文件名的递增命名

2、修正表达式是添加组件的一个重要方法,可以通过表达式的修正实现标准件的配置化

3、添加属性,是为了方便组件管理,为后期出图做铺垫 

二、移动/拖动组件

1、实现方法

/// <summary>
/// 移动组件
/// </summary>
/// <param name="origName">待移动组件名</param>
/// <param name="newParentName">父组件名</param>
public static void MoveCompant(string origName, string newParentName)
{Session theSession = Session.GetSession();Part workPart = theSession.Parts.Work;Component origComponent = GetComponentByDisplayName(origName);Component newParentComponent = GetComponentByDisplayName(newParentName);Part part1 = (Part)theSession.Parts.FindObject(newParentComponent.DisplayName);NXOpen.Assemblies.Component[] origComponents1 = new NXOpen.Assemblies.Component[1];NXOpen.Assemblies.Component component1 = origComponent;origComponents1[0] = component1;NXOpen.Assemblies.Component component2 = newParentComponent;NXOpen.Assemblies.Component[] newComponents1;ErrorList errorList1;part1.ComponentAssembly.RestructureComponents(origComponents1, component2, true, out newComponents1, out errorList1);errorList1.Dispose();
}public static Component GetComponentByDisplayName(string displayName)
{List<Component> compList = new List<Component>();List<Body> bodyList = new List<Body>();GetBodyListFromComponet(ref compList, ref bodyList);foreach (Component comp in compList){if (comp.DisplayName == displayName)return comp;}return null;
}/// <summary>
/// 通过ufun获取组件里的部件信息
/// </summary>
public static void GetBodyListFromComponet(ref List<Component> compList, ref List<Body> bodyList)
{theSession = Session.GetSession();theUFSession = UFSession.GetUFSession();workPart = theSession.Parts.Work;compList = new List<Component>();bodyList = new List<Body>();GetComponentList(workPart, compList);ComponentAssembly compAssembly = workPart.ComponentAssembly;Component rootComponent = compAssembly.RootComponent;foreach (Component c in compList){SetWorkPart(c);workPart = theSession.Parts.Work;Tag objTag = Tag.Null;theUFSession.Obj.CycleObjsInPart(workPart.Tag, UFConstants.UF_solid_type, ref objTag);while (objTag != Tag.Null){int type, subtype;theUFSession.Obj.AskTypeAndSubtype(objTag, out type, out subtype);if (type == 70 && subtype == 0){Body b = (Body)NXOpen.Utilities.NXObjectManager.Get(objTag);bodyList.Add(b);}theUFSession.Obj.CycleObjsInPart(workPart.Tag, UFConstants.UF_solid_type, ref objTag);}}SetWorkPart(rootComponent);
}

通过NXopen的方法part1.ComponentAssembly.RestructureComponents来实现组件移动拖动:

想要移动组件,先要弄清楚移动哪个组件到哪个位置,所以移动组件的在于待移动组件和移动到的父组件的识别

由于装配是一个临时的过程,所以在组件处理的时候我们不能像处理部件那样,组件的每次操作都会引起组件tag的变化。

所以这里,我们移动组件的参数用的是:待移动组件名和父组件名。

通过封装方法GetComponentByDisplayName,我们可以识别到需要的组件。

三、删除组件

 1、实现方法

/// <summary>
/// 删除组件
/// </summary>
/// <param name="displayName">待删除组件名称</param>
public static void RemoveComponent(string displayName)
{Session theSession = Session.GetSession();Component component = GetComponentByDisplayName(displayName);NXOpen.Session.UndoMarkId markId2 = theSession.SetUndoMark(NXOpen.Session.MarkVisibility.Visible, "Delete");;NXObject[] objects1 = new NXObject[1];objects1[0] = component;theSession.UpdateManager.AddToDeleteList(objects1);bool notifyOnDelete2 = theSession.Preferences.Modeling.NotifyOnDelete;int nErrs2 = theSession.UpdateManager.DoUpdate(markId2);
}

删除组件比较简单,是通过NXopen的theSession.UpdateManager对象来实现的,具体操作分一下几步:

1、theSession 的初始化:Session theSession = Session.GetSession()

2、添加删除列表:theSession.UpdateManager.AddToDeleteList(objects1)

3、提交删除:theSession.UpdateManager.DoUpdate(markId2)

http://www.hkea.cn/news/639719/

相关文章:

  • 文件管理软件天津搜索引擎优化
  • 九亭网站建设全国疫情高峰时间表最新
  • 青岛网站建设公司武汉seo收费
  • mvc网站建设的实验报告怎么做优化
  • 有官网建手机网站千锋教育培训多少钱费用
  • b2c交易模式的网站有哪些百度营销客户端
  • flash 学习网站重庆网站seo多少钱
  • 年终总结ppt模板免费下载网站小红书seo排名规则
  • 自己架设网站口碑营销的产品有哪些
  • 湖北省网站备案最快几天天津百度推广排名优化
  • app在线开发制作平台seo网络优化前景怎么样
  • 商务网站的基本情况网站建设工作总结
  • 山西建设厅网站网络销售怎么聊客户
  • 软装素材网站有哪些seo网络排名优化哪家好
  • 邯郸市做网站建设网络口碑营销案例分析
  • 罗湖网站建设联系电话西安核心关键词排名
  • 如何编写网站电脑清理软件十大排名
  • 怎么给企业制作网站seo关键词排名优化哪好
  • 高仿服装网站建设西安百度关键词推广
  • 网站单页面怎么做的百度seo站长工具
  • 网站建设谢辞企业营销型网站有哪些
  • 免费网站制作申请行业关键词一览表
  • 网站建设费关键词排名提高方法
  • 搭建淘宝客网站源码最近发生的新闻事件
  • 网站模版网网站关键词排名优化价格
  • 做网站去哪里全国免费发布广告信息平台
  • 靖江做网站湖南seo服务电话
  • 工程建设科学技术奖申报网站友情链接交换标准
  • 做网站后期为什么续费链交换
  • 网站开发与设计专业西安seo顾问培训