Scaling 用OpenCASCADE获取STEP CAD文件的长度比例因子

Scaling 用OpenCASCADE获取STEP CAD文件的长度比例因子,scaling,cad,step,opencascade,Scaling,Cad,Step,Opencascade,在导入STEP格式的CAD文件时,我试图在OpenCASCADE中获取长度单位转换因子。在我的测试文件中,实体#184将长度设置为米,在导入过程中,默认情况下将转换为OpenCASCADE内部使用的毫米 ... #184=( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT($,.METRE.) ); ... 我相信下面的函数应该是这样做的,但无论我尝试什么,“长度单位”步长实体都不匹配,因此我无法获得比例因子 void step_unit_scaling(std::st

在导入STEP格式的CAD文件时,我试图在OpenCASCADE中获取长度单位转换因子。在我的测试文件中,实体#184将长度设置为米,在导入过程中,默认情况下将转换为OpenCASCADE内部使用的毫米

...
#184=(
LENGTH_UNIT()
NAMED_UNIT(*)
SI_UNIT($,.METRE.)
);
...
我相信下面的函数应该是这样做的,但无论我尝试什么,“长度单位”步长实体都不匹配,因此我无法获得比例因子

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;
    }
  }
}
void step\u unit\u scaling(标准::字符串常量和文件名){
步进控制读卡器;
reader.ReadFile(file_name.c_str());
常量句柄(Interface_InterfaceModel)Model=reader.Model();
Handle(StepData\u StepModel)aSM=Handle(StepData\u StepModel)::向下转换(Model);
标准_整数NbEntities=Model->NbEntities();
对于(int i=1;i);
if(enti->IsKind(标准类型(StepBasic长度测量单位))){
手柄(StepBasic_Length MeasurewithUnit)MWU=手柄(StepBasic_Length MeasurewithUnit)::向下投射(enti);
标准实标度mm=MWU->ValueComponent();

std::cout如果搜索给定类型的实体,则应检查类型以查找错误。下一行将显示实际的实体类型

std::cout << "Entity type " << enti->DynamicType()->Name() << std::endl;

如果搜索给定类型的实体,应检查类型以查找错误。下一行将显示实际的实体类型

std::cout << "Entity type " << enti->DynamicType()->Name() << std::endl;

您试图使用STEP文件中的长度单位是为了什么?OCCT STEP translator总是将模型转换为
“xstep.cascade.Unit”
参数指定的单位,这样就不必考虑原始模型是在哪个单位中定义的。
STEPControl_Controller::Init();Interface_Static::SetIVal(“xstep.cascade.Unit”,“M”)是的,我知道这一点,但我需要为我的应用程序手动执行反向缩放,因此需要长度缩放因子。为什么您试图使用STEP文件中的长度单位?OCCT STEP translator始终将模型转换为
“xstep.cascade.Unit”指定的单位
参数,因此它不应该与原始模型的定义单位有关。
STEPControl\u Controller::Init();Interface\u Static::SetIVal(“xstep.cascade.unit”,“M”);
是的,我知道这一点,但我需要为我的应用程序手动执行反向缩放,因此需要长度缩放因子。