Scaling 用OpenCASCADE获取STEP CAD文件的长度比例因子
在导入STEP格式的CAD文件时,我试图在OpenCASCADE中获取长度单位转换因子。在我的测试文件中,实体#184将长度设置为米,在导入过程中,默认情况下将转换为OpenCASCADE内部使用的毫米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
...
#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”);
是的,我知道这一点,但我需要为我的应用程序手动执行反向缩放,因此需要长度缩放因子。