SOLIDWORDS API修改零部件属性全部保存

通过SW提供的API接口,修改零部件属性,保存ALL修改,出现的问题

1、遍历装配体零部件修改零部件属性(ICustomPropertyManager.Add3)

// True仅获取特性管理器设计树的顶层组件,false用于在特性管理器设计树中获得顶层和子组件
vComponents = swAssy.GetComponents(false);
foreach (object SingleComponent in vComponents)
{
    swComponent = (Component2)SingleComponent;

    // 获取零部件的自定义属性
    swCompModel = swComponent.GetModelDoc2();
    if (swCompModel == null)
    {
        continue;
    }
	  if (swCompModel.GetType() == (int)swDocumentTypes_e.swDocPART)
	  {
			X = 0; Y = 0; Z = 0;
			GetXYZ(swCompModel, out X, out Y, out Z);
			swCustPropMgr = swCompModel.Extension.CustomPropertyManager[""];
			// 零部件新增长(Length:X)宽(Width:Y)高(Height:Z)属性值
			swCustPropMgr.Add3("Length", (int)swCustomInfoType_e.swCustomInfoDouble, X.ToString(),
			   (int)swCustomPropertyAddOption_e.swCustomPropertyDeleteAndAdd);
			swCustPropMgr.Add3("Width", (int)swCustomInfoType_e.swCustomInfoDouble, Y.ToString(),
			   (int)swCustomPropertyAddOption_e.swCustomPropertyDeleteAndAdd);
			swCustPropMgr.Add3("Height", (int)swCustomInfoType_e.swCustomInfoDouble, Z.ToString(),
			   (int)swCustomPropertyAddOption_e.swCustomPropertyDeleteAndAdd);
		}
		else if (swCompModel.GetType() == (int)swDocumentTypes_e.swDocASSEMBLY)
		{
			X = 0; Y = 0; Z = 0;
			GetXYZ(swComponent, out X, out Y, out Z);
			swCustPropMgr = swCompModel.Extension.CustomPropertyManager[""];
			// 装配体新增长(Length:X)宽(Wide:Y)高(High:Z)属性值
			swCustPropMgr.Add3("Length", (int)swCustomInfoType_e.swCustomInfoDouble, X.ToString(),
			   (int)swCustomPropertyAddOption_e.swCustomPropertyDeleteAndAdd);
			swCustPropMgr.Add3("Width", (int)swCustomInfoType_e.swCustomInfoDouble, Y.ToString(),
			   (int)swCustomPropertyAddOption_e.swCustomPropertyDeleteAndAdd);
			swCustPropMgr.Add3("Height", (int)swCustomInfoType_e.swCustomInfoDouble, Z.ToString(),
			   (int)swCustomPropertyAddOption_e.swCustomPropertyDeleteAndAdd);
	}
}

如上代码,修改零部件属性过程中,出现有些零部件可以修改属性,有些零部件不能修改属性,到底是什么原因导致的呢?
原因就是有些子装配体是轻化的,我们在遍历装配体写入属性的时候,需要先将轻化文件 设定轻化到还原

设定轻化到还原 就要调用的SW API是ResolveAllLightWeightComponents

// 获取当前活动的文档
swModel = (ModelDoc2)iSwApp.ActiveDoc;
swAssy = (AssemblyDoc)swModel;
// 写入属性之前,将装配体设定轻化到还原
swAssy.ResolveAllLightWeightComponents(true);

2、修改属性后,怎么通过SW API 保存所有修改
通过调用IModelDoc2.Save3,代码如下:

System.bool Save3( 
   System.int Options,
   out System.int Errors,
   out System.int Warnings
)

怎么保存,需要了解Options参数swSaveAsOptions_e
这里写图片描述
保存全部,我们需要选择swSaveAsOptions_e.swSaveAsOptions_SaveReferenced

// 保存所有修改的属性值
int iErrors = 0, iWarnings = 0;
swModel.Save3((int)swSaveAsOptions_e.swSaveAsOptions_SaveReferenced, ref iErrors, ref iWarnings);

大家都以为这样就可以保存所有修改的属性了吗,我当时也是这么认为的,结果- _ -,当我们对同一装配体进行多次修改,多次调用Save3保存全部时,发现只有第一调用Save3才会全部保存,之后调用Save3时,只会保存总装配体属性,子装配体和零部件属性保存,到底是什么原因导致的,我还没有找到原因,忘读者找到了通知一下我,但找到了一个解决的方法。每次修改一个零部件的时候调用SetSaveFlag标记该文档需要保存,再次调用Save3的时候就会保存该文档;

// 标记该文档需要保存
swModel.SetSaveFlag();
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值