bugfix> python > 投稿

ショートバージョンの編集をご覧ください

このために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 );

ファイルの読み取りとウィンドウでの表示:

手動の座標を使用してバウンディングボックスを作成すると、ボックスが無効になっていることがわかります。

STEPモデルは0,0,0ではないため、位置はオフです。

pythonOCCはすべてを自動的にMMに変換します。 INCHESでボックスの寸法を手動で入力すると、MMとして読み込まれます。私もすべてを手動で変換することで対処しようとしました(インチ* 25.4)が、これは問題がありugいです。

pythonOCCは、上記から変更したように、STEPファイルの行番号122を変換率として使用することを知っています。

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

すると、境界ボックスとステップモデルが完全に揃います...しかし、PythonOCCが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.Displayで、座標の解釈方法について何も見つかりません。 「OCC.Display。inputUnitsAre( "INCHES")「?

編集2:

ここを詳しく見る:

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

UnitsAPI_SystemUnitsおよびSetCurrentUnit ...の下で、まだテストするためにpythonで実装する方法がわかりませんが。それに取り組んでいます。

回答 1 件
  • units here のドキュメントがあります

    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")
    
    

    しかし、ドキュメントはこのメソッドが Defines a unit in which the STEP file should be written. If set to unit other than MM, the model is converted to these units during the translation. であることを述べています 、そのため、この単位を明示的に設定する必要はありません。

あなたの答え