import com.sldWorks;
import JSON;
var sw,err = com.sldWorks(false);
if(!sw){ print(err); return; }
var info,infoError = sw.GetDocInfo();
if(!info){ print(infoError); return; }
print(JSON.stringify(info,true));
GetDocInfo(doc) 返回普通表,不含 COM 对象:
| 字段 | 含义 |
|---|---|
title,path |
当前标题与文件路径;尚未保存时 path 为空字符串 |
documentType,documentTypeName |
1/part、2/assembly、3/drawing |
modified,readOnly |
未保存修改、只读打开标志 |
configuration,configurations |
零件或装配体的活动配置与全部配置名 |
units |
文档显示单位:length/angle 名称与 lengthFactor/angleFactor(每米、每弧度对应的单位数,例如 mm 为 1000) |
material |
仅零件:name、database、density(kg/m³);未指定材料时名称为空、密度为文档默认值 |
selectionCount |
当前选择数 |
hasActiveSketch |
原生接口是否返回活动草图;工程图的图纸草图也可能为 true |
editingSketch |
仅零件/装配体提供;工程图不以此字段推断 UI 编辑模式 |
solidBodyCount,surfaceBodyCount |
仅零件;包含隐藏实体 |
approximateBounds,boundsUnit |
仅非空零件;[xmin,ymin,zmin,xmax,ymax,zmax],单位 m |
工程图即使没有进入零件式的草图编辑,也可能返回活动图纸草图。因此不要把 hasActiveSketch=true 直接当作“需要退出草图”的命令条件。
它不自动激活或重建文档,不计算质量,也不递归读取装配体/特征树。大模型需要什么再取什么,避免每个动作后都遍历全部几何。
import com.sldWorks;
var sw,err = com.sldWorks(false);
if(!sw){ print(err); return; }
var features,truncated = sw.GetFeatures(,200);
if(!features){ print(truncated); return; } // 失败时第 2 返回值为错误说明
var issues = [];
for i,item in features {
if(item.code) table.push(issues,item);
}
print({issues=issues;truncated=truncated;scanned=#features});
每项包含 index,name,typeName,suppressed,code,isWarning;草图特征(ProfileFeature)另有 constrainedStatus,constrainedStatusName(3/fullyDefined 才是完全定义):
typeName 来自 GetTypeName2(),不依赖界面语言;name 可能被用户修改或本地化。code=0 表示该特征没有报告错误。非零时才检查 isWarning。truncated=true 表示达到数量上限,后面还有特征。默认上限 200,可指定 1..10000。需要原生特征对象时用 eachFeature(doc) 或 FindFeature(doc,name)。不要把 COM 对象放进 JSON 结果;提取实际需要的字段。
import com.sldWorks;
var sw,err = com.sldWorks(false);
if(!sw){ print(err); return; }
var doc,findError = sw.FindDoc();
if(!doc){ print(findError); return; }
// 本段针对 plate-with-hole 示例创建的零件。
print(sw.GetSketchInfo(doc,"AA_Profile")); // constrainedStatusName、segmentCount、contourCount ...
var dimensions,truncated = sw.GetDimensions(doc,"AA_Block");
for i,item in dimensions { print(item.fullName,item.value,item.unit,item.driven); }
var faces = sw.GetFaces(doc);
for i,face in faces {
if(face.isPlane) print(face.index,face.normal,face.area,face.point);
}
GetSketchInfo(doc,feature):草图是否完全定义(fullyDefined)、线段/点/闭合轮廓/区域数量。拉伸前要求至少一个闭合轮廓;欠定义草图仍可拉伸,但设计意图不稳定。GetDimensions(doc,feature,limit):特征及其草图的全部显示尺寸,值为米或弧度;driven=true 的从动尺寸不能驱动几何。省略 feature 时遍历全部顶层特征并按 fullName 去重。SetDimension(doc,"D1@AA_Block",0.03[,configuration[,rebuild]]):写入、重建、读回;状态码 0 以外返回 null,说明,状态码(2 无效值、3 从动尺寸、5 冻结特征)。GetFaces(doc,limit):零件所有实体的面。normal 只对平面给出;point 是面上实际点,直接用于 SelectByPoint(doc,"FACE",...)、NewSketch 目标。index 在特征变更后会改变,不是持久引用。GetMassProperties(doc,accuracy) 返回:
centerOfMass:质心 [x,y,z],米。volume:立方米。surfaceArea:平方米。mass:千克。inertia:质心处 [XX,YY,ZZ,XY,ZX,YZ],kg·m²。units:单位说明;status:原生计算状态。accuracy 可为 0(现有精度)、1(默认)、2(最高)。本库使用兼容接口 GetMassProperties2(...,false),明确计算整个模型,而不是当前选中的组件子集;不会清除选择。此原生接口已被较新的 IMassProperty2 取代,但仍用于提供清晰的整体范围与兼容行为。
只有零件/装配体支持质量属性。空零件、纯曲面模型、未解析模型等情况可能计算失败,会返回 null,说明,原生状态码,不会用 0 冒充有效结果。装配体压缩组件不计入计算。
质量依赖材质/密度及模型设置。 未指定材质时,不能从“质量有数值”推断材料正确;验证普通几何时通常优先检查体积。
| 换算 | 公式 |
|---|---|
| m → mm | × 1000 |
| m² → mm² | × 1000000 |
| m³ → mm³ | × 1000000000 |
| kg → g | × 1000 |
import com.sldWorks;
var sw,err = com.sldWorks(false);
if(!sw){ print(err); return; }
var doc,findError = sw.FindDoc();
if(!doc){ print(findError); return; }
// view 参数:isometric/front/top/... 先切换标准视图再缩放到适合;"fit" 仅缩放;省略则保持当前视角。
var image,imageError = sw.CaptureView("/output/model.png",doc,960,720,"isometric");
if(!image){ print(imageError); return; }
print(image); // path,width,height,title,documentPath,source
CaptureView(path,doc,width,height,view):
path 省略时生成临时 PNG。也支持 BMP、JPG、JPEG。SaveBMP 生成中间 BMP,再用 GDI+ 实际转码,不是只改扩展名。view 时不改变视角/缩放。view 可为 fit、front、back、left、right、top、bottom、isometric、trimetric、dimetric 或 swStandardViews_e 数值 1..9;工程图只执行缩放到适合。不自动重建或保存模型。{path,width,height,title,documentPath,source="model-view"};失败返回 null,说明。io.remove(image.path)。这是模型视图,不是桌面截图,也不包含独立对话框、完整软件界面或文件的旧预览缩略图。不要把图像像素直接视为草图平面上的米制坐标。
不保证最小化、隐藏文档、无交互桌面或异常显卡驱动环境下仍能正确渲染。若图像为空白/黑屏,应检查窗口和图形环境;函数成功仅表示文件生成,不证明视觉内容正确。
结构化检查不应由模糊视觉识别替代。图像和数值互相补充,才能形成可靠的小闭环。