end0tknr's kipple - web写経開発

太宰府天満宮の狛犬って、妙にカワイイ

openpyxl.utils for python による xcelのA1形式座標←→R1C1形式座標の変換

Excel::Writer::XLSX::Utility for perlで excelのA1形式座標←→R1C1形式座標の変換 - end0tknr's kipple - web写経開発

上記entryのようにperlでは Excel::Writer::XLSX::Utility を使用しますが、 pythonの場合、openpyxl.utils.column_index_from_string() や openpyxl.utils.openpyxl.utils.cell.get_column_letter() を使用するようです。

https://openpyxl.readthedocs.io/en/stable/api/openpyxl.utils.cell.html

openpyxl for python の load_workbook()で UserWarning: wmf image format is not supported so the image is being dropped

openpyxl for python で、とある xlsx を load_workbook() したところ、以下のエラー

C:\Users\end0t\python310\lib\site-packages\openpyxl\reader\drawings.py:63:
  UserWarning: wmf image format is not supported so the image is being dropped

wmf は、windows標準のvector画像ですが「not supported」であれば、しょうがいない

perl v.5.38から出力される Locale 'ja_JP.eucJP' is unsupported, and may crash the interpreter.

euc-jpで作成されたコンテンツを扱うサーバのperlをver.5.28→5.38へ更新。

すると、以下の「may crash」のような強め?の警告メッセージが表示。

$ export LANG=ja_JP.eucJP
$ /path/to/bin/perl sample-test.pl
Locale 'ja_JP.eucJP' is unsupported, and may crash the interpreter.

以下のurlによれば、perl 5.38からの仕様変更による表示らしい。

https://perldoc.jp/docs/perl/5.38.0/perl5380delta.pod

次に ver.5.28と ver.5.38 の locale.c を見ると、以下の通りで、 versionにより少々の差はありますが、以前から 「We only handle single-byte locales」らしい。

perl 5.28のlocale.c 抜粋

#  ifdef MB_CUR_MAX

        /* We only handle single-byte locales (outside of UTF-8 ones; so if
         * this locale requires more than one byte, there are going to be
         * problems. */
        DEBUG_Lv(PerlIO_printf(Perl_debug_log,
                 "%s:%d: check_for_problems=%d, MB_CUR_MAX=%d\n",
                 __FILE__, __LINE__, check_for_problems, (int) MB_CUR_MAX));

        if (   check_for_problems && MB_CUR_MAX > 1
            && ! PL_in_utf8_CTYPE_locale

               /* Some platforms return MB_CUR_MAX > 1 for even the "C"
                * locale.  Just assume that the implementation for them (plus
                * for POSIX) is correct and the > 1 value is spurious.  (Since
                * these are specially handled to never be considered UTF-8
                * locales, as long as this is the only problem, everything
                * should work fine */
            && strNE(newctype, "C") && strNE(newctype, "POSIX"))
        {
            multi_byte_locale = TRUE;
        }

#  endif

perl 5.38のlocale.c 抜粋

#    ifdef MB_CUR_MAX
    /* We only handle single-byte locales (outside of UTF-8 ones); so if this
     * locale requires more than one byte, there are going to be BIG problems.
     * */
    if (MB_CUR_MAX > 1 && ! PL_in_utf8_CTYPE_locale
            /* Some platforms return MB_CUR_MAX > 1 for even the "C" locale.
             * Just assume that the implementation for them (plus for POSIX) is
             * correct and the > 1 value is spurious.  (Since these are
             * specially handled to never be considered UTF-8 locales, as long
             * as this is the only problem, everything should work fine */
        && ! isNAME_C_OR_POSIX(newctype))
    {
        DEBUG_L(PerlIO_printf(Perl_debug_log,
                              "Unsupported, MB_CUR_MAX=%d\n", (int) MB_CUR_MAX));
        Perl_ck_warner_d(aTHX_ packWARN(WARN_LOCALE),
                         "Locale '%s' is unsupported, and may crash the"
                         " interpreter.\n",
                         newctype);
    }
#    endif

暫定的に「env LANG=en_US.utf8」を加えて、実行することで、 この警告表示を回避できますが、 eucは随分、マイナーになりつつありますので 根本的には、徐々にでも utf8に移行した方がよさそう。

$ env LANG=en_US.utf8 /path/to/bin/perl sample-test.pl

FreeCADの Compound + boolean演算による一括穴あけ

穴となる円柱をリンクやコピーで複数作成し、 更にCompoundで一体化することで、 boolean減算による複数一括穴あけができるようです。

Compound以外にFuse(Fusion)による一体化でもできる気がしますが、試していません

以下詳細

NGな例 - 穴となる円柱をリンクやコピーで複数作成するのみ

当初、穴となる円柱をリンクで複数作成し、ブーリアン減算を試みましたが、 リンク元の1個の円柱しか選択できず、NG

OKな例 - 更にCompoundで一体化

各穴を複数作成後、更にCompoundで一体化することで、 boolean減算による複数一括穴あけができました。

FreeCAD Part Designで XZ垂直面から押し出す際の向き

FreeCAD Skecher画面で XZ垂直面に四角を描き、 次にPart Design画面のPadで押し出すことで、立体にすると、 手前のマイナスY側に押し出され、直方体が形成されます。

理由は不明ですが「方向/エッジ = カスタム方向」とした上で、 「Y = -1 -> 1」とすると、プラスY側に直方体が形成されるようになります。

FreeCAD Skecherの距離拘束 (Constraint Distance)における +/-

以下の位置関係にある四角スケッチを原点に対し距離拘束を行う場合、 スケッチ側基準の距離となる為、-値(マイナス、負)となるっぽい

一方で、水平距離拘束(Constraint Distance H)や、垂直距離拘束(Constraint Distance V)は、 同様の位置を拘束しても、+値(プラス、正)となるっぽい。

+/-が異なる理由が不明です

FreeCAD TechDrawにおけるオレオレ図枠Templatesの利用

FreeCAD TechDraw の図枠Templatesはsvg形式で独自のものを使用できます。

また、svgヘッダに

xmlns:freecad="http://www.freecad.org/wiki/index.php?title=Svg_Namespace"

を指定した上で

<text id="text191" x="220.4196" y="235.17798" style="line-height:0%;fill:#008000">
  <tspan id="tspan189" style="fill:#008000">〇△×□工業株式会社</tspan>
</text>

のような textフィールドを用意すると、 FreeCAD TechDrawワークベンチにテンプレートを読み込んだ後から、 textフィールド内に文字を入力できます。

詳細は、FreeCADに付属しているテンプレートのsvgを見ると早いと思います

SVGテンプレート例の抜粋

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
   width="419.99966" height="297.146" viewBox="0 0 419.99966 297.146"
   version="1.1" id="svg45"
   sodipodi:docname="my_draw_frame.svg"
   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
   xmlns="http://www.w3.org/2000/svg"
   xmlns:svg="http://www.w3.org/2000/svg"
   xmlns:freecad="http://www.freecad.org/wiki/index.php?title=Svg_Namespace">
   
    <text id="text191" x="220.4196" y="235.17798" style="line-height:0%;fill:#008000">
      <tspan id="tspan189" style="fill:#008000">〇△×□工業株式会社</tspan>
    </text>
  </g>
</svg>

freecad:editable

参考url等

FreeCADのアセンブルワークベンチは、Assembly4 > A2plus ?

FreeCADにおけるアセンブルワークベンチには Assembly4 と A2plus があり、 インターネットで検索すると、どちらをすべきか迷います。

Assembly4 Workbench - FreeCAD Documentation

Assembly4 was inspired by  A2plus and  Assembly3

とありますので、今後 Assembly4 を使用する方が良い気がします

FreeCAD Assembly 4 Tutorial 1 の deepl翻訳

FreeCADのアセンブルワークベンチのdeepl翻訳は今回で一旦、区切り

【目次】

オリジナルのdocument

https://github.com/Zolko-123/FreeCAD_Examples/blob/master/Asm4_Tutorial1/README.md

クイック・スタート・ガイド

このチュートリアルでは、以下のアセンブリの作り方を説明します

軸は PartDesignワークベンチで設計し、軸受はSTEPファイルからインポートします

このチュートリアルはビデオでもご覧いただけます

youtu.be

事前準備

Assembly4の説明を読み、Assembly4がインストール済みであることや、 FreeCADの特にSketcherとPartDesignの基本知識があることが前提です。

STEPファイルbearing_20x37x9.stp をローカルディスクにダウンロードしてください。

ツールバーとメニュー

ツールバーボタンは、関連するオブジェクトの選択によりアクティブになります。 使用したいボタンがアクティブでない場合、マウスで選択を変更してください。

これらの機能は、メニューバーのアセンブリからもアクセスできます:

ドキュメントの作成

空の FreeCAD から始めます。

  1. 新しいドキュメントを3つ作成: ファイル > 新規作成(またはctrl-n)
  2. 1つ目にモデル(又はアセンブリ)を作成:メニュ>Assembly>New Model(又はNew Assembly)
    1. これがアセンブリになり、asm_tuto1.fcstdとしてファイルを保存
  3. 2つ目にPartDesign::Bodyを作成: メニュ > Assembly > New Body
    1. 「Axis」の名称でボディを作成し、この後、軸を設計します
    2. axis.fcstdとしてファイル保存してください
  4. 3つ目にパーツを作成: メニュ > Assembly > New Part
    1. 「Bearing」の名称でパーツ作成し、この後、STEPファイルからインポートします
    2. bearing.fcstdとしてファイル保存してください
  5. 3つのドキュメントをすべて閉じ、再度開きます (FreeCADを閉じる必要はありません)

以上で、Assembly4を使い、これらのドキュメントを使用する準備が完了です

軸ドキュメント

タブをクリックし、軸ドキュメントに切り替えてください。

ボディ

  1. ボディの右クリックから「アクティブボディを切り替え」でPartDesignワークベンチへ切り替え
  2. 新スケッチを作成し。タスクビュ:XY_Planeを選択(スケッチはアクティブボディ内にあります)
  3. 以下のスケッチを描きます
  4. スケッチを一回転させます

ローカル座標系 LCS_1

  1. Assembly4ワークベンチに切り替え、軸ボディを選択
  2. モデルツリーの軸ボディ右クリックからCreate > New Coordinate Systemで座標系(LCS_1)作成
  3. Property View の MapMode を編集。図のように軸の円周と、MapMode=同心を選択
  4. モデルツリーの軸ボディ右クリックから「表示」を選択し、シェイプの色を目立つ色に変更
  5. 保存

以上で、部品軸の組立準備が完了しました

軸受ドキュメント

  1. タブをクリックし、軸受ドキュメントに切り替えてください
  2. 未なら、STEPファイル bearing_20x37x9.stpを axis.fcstd、bearing.fcstd、asm_tuto1.fcstdと同じディレクトリにダウンロード

STEPのインポート

  1. 前述のSTEPファイルbearing_20x37x9.stpをインポートします(File > Import)。 複数のソリッド束は作成されるが、1つの軸受パーツは作成されない場合、手動対処が必要です。 Std Part - FreeCAD Documentation
  2. モデルツリー内でソリッド束を全選択し、ツリー内の軸受パーツにドラッグします。
  3. ソリッド束が本当に移動したかは、モデルツリーの小さな三角形を折りたたむことで確認できます。【注意】うまくいかない場合、必要であれば、bearing.fcstdファイルを削除し、やり直してください。

ローカル座標系

軸受をアセンブリに配置するには、2つの新しいローカル座標系が必要です。 LCS_0は中央にあるように見えますが、STEPのインポートを信用することはできないので、 これは使いません。 代わりに、2つの新しいローカル座標系を作成し、ジオメトリの中心に配置します。

  1. ツリービューでモデルを選択します
  2. 新しいローカル座標系(LCS)を作成し(Assembly > New Coordinate System)、デフォルト名LCS_1のままにして、OKをクリックします
  3. 新しいローカル座標系(LCS)を作成し(Assembly > New Coordinate System)、デフォルト名LCS_2のままにして、OKをクリックします

ローカル座標系の配置

  1. ツリーで LCS_1 を右クリックし「データムの編集」を選択
  2. 下のスクリーンショットのようにエッジを選択
  3. Concentric(同心円状) オプションを選択し、OKをクリック
  4. 同じ手順でLCS_2を配置しますが、下のスクリーンショットのようにベアリングの反対側のエッジを選択します:
  5. 保存してください

以上で、軸受の組立準備が完了しました。

asm_tuto1 ドキュメント

メインウィンドウでタブを選択し、asm_tuto1ドキュメントに切り替えてください。

軸のインサート

  1. メニュ > Assembly > Insert Part を選択するか、 ツールバー をクリック
  2. タスクパネルに以下のダイアログが表示されます
  3. 「axis#Axis」軸を選択
  4. 「Axis」などの名前を入力
  5. OKをクリックすると、部品がアセンブリに挿入されます。
  6. 挿入した部品が選択されたまま をクリックると、部品配置のダイアログが表示 【注意】この操作の間、配置されている部品は透明です
  7. 上のスクリーンショットと同じ選択をします
    1. 左側のパネルで、部品LCSにLCS_0を選択
    2. コンボボックスで、Parent Assemblyを選択
    3. 右側のパネルで、親LCSにLCS_Originを選択 【注意】部品配置ダイアログで無視をクリックした場合、 部品はアセンブリ内に残りますが、配置はされません。 このリンクはFreeCAD内蔵のドラッガー(右クリック>変形)でアセンブリ内で移動できます。
  8. asm_tuto1 内のツリーに新しい軸インスタンスが表示されます。 新しいインスタンスには、以下のプロパティを持つアセンブリ・プロパティ・セクションがあります:
    • AssemblyType : どのアセンブリソルバーを適用するか (ここではAsm4EE)
    • AttachedBy : このインスタンスがリンク先のどの座標系でアセンブリにアタッチされているか。#で区切って記述
    • AttachedTo : インスタンスがどの親に、そしてその親の内部でどの座標系に、#で区切ってアタッチされているか
    • AttachmentOffset : App::Placement プロパティで、リンクされた部品のアタッチメント LCS とアセンブリのターゲット LCS の間にオフセットを適用
  9. OKをクリック

以上で、軸部分が、ツリーを含むasm_tuto1ドキュメントに、すべてのサブオブジェクトとともに表示されます。

軸受1のインサート

  1. メニュ > Assembly > Insert Partから、「bearing#Bearing」を選択
  2. 名前をbearing_1に変更し、OKをクリック
  3. これで 軸受パーツへのリンクが挿入されます。
  4. 挿入した部品を配置ダイアログを表示
    1. 左側のパネルでLCSを選択
    2. ドロップダウンのコンボボックスで、アタッチする部品を選択
    3. 右のパネルで親のLCSを選択し、LCS_0を選択 これで軸受が配置されますが、向きが変です。これは通常のことで、LCSのマッピングの際に向きが異なるためです。

ただ、これは簡単に修正できます。

  1. 軸受が正しい位置になるまで、RotX、RotY、RotZをクリックし、OKをクリック

【注意】軸の色を変えると便利なことが分かると思います

軸受2のインサート

  1. メニュ > Assembly > Insert Partから、「bearing#Bearing」を選択
  2. 名前をbearing_2に変更し、OKをクリック
  3. リンクの配置ダイアログを表示
    1. 左側のパネルで、部品LCSを選択し、LCS_1を選択
    2. コンボボックスで、取付部品を選択し、bearing_1部品を選択
    3. 右側のパネルで「Select LCS in Parent」から「LCS_2」を選択 【注意】LCSの名前が変更された場合、このように表示されます。
  4. 以上で向きが正しくなり、OKをクリック

軸受3のインサート

今回は時間を節約します。

  1. モデルツリーで、以前挿入したbearing_1またはbearing_2を選択し、メニュ > Assembly > Insert Partをクリックし、OKをクリック
  2. リンクの配置ダイアログを表示
    1. 左側のパネルでLCSを選択
    2. コンボボックスで、アタッチする部品を選択
    3. 右側のパネルで Parent LCSに LCS_1を選択
    4. 回転X、回転Y、回転Zボタンで、bearing_3を正しい位置に合わせます

軸受3のオフセット

現実には、これは標準的な3軸受のリードスクリューとなり、 向かい合う2つの軸受はスラストも受けられる ダイアゴナルコンタクトベアリングで、 3つ目の単独軸受は深溝ボールベアリングです。 軸を過剰に拘束しないため、3つ目の軸受が軸フランジに触れてはならず、温度膨張の補正、熱膨張を許容するスペースが必要です。

ここで、インスタンスの AttachmentOffset プロパティが登場します。 挿入されたパーツを方向付けるために使用される回転を 保存するだけでなく、挿入されたパーツのターゲットLCSに対する 相対的な移動を適用することもできます。

  1. モデル・ツリーでインスタンス bearing_3 を選択
  2. AttachmentOffsetプロパティのMapModeを開く
  3. Zフィールドに「2mm」と入力
  4. 適用をクリックし、OKをクリック
  5. 保存
  6. 「はい」をクリック

これで最初のAssembly4は完成です!

確認

...しかし、すべてが計画通りに進んだかどうかをチェックしたいよね?

  1. 3つのドキュメントをすべて閉じる
  2. asm_tuto1.fcstdを再度開く。
  3. 「列挙インデックス-1は範囲外です」の警告は無視してください

  4. モデルツリーで、軸パーツのRevolutionにあるSketchを右クリックし、Edit Sketchを選択

  5. 下の画像のようにスケッチを修正
  6. 「閉じる」をクリック
  7. アセンブリが新しく、軸が長くなり、軸受が追従するようになりました
  8. 軸内側のボディを右クリックすると、アクティブなボディをトグルし、PartDesignで編集できます

アセンブリを修正した際、いくつかのパーツが反応しなかった場合、 そのパーツを右クリックし、コンテキストメニューから Recompute objectを選択してください。

【注意】トップレベルのアセンブリModelでもRecomputeオブジェクトを実行できます。

フィードバック

このチュートリアルは役に立ちましたか? チケットを開くか、このチュートリアルに関連する FreeCADフォーラムの専用スレッドで何か言及してください。 あなたの変更案をPRすることもできます。

Assembly 4 workbench - FreeCAD Forum

Happy Assembling!

FreeCAD Assembly4 workbench documentの deepl翻訳 (2/3)

先程のentryの続き。今度は、github.comにあるdocumentを翻訳

参考url

概要

このアセンブリワークベンチは、1つのアセンブリコンテナに 他のFreeCADオブジェクトをアセンブルし、相対的に配置できます。 アセンブリ内の部品は、アセンブリと同じドキュメントにあることも、 外部ドキュメントにあることもできます。 パーツが元のドキュメントで変更されると、アセンブリでも即座に更新されます。

パーツは、パーツ内のフィーチャをマッチングさせることで相対的に配置されます。 具体的には、Assembly4では、これらのフィーチャはLCS (ローカル座標系、データム座標系)と呼ばれる仮想オブジェクトで、 FreeCADの組み込みPart::AttacherとExpressionEngineを使用して取り付けられます。 部品同士の相対的な配置や拘束にジオメトリを使用しないため、 トポロジカルな命名に関する多くの問題を回避できます。

アセンブリ4 アセンブリはFreeCADの標準App::Partコンテナであるため、 互換性があり、App::Partオブジェクトを扱うすべてのFreeCADツールで操作できます。 特に、別のアセンブリに挿入し、任意レベルでネストされたアセンブリを作成することもできます。 また、ソリッド、データムオブジェクト、スケッチを含むこともできます。 ドキュメントには1つのアセンブリしか含めることができません。

※注意: 現在のセッションで開いているオブジェクトのみ、 アセンブリに新規挿入できます。 以前に挿入されたオブジェクトのドキュメントはバックグラウンドで開かれますので、 手動で開く必要はありません。

※注意:挿入できるのは、ドキュメントのルートにあるPartとBodyコンテナのみです。 コンテナ内にネストされたオブジェクトは、Assembly4で直接使用することはできません。

※注意:リンクされたパートと同じドキュメント内にあり、 App::Partコンテナの外側にあるオブジェクトは挿入されません。

※重要な注意:version 0.11.5には隠れた厄介なバグがあり、 それによって作成されたパーツも破損していました。 残念ながら、これらのパーツを自動的に修正することはできません。 影響を受けるのはv0.11.5で作成されたパーツのみで、v0.11.5で使用されたパーツは影響を受けません。

この問題を回避するには、App::Partコンテナで影響を受けるパートをラップします。 ローカル座標系をコンテナPartにコピーします。

インストール

アドオン マネージャ (推奨)

アセンブリ4はFreeCADアドオンマネージャから入手できます。 (メニュのツール > アドオンマネージャ) アドオンリポジトリではAssembly4です。

重要:アセンブリ4はFreeCAD v0.19以上が必要です。 Assembly4はFreeCAD v0.18以前とは互換性がありません。

手動インストール

FreeCADのローカルワークベンチディレクトリへ手動インストールも可能です。 ユーザ手順書もご覧ください。

https://github.com/Zolko-123/FreeCAD_Assembly4/blob/master/INSTRUCTIONS.md:tite

Getting Started

Assembly4はFreeCADの組み込みのPart::Attacherを多用しています。

Part::Attacherのドキュメントは、次のurlにあります。 https://wiki.freecadweb.org/Part_EditAttachment

ワークベンチを最大限に活用するために、この機能に精通しておくことをお勧めします。

また、

の更なる情報や、ワークベンチの特徴を試す例も

https://github.com/Zolko-123/FreeCAD_Examples

にあります。

オンラインチュートリアルもあります:

ディスカッション

FreeCADフォーラム専用スレッドで、フィードバックを提供したり、 開発者と連絡を取ってください。

https://forum.freecadweb.org/viewtopic.php?f=20&t=34806

アドオン リポジトリ

https://github.com/Zolko-123/FreeCAD_Assembly4

リリースノート

https://github.com/Zolko-123/FreeCAD_Assembly4/blob/master/CHANGELOG.md

ライセンス

LGPLv2.1