aardio 文档

材料、自定义属性与配置

这些接口读写的是模型的“非几何”数据,但会直接影响质量属性、BOM 与图纸标题栏。它们都返回普通表,可以直接序列化为 JSON。

1. 材料

材料名称随 SOLIDWORKS 安装语言本地化:英文库中的 1060 Alloy 在中文安装里是 1060 合金。不要凭记忆硬编码名称,先从材料库读取:

import com.sldWorks;
var sw,err = com.sldWorks(false);
if(!sw){ print(err); return; }

// 默认解析 "solidworks materials.sldmat";也可传入 sw.GetMaterialDatabases() 中的文件名或完整路径。
var materials,loadError = sw.GetMaterials();
if(!materials){ print(loadError); return; }
for i,item in materials {
    if(string.find(item.name,"^1060")) print(item.classification,item.name,item.density,"kg/m^3");
}

GetMaterials(database) 直接解析 .sldmat(UTF-16 XML),每项含 name,classification,density,database。它不需要打开任何文档。

设置材料后用回读和质量变化验证:

import com.sldWorks;
var sw,err = com.sldWorks(false);
if(!sw){ print(err); return; }
var doc,findError = sw.FindDoc();
if(!doc){ print(findError); return; }

var before = sw.GetMaterial(doc);              // {name,database,density,configuration}
var material,materialError,current = sw.SetMaterial(doc,"1060 合金","solidworks materials.sldmat");
if(!material){ print(materialError,current); return; } // 名称未被应用时返回当前材料信息
var mass = sw.GetMassProperties(doc);
print(before,material,mass.mass,mass.volume*material.density);

2. 自定义属性

import com.sldWorks;
var sw,err = com.sldWorks(false);
if(!sw){ print(err); return; }
var doc,findError = sw.FindDoc();
if(!doc){ print(findError); return; }

// 文档级属性;传配置名则读写配置特定属性。
var written,writeError,code = sw.SetCustomProperty(doc,"Description","AA plate with hole");
if(!written){ print(writeError,code); return; }
sw.SetCustomProperty(doc,"Weight",1.5,"","double");
for i,item in sw.GetCustomProperties(doc) {
    print(item.name,item.typeName,item.value,"=>",item.resolvedValue);
}
sw.DeleteCustomProperty(doc,"Weight");

3. 配置:增删、切换与按配置压缩特征

GetDocInfo(doc) 只给出 configuration(活动配置)与 configurations(配置名)。需要纯数据明细和写操作时用配置助手:

import com.sldWorks;
var sw,err = com.sldWorks(false);
if(!sw){ print(err); return; }
var doc,findError = sw.FindDoc();
if(!doc){ print(findError); return; }

// 明细:index,name,active,comment,description,alternateName,typeName,isDerived,parent,childCount
var configs = sw.GetConfigurations(doc);
var base = configs[1].name;

// 新增配置。默认与 UI 一致:新配置立即成为活动配置;activate=false 保持当前配置。
var heavy,addError = sw.AddConfiguration(doc,"AA_Heavy",{comment="加厚版";activate=false});
if(!heavy){ print(addError); return; }
var derived = sw.AddConfiguration(doc,"AA_Heavy_Painted",{parent="AA_Heavy";activate=false}); // 派生配置

// 只改 AA_Heavy 的一个尺寸(不必先激活),再激活并用质量属性核对
var dims = sw.GetDimensions(doc,"AA_Boss");
var depth; for i,d in dims { if(d.name=="D1") depth = d; }
if(depth) sw.SetDimension(doc,depth.fullName,0.02,"AA_Heavy");
var activated,state = sw.ActivateConfiguration(doc,"AA_Heavy"); // state: activated / alreadyActive
print(state,sw.GetMassProperties(doc).volume);

// 按配置压缩特征:省略配置=当前配置,"*"=全部,或配置名/数组;返回逐配置回读结果
var suppression,suppressError = sw.SetFeatureSuppression(doc,"AA_H1",true,"AA_Heavy");
print(suppression ? suppression.configurations : suppressError);
print(sw.GetFeatureSuppression(doc,"AA_H1").configurations); // 每个配置的 suppressed 状态
sw.SetFeatureSuppression(doc,"AA_H1",false,"*");

// 删除:活动配置、唯一配置、不存在的配置都直接拒绝;删除父配置会连带派生配置
sw.ActivateConfiguration(doc,base);
var deleted,deletedNames = sw.DeleteConfiguration(doc,"AA_Heavy");
print(deleted,deletedNames); // true,["AA_Heavy","AA_Heavy_Painted"]

实测要点(SOLIDWORKS 2025):

尺寸按配置修改见 模型反馈与图像 中的 SetDimension:省略配置参数只改当前配置,"*" 改所有配置,也可以传配置名数组。before/after 在目标配置中回读,作用域含多个配置时为数组。

4. 配置表:系列零件的一次读写

“一个模型、多个配置、每个配置几个不同的尺寸/压缩/属性/材料”是最常见的系列零件做法。逐个调用 AddConfiguration + SetDimension + SetFeatureSuppression + SetCustomProperty + SetMaterial 很啰嗦,配置表助手把它压成一张表:

import com.sldWorks;
var sw,err = com.sldWorks(false);
if(!sw){ print(err); return; }
var doc,findError = sw.FindDoc();
if(!doc){ print(findError); return; }

// 读:每个配置一行;尺寸列名用 "D1@特征名"(不带文档名),列出的 differences 就是各配置之间不同的列
var sheet,sheetError = sw.GetConfigurationTable(doc);
if(!sheet){ print(sheetError); return; }
print(sheet.configurations,sheet.differences);
for i,row in sheet.rows { print(row.name,row.dimensions,row.features,row.properties,row.material.name); }

// 写:不存在的配置自动创建(不激活),四类单元格都是可选的;值一律 SI(米/弧度)
var base = sheet.configurations[1];
var applied,applyError,detail = sw.ApplyConfigurationTable(doc,[
    {name=base;dimensions={["D1@AA_Boss"]=0.01};features={AA_H1=false};properties={PartNo="PL-10"};material="1060 合金"},
    {name="AA_Thick";comment="20 mm";dimensions={["D1@AA_Boss"]=0.02};properties={PartNo="PL-20"};material="1060 合金"},
    {name="AA_Solid";comment="30 mm 无孔";dimensions={["D1@AA_Boss"]=0.03};features={AA_H1=true};properties={PartNo="PL-30"};material="AISI 304"},
]);
if(!applied){ print(applyError); print(detail ? detail.failed); return; }
print(applied.created); // ["AA_Thick","AA_Solid"];applied.verified 是按写过的列回读的配置表

// 每配置质量表:mass=true 会逐个激活配置(每个约 1 秒)并在结束后恢复原活动配置
sheet = sw.GetConfigurationTable(doc,{dimensions="D1@AA_Boss";features="AA_H1";properties="PartNo";mass=true});
for i,row in sheet.rows { print(row.name,row.mass.mass,row.material.density); }

GetConfigurationTable(doc,options) 的列选择:dimensions/features/properties 省略表示全部(尺寸受 dimensionLimit=200 限制,特征自动跳过文件夹、基准面、原点等不可压缩项),false 跳过,或给名字/名字数组;configurations 可指定子集与行顺序;未知名字进入 warnings 而不是报错。

ApplyConfigurationTable(doc,rows,options):全部行先做类型校验(缺 name、重名、非数值尺寸、非布尔压缩)再碰 SOLIDWORKS;createMissing=false 时缺失的配置记为失败行;baseConfiguration 指定新配置从哪个配置复制(新配置总是复制当前活动配置的尺寸/材料/压缩状态,所以助手会先激活它);结束时默认切回原活动配置,activate="配置名" 切到指定配置,activate=false 保持;verify=true(默认)把写过的列回读到 verified。任何行有错误时返回 null,说明,结果,结果.failed 列出行与逐格错误。

实测要点(SOLIDWORKS 2025):

官方接口

返回首页

Markdown 格式