pythonOCC将默认单位设置为英寸

时间:2018-05-24 23:09:30

标签: python python-3.x step

请参阅短片编辑

正在寻找pythonOCC文档。

我的.step文件以英寸为单位。以下是.step文件中用于确认的行:

#50 =  ( CONVERSION_BASED_UNIT( 'INCH', #122 )LENGTH_UNIT(  )NAMED_UNIT( #125 ) );
#51 =  ( NAMED_UNIT( #127 )PLANE_ANGLE_UNIT(  )SI_UNIT( $, .RADIAN. ) );
#52 =  ( NAMED_UNIT( #127 )SI_UNIT( $, .STERADIAN. )SOLID_ANGLE_UNIT(  ) );
~~~
#122 = LENGTH_MEASURE_WITH_UNIT( LENGTH_MEASURE( 25.4000000000000 ), #267 );

文件在窗口中读取和显示: Display window

当我使用手动坐标制作边框时,我发现我的盒子很小便:

Tiny Bounding Box!

位置关闭,因为STEP模型不是0,0,0。

原来pythonOCC会自动将所有内容转换为MM。当我在INCHES中手动输入框尺寸时,它将它们读作MM。我试图手动转换所有东西(英寸* 25.4),但这是有问题和丑陋的。

我知道pythonOCC使用STEP文件行#122作为转换率,因为我已将其从上面更改为:

#122 = LENGTH_MEASURE_WITH_UNIT( LENGTH_MEASURE( 1.0 ), #267 );

当我这样做时,我的边界框和步骤模型完美排列......但我仍然知道PythonOCC认为它正在转换为MM。

Perfect!... but in MM

任何人都有改变pythonocc默认单位的经验吗? 我试图在以下的occ包中找到:     OCC.STEPControl,OCC.Display,OCC.AIS 和许多其他人。

编辑:

当我使用我自己的坐标绘制我的盒子时:

minPoint = gp_Pnt(minCoords)
maxPoint = gp_Pnt(maxCoords)
my_box = AIS_Shape(BRepPrimAPI_MakeBox(minPoint, maxPoint).Shape())
display.Context.Display(my_box.GetHandle())

我的坐标是英寸,但是pythonOCC将它们读作MM。如果我可以在英寸中读取自己的坐标,这将得到解决。在OCC中找不到任何内容。显示我的坐标的解释方式。像“OCC.Display。 inputUnitsAre(”INCHES“)”?

编辑2:

仔细看看这里:

https://dev.opencascade.org/doc/refman/html/class_units_a_p_i.html

在UnitsAPI_SystemUnits和SetCurrentUnit下...虽然我不确定如何在python中实现尚未测试。正在努力。

1 个答案:

答案 0 :(得分:1)

您将找到units here

的文档

看看$(document).ready(function() { $("#subjob").live("change", function() { $("#account").val($(this).find("option:selected").attr("value")); }); $('#subjob option[value=subjob1]').attr('selected','selected').change(); 模块,您将看到以下功能:

OCC.Extended.DataExchange

默认情况下,def write_step_file(a_shape, filename, application_protocol="AP203"): """ exports a shape to a STEP file a_shape: the topods_shape to export (a compound, a solid etc.) filename: the filename application protocol: "AP203" or "AP214" """ # a few checks assert not a_shape.IsNull() assert application_protocol in ["AP203", "AP214IS"] if os.path.isfile(filename): print("Warning: %s file already exists and will be replaced" % filename) # creates and initialise the step exporter step_writer = STEPControl_Writer() Interface_Static_SetCVal("write.step.schema", "AP203") # transfer shapes and write file step_writer.Transfer(a_shape, STEPControl_AsIs) status = step_writer.Write(filename) assert status == IFSelect_RetDone assert os.path.isfile(filename) 以毫米为单位写入单位,因此我很好奇使用哪种函数/方法导出OCC文件。

STEP

虽然文档声明此方法Interface_Static_SetCVal("Interface_Static_SetCVal("write.step.unit","MM") ,但必须明确设置此单位是意外的。