aardio 文档

aardio 范例: 闭环示例源码

import com.sldWorks;
import JSON;

// 可通过 loadcodex(此文件,{template=...;outputDir=...;version=2025}) 传入配置。
var config=...;
if(config===null) config={};
assert(type(config)=="table","配置参数必须是表。");
var sw,err=com.sldWorks(false,config.version);
assert(sw,err);

// 这是中文 SOLIDWORKS 2025 的示例位置。其他安装请修改或传入 template。
// 想使用系统配置的默认模板时,可将下面的默认值改为 null。
var template=config.template : "%ProgramData%\SOLIDWORKS\SOLIDWORKS 2025\templates\gb_part.prtdot";
var runName=tostring(time(),"%Y%m%d-%H%M%S") + "-" + time.tick();
var outDir=io.createDir(config.outputDir : io.getSpecial(0x1c,"aardio\sldWorks\demo",runName));
assert(outDir,"不能创建输出目录。");

// 只创建新文档,不使用或覆盖原先的活动模型。
var doc,newError=sw.NewDoc(1,template);
assert(doc,newError);
doc.SetTitle2("AA_Block_" + runName);
var previousErrorDialog=doc.ShowFeatureErrorDialog;
doc.ShowFeatureErrorDialog=false;

// 不硬编码“前视基准面”或“Front Plane”这样的本地化名称。
var plane;
for i,feature in sw.eachFeature(doc){
    if(feature.GetTypeName2()=="RefPlane"){plane=feature;break;}
}
assert(plane,"模板中没有基准面。");
doc.ClearSelection2(true);
assert(plane.Select2(false,0),"基准面选择失败。");
doc.SketchManager.InsertSketch(true);
var segments=doc.SketchManager.CreateCornerRectangle(0,0,0,0.100,0.060,0);
assert(#segments==4,"矩形创建失败。");
doc.SketchManager.InsertSketch(true);

// ISketch 不是 IFeature;从特征链取得新建的草图特征。
var sketch;
for i,feature in sw.eachFeature(doc){
    if(feature.GetTypeName2()=="ProfileFeature") sketch=feature;
}
assert(sketch,"未取得草图特征。");
sketch.Name="AA_Profile";
doc.ClearSelection2(true);
assert(sketch.Select2(false,0),"草图选择失败。");

// 单向、给定深度、无拔模角的拉伸。所有长度均为米,角度为弧度。
var boss=doc.FeatureManager.FeatureExtrusion3(
    true,false,false, // 单向、不翻转轮廓、不反向
    0,0,             // 终止条件:给定深度
    0.020,0,         // 第一方向深度 20 mm
    false,false,false,false,0,0, // 不拔模
    false,false,false,false,    // 不使用参考面偏移
    true,true,true, // 合并、特征范围、自动选择
    0,0,false       // 从草图平面开始
);
assert(boss,"拉伸失败。");
boss.Name="AA_Block";
doc.ClearSelection2(true);
var rebuilt,rebuildError=sw.RebuildDoc(doc);
assert(rebuilt,rebuildError);
var before,beforeError=sw.GetMassProperties(doc);
assert(before,beforeError);
assert(math.abs(before.volume-0.100*0.060*0.020)<1e-10,"初始体积不符合预期。");

doc.ShowNamedView2("",7/*_swIsometricView*/);
doc.ViewZoomtofit2();
var beforeImage,imageError=sw.CaptureView(io.joinpath(outDir,"before.png"),doc,960,720);
assert(beforeImage,imageError);

// 依据读回的尺寸做修改,再由独立几何量验证修改是否真的生效。
var depth=doc.Parameter("D1@AA_Block");
assert(depth,"未找到拉伸深度尺寸。");
assert(math.abs(depth.SystemValue-0.020)<1e-10,"当前深度不是预期的 20 mm。");
depth.SystemValue=0.040;
rebuilt,rebuildError=sw.RebuildDoc(doc);
assert(rebuilt,rebuildError);
var after,afterError=sw.GetMassProperties(doc);
assert(after,afterError);
assert(math.abs(after.volume-0.100*0.060*0.040)<1e-10,"修改后的体积不符合预期。");
var info=sw.GetDocInfo(doc);
assert(info.solidBodyCount==1,"预期只有一个实体。");
var features,truncated=sw.GetFeatures(doc);
assert(features && !truncated,"特征诊断不完整。");
for i,feature in features {
    assert(feature.code==0,"特征报告问题:" + feature.name + " / " + feature.code);
}

doc.ShowFeatureErrorDialog=previousErrorDialog;
// 文件基名也必须唯一,避免再次运行时与仍打开的同名零件发生冲突。
var modelPath=io.joinpath(outDir,"block-" + runName + ".SLDPRT");
var saved,saveError,saveWarning=sw.SaveAs(modelPath,,,,doc);
assert(saved && saveError==0,"保存零件失败,错误码:" + saveError);
var stepPath=io.joinpath(outDir,"block.step");
var exported,exportError,exportWarning=sw.SaveAs(stepPath,,,,doc);
assert(exported && exportError==0,"导出 STEP 失败,错误码:" + exportError);
doc.ShowNamedView2("",7);
doc.ViewZoomtofit2();
var afterImage,afterImageError=sw.CaptureView(io.joinpath(outDir,"after.png"),doc,960,720);
assert(afterImage,afterImageError);

var report={
    app=sw.GetAppInfo();
    modelPath=modelPath;stepPath=stepPath;
    before=before;after=after;
    beforeImage=beforeImage;afterImage=afterImage;
    document=sw.GetDocInfo(doc);
    features=features;featuresTruncated=truncated;
    saveWarning=saveWarning;exportWarning=exportWarning;
};
assert(JSON.save(io.joinpath(outDir,"feedback.json"),report,true),"不能保存反馈 JSON。");
print("模型与反馈已输出到",outDir);
// 保留已保存的模型供查看;自动测试会按路径定位并关闭自己创建的文档。
return report;

Markdown 格式