在导入 STEP 格式的 CAD 文件时,我试图在 OpenCASCADE 中获取长度单位转换因子。在我的测试文件中,实体#184将长度设置为米,并且在导入期间默认情况下将转换为OpenCASCADE内部使用的毫米
...
#184=(
LENGTH_UNIT()
NAMED_UNIT(*)
SI_UNIT($,.METRE.)
);
...
我相信下面的函数应该如何完成,但无论我尝试什么,“Length_Unit”STEP实体都不匹配,因此我无法获得缩放因子。
void step_unit_scaling(std::string const &file_name) {
STEPControl_Reader reader;
reader.ReadFile( file_name.c_str() );
const Handle(Interface_InterfaceModel) Model = reader.Model();
Handle(StepData_StepModel) aSM = Handle(StepData_StepModel)::DownCast(Model);
Standard_Integer NbEntities = Model->NbEntities();
for (int i=1; i<=NbEntities; i++) {
Handle(Standard_Transient) enti = aSM->Entity(i);
if (enti->IsKind (STANDARD_TYPE(StepBasic_LengthMeasureWithUnit))) {
Handle(StepBasic_LengthMeasureWithUnit) MWU = Handle(StepBasic_LengthMeasureWithUnit)::DownCast(enti);
Standard_Real scal_mm = MWU->ValueComponent();
std::cout << " --- !!! MATCH !!! --- scal_mm = " << scal_mm << std::endl;
}
}
}
有谁知道这是否是正确的方法,或者是否有更好的方法。