読者です 読者をやめる 読者になる 読者になる

C#ATIA

↑タイトル詐欺 主にCATIA V5 の VBA

PowerMillに同位置の作業平面を作る

加工する際、世の中の方々は加工原点をどうやって決めているんでしょうか? 部品の原点が決まっているようであれば、そこを原点にするのかも知れない のですが、基準まで加工して作る場合は・・・バイスを使用していたら材料の 上側の左奥(か、右奥・・・わかりにくい…

Drawのテキストサイズを変更する

"Drawのテキストサイズを変更したけど反映されない?" のような ご相談を頂きましたが、ちょっと状況がわからないので、 現象を再現できないでいます。クリックしたテキストのサイズを2倍にするだけのテストコードです。 'vba test_DrawTextSize_Double 'using-'KCL0.0.10' 'DrawTe…

2Dコンポーネントを展開する

こちらの続きです。 指定した2D要素を、指定した原点位置でコピペする - C#ATIA 予告していた、2Dコンポーネント(2D構成要素)を展開するマクロです。アクティブなDrawシート全てのビュー内(メイン・背景・ロック・非表示)にある 2Dコンポーネントが対象です。 'vba sample_Comp2DExplode ver…

2D曲線の折れ線化を利用し、重複線の選択2

こちらの続きです。 2D曲線の折れ線化を利用し、重複線の選択1 - C#ATIA 昨日の4分木ライブラリを利用して、前回の重複線を選択した状態にする マクロを改良しました。 'vba test_Select_Overlap_Curve2D ver0.0.2 'using-'KCL0.09' -'KCL_Quadtree0.0.1' '指定ビュー…

流用して、4分木る 3

こちらの続きです。 流用して、4分木る 2 - C#ATIAやっと、2度と見たくない程の汚いコードになってしまいましたが 組み合わせの効率化を促す、線形4分木が出来ました。"KCL_Quadtree.bas" と言う名称の標準モジュールとします。 'KCL' と、先日のDotNET Framework …

ArrayListラッパークラスをお借りしてみる2

VBA

こちらの続きです。 ArrayListラッパークラスをお借りしてみる - C#ATIAイロイロとコメントで教えて頂いたので、こちらの.NETFramework_ArrayListの ラッパークラスに AarrayListをvbaで使いやすいようにラップしてみた : 趣味のプログラムあれこれこちらを反映してみました。 Wr…

指定した2D要素を、指定した原点位置でコピペする

DXF(2D)データを受け取って3Dにモデリングする作業は、ほぼ無いのですが 大まかな形状を作成したい時が偶にあり、行います。DXFをインポートして手っ取り早く、3Dに貼り付けたいのですが困るのが 原点合わせです。 Draw側で原点をあわせて3Dにベタッと貼り付けるか? 3D…

インプロセス実行時、一部をアウトプロセスで実行 2

こちらの続きです。 インプロセス実行時、一部をアウトプロセスで実行 - C#ATIA 呼び出すだけではなく、戻り値も取得できるものか? 確認して いなかったので前回のコードを修正し、テストすることにしました。 'vba using-'KCL0.09' Sub CATMain() '*** VBE準備 *** Dim VbPj…

流用して、4分木る 2

VBA

こちらの続きです。 流用して、4分木る1 - C#ATIA オリジナルのモートン順序の番号とY軸が逆になってしまう部分ですが、 何となくですが、自分なりの考えです。番号を求める際、オリジナルのコードではこんな式で計算した後に、 関数に投げています。 // 座標→線形4分木要…

インプロセス実行時、一部をアウトプロセスで実行

KCLには言語判定の関数 "GetLanguage" 関数を入れているのですが、 最近になって打率が悪いことに気が付きました。 判定できない原因の一つが、マクロ自身をインプロセスで実行した際に ステータスバーの文字を取得する前に、判定しているような気がしています。その為、イン…

流用して、4分木る1

VBA

こちらで遅かった為の改善策を模索中です。 2D曲線の折れ線化を利用し、重複線の選択1 - C#ATIA曲線の折れ線化については、後回しにして4分木に挑戦です。 8分木の計算式変更して、次元を一つ落とせば良いのだろうと 思っているのですが。 'vba test_Quadtre…

2D曲線の折れ線化を利用し、重複線の選択1

こちらの続きです。 2D曲線の折れ線化 - スプライン - C#ATIA 2DCADであれば比較的、重複線削除の機能を持ったものもあると思います。 AutoCADであればこんな機能です。 OVERKILL[重複オブジェクト削除] (コマンド) | AutoCAD | Autodesk Knowledge Network僕が…

2D曲線の折れ線化 - スプライン

こちらの続きです。 2D曲線の折れ線化 - 円弧 - C#ATIA 前回のもののスプライン版です。円弧版同様に、3DからリンクしたものはNGです。 'vba test_Curve2Polyline using-'KCL0.09' '2Dスプラインの折れ線化 Option Explicit '*** 設定 *** Private Const m_PolyTol = 0.…

2D曲線の折れ線化 - 円弧

過去に作った2Dの重複線削除マクロを修正して、再度Upする意欲が 出て来たので、しばらくはこれに取り組みたいと思っています。昔のコードに4分木を適用するのが結構面倒な事になりそうな為、 ほぼ作り直しです。 当時、重複線を判断する際、直線・円弧は何となく…

単独な3D曲線の取得する2

こちらの続きです。 単独な3D曲線の取得する1 - C#ATIA 前回は総当りの非常に効率の悪い物でしたが、線形8分木による スクリーニング処理を利用し単独な3D曲線を検索するように修正しました。まずはCATMainを持つ標準モジュール "FindSingle3DCurve.bas" です。 'vba F…

不覚にも、KCLのご利用をお考えの方へ

非常に個人的に作成している CATVBA用ライブラリ なのですが、サンプルとして 掲載しているマクロを利用する際には必要となる為、今更ながらご説明です。例えばこちらの場合ですが、 単独な3D曲線の取得する1 - C#ATIA サンプルコードのヘッダ部分を確認してください。 (忘れ…

端点一致を探る、組み合わせテスト11

VBA

こちらの続きです。 端点一致を探る、組み合わせテスト10 - C#ATIA 前回の物を実装する為に書き換えました。 'vba 'モートン順序を利用した8分木空間分割の為のクズコード4 Option Explicit Private Const CLINER8TREEMANAGER_MAXLEVEL = 7 '有効空間分割最大レベル P…

端点一致を探る、組み合わせテスト10

VBA

こちらの続きです。 端点一致を探る、組み合わせテスト9 - C#ATIA 昨日の悩みが全て解消するような、良い方法を思い付きました。 時間が無い為、先にコードです。 'vba 'モートン順序を利用した8分木空間分割の為のクズコード3 Option Explicit Private Const CLINER8…

端点一致を探る、組み合わせテスト9

VBA

こちらの続きです。 端点一致を探る、組み合わせテスト8 - C#ATIA 忙しいので進められる状態では無いのですが、考えもまとまらない為 コード無しです。最初は端点同士の比較の為、空間を跨ぐ事は無いなぁ と考えていました。 今回の様に数値を比較する際、イコール…

端点一致を探る、組み合わせテスト8

VBA

こちらの続きです。 端点一致を探る、組み合わせテスト7 - C#ATIA 残されたもう一つのバグがわかりました。 今後の事を考え、オリジナルとは異なる処理をさせていた部分の 渡すべき引数を間違えていました・・・。 "符号なしInt を Long型で代用" とか "右ビットシフト関…

端点一致を探る、組み合わせテスト7

VBA

こちらの続きです。 端点一致を探る、組み合わせテスト6 - C#ATIA 一ヶ所だけバグを発見しました。 こちらのコードですが 端点一致を探る、組み合わせテスト3 - C#ATIAGetPointElem関数内のGet3DMortonNumber関数を利用する際の引数部分の 計算式を CByte((p(0…

端点一致を探る、組み合わせテスト6

VBA

こちらの続きです。 端点一致を探る、組み合わせテスト5 - C#ATIA 説明をきちんと読んでませんでした。>"分割レベルL=2 最小を16番 最大を23番" では >"親空間の2番" なのですが、実行すると "親空間の3番" に・・・。と前回は書いたのですが、" 3 " が戻ってき…

単独な3D曲線の取得する1

こちらの続きです。 端点一致を探る、組み合わせテスト5 - C#ATIA とりあえず、機能するものを先に作りました。 'vba test_FindSingle3DCurve Ver0.0.1 using-'KCL0.08' '単独な3D曲線の取得 Option Explicit '*** 設定 *** Private Const Tolerance = 0.001…

10進数の数値を2進数表記の文字列に変換

VBA

こちらに関係してます。 端点一致を探る、組み合わせテスト5 - C#ATIA段々業務が忙しくなってきたので、思うように取り組めません・・・。どうしても2進数が直ぐにはイメージ出来ない為、確認用の関数を 探してみました。 10進数の値を2進数に変換する(Excei2000以…

端点一致を探る、組み合わせテスト5

VBA

こちらの続きです。 端点一致を探る、組み合わせテスト4 - C#ATIA最初は対象が端点なので、点で考えれば良いと思っていたのですが、 点ではなくボリューム(立方体)として空間分割し、登録しなければ ならない気がしてます。 上手く行かなく苦しんでます。ボリューム…

端点一致を探る、組み合わせテスト3

VBA

こちらの続きです。 端点一致を探る、組み合わせテスト2 - C#ATIA一応、取り組んでますが、全くCATIAとは無関係な状態です。 'vba 'モートン順序を利用した8分木空間分割の為のクズコード Option Explicit Sub CATMain() Dim min: min = Array(-12#, -34#, -56#) '…

3D曲線の端点座標値を取得3

こちらの続きです。 3D曲線の端点座標値を取得2 - C#ATIA 未だにこだわっているのですが、何とかもうちょっと速くしたいので。3D曲線を取得するコードを書くのが面倒だったので、検索で済ませていたのですが 真面目にHybridShapesから探し出すように修正してみ…

3D曲線の端点座標値を取得2

こちらの続きです。 3D曲線の端点座標値を取得 - C#ATIA SPAWorkbenchで端点を取得する方法が、桁違いに速い事はわかったのですが 実際テストしてみると体感的にかなり遅いんです。 その為、形状セットを指定した後の時間を測定するように変更してみました。 'vba …

選択セットを利用し、再選択を高速化

こちらの続きです。 選択セットを利用する - C#ATIA 通勤中に "ひょっとしたら今回使うかも" と思ったので、 選択セットを利用した "再選択の高速化" をテストしてみました。選択セットを作成する際、事前に選択状態にしなければならない為 一度だけでは無意味です。 一…

端点一致を探る、組み合わせテスト1

前回の応用です。 3D曲線の端点座標値を取得 - C#ATIA 3D曲線の端点座標一致を探し出す、組み合わせテストコードを作りました。 予め書いておくと、何も考えずに単純に作っているので全くダメのものです。 少ない量であれば、まぁ大丈夫ですが 数が多いと最悪CATIA…

3D曲線の端点座標値を取得

ご相談頂いた内容を実現する為に、テストコードを作成しました。 3D曲線の端点部分の座標値の取得は、ほぼやったことがありません。2Dの直線であれば、こちらで端点座標を取得しています。 Drawingの直線を移動する2 - C#ATIA 実は、2Dと異なり3Dの場合はプロパティ…

"エリア フィルを修正" コマンドに挑戦

「マクロで "エリア フィルを修正" コマンドを」と御相談を頂いたのですが、難しいです。よくわかっていない物をマクロ化する際に最初に利用するのが、個人的なライブラリ "KCL" のCATMainにしているマクロです。 選択されたものをローカルウィンドウでみて見ると、エリアフィルではなく、Drawing…

二つのボディ/形状セットを比較して、差分を抽出する

前回のマクロでは、2つを比較して色を反映させましたが、同一の面を認識 = 異なる面を認識なので、2つを比較して異なる面を抽出するマクロを作りました。 'vba sample_GetChangeArea_ver0.01 using-'KCL0.08' '2つのボディ/形状セットの異なる面を抽出 Option Explici…

非常に個人的なCATVBA用ライブラリ "KCL" をVer0.07にしました

こちらで公開している非常に個人的なCATVBA用ライブラリ "KCL" を 修正・追加しました。 非常に個人的なCATVBA用ライブラリ - C#ATIA 公開しているサンプルマクロでも特にSelectItem関数を利用しているのですが、 今まではこんな記載方法をしていました。 ・・・ Dim HB As…

サーフェスの色をボディに反映する

昔と異なり最近は、客先から3DCADデータを受け取って作業を行うことが 殆どなのですが、当然全ての客先がCATIAを使っているわけでは無い為、 中間フォーマット(Parasolid,Acis,Step,Iges)で受け取る事が殆どです。 (メーカーさんがCATIAでも、間に数社はいるとCATIAでも…

指定した要素の周囲要素を取得する3

こちらの続きです。 指定した要素の周囲要素を取得する2 - C#ATIA前回は無意味だったので、結局素直に距離を測り判断します。 リフレームオンと検索でHitした要素だけの距離測定のため、全部の要素に 対して行うより短時間で済むはずです。 'vba sample_Get_Outskir…

指定した要素の周囲要素を取得する2

こちらの続きです。指定した要素の周囲要素を取得する1 - C#ATIA "周囲要素を取得する" と書いておきながら、画面に表示されたものを 取得している為、遠くに有るのに "周囲の要素" を判断されている事は 昨日の時点で気が付いていました・・・。これを改善…

指定した要素の周囲要素を取得する1

"指定した要素の周囲の要素を取得したい" とご質問を頂きました。すんなり行う機能がCATIAには無いような気がするので、"リフレーム オン" と "検索" を利用します。 'vba sample_Get_Outskirt_Items using-'KCL' '指定した要素(GSD)の周囲要素を取得 Option Explic…

小さな線や面を非表示にし、リネームする

こちらの続きです。 小さな線や面を削除する - C#ATIA基本的に前回のコードを改造したものです。 'catvba sample_Hide_Rename_SmallShape '指定した形状セット内の微少要素の削除 Private Const SmallLength = 0.01 '微少長さ 単位mm Private Const SmallArea = 0…

小さな線や面を削除する

久々のCatVBAです。 'catvba sample_DeleteSmallShape '指定した形状セット内の微少要素の削除 Private Const SmallLength = 0.01 '微少長さ 単位mm Private Const SmallArea = 0.0000000001 '微少面積 単位m^2 Private SmallShapes As Collection '削除要素 Pr…

CATVBAの標準モジュールをマクロで削除出来たよ。

こちらの続きです。 CATVBAの標準モジュールをマクロで削除したい (希望)2 - C#ATIA 何から何まで教わっていながら、やっていませんでした、スイマセン。 出来上がりましたので、ご報告を。コード等はいつものGrabCADさんにUpしております。 GrabCAD - CAD library マクロの実…

CATVBAの標準モジュールをマクロで削除したい (希望)2

こちらの続きです。 CATVBAの標準モジュールをマクロで削除したい (希望) - C#ATIA imihitoさんから重要なコメントを頂いたので、早速試してみました。 試したコードはこちら 'vba Sub MSAPC_Apc_Test() Dim oApc 'As Apc Set oApc = CreateObject("MSAPC.Apc") Dim oVBE …

指定ボディを子ボディにしつつ、リネーム2

こちらの続き・・・と言うか反省です。 指定ボディを子ボディにしつつ、リネーム - C#ATIA 昨日のコードでは、こう書きました。 'vba type1 Sub CATMain() Dim Msg$: Msg = "Bodyを選択して下さい : ESCキー 終了" Dim SelElem As SelectedElement Do Set SelElem = KC…

指定ボディを子ボディにしつつ、リネーム

明日には出口にたどり着けそう。長かった・・・。少し前に行った作業で、類似した作業を何度もやることになった為 急遽作ったマクロです。 指定したボディをアセンブルで子供にするだけのマクロです。 えぇ大した事無いです。 具体的に示すとこんな事です。 このボディー.…

曲線と戦ってみる11 - 曲線の最小Rを求める

こちらの続きです。 曲線と戦ってみる10 - C#ATIA曲線内の最小Rとなる部分を見つけ出せば、何か糸口が掴めるかな? と思っています。 指定した曲線の最小Rって "式" で取得できる事 知っていましたか?こんな感じです。 "長さ" のパラメータを作成して、画像のよ…

線を選択しつつ、合計長さを表示する

こちらの続きです。 形状セット内の線の長さをExcelシートに出力する - C#ATIA 線を選択し続けながら、合計の長さを表示し、最後にExcelに 出力します。 'vba GetCurvesLength_ToExcel2 Sub CATMain() Dim TotalLen#: TotalLen = 0# '合計の長さ 'Partの取得 Dim D…

曲線と戦ってみる9

こちらの続きです。 曲線と戦ってみる8 - C#ATIA 曲線の長さとチャレンジする円弧の長さの関係を 掴みたい為、こちらのコードを修正しました。 曲線と戦ってみる4 - C#ATIA何処を修正したのか忘れてしまった為、全てコードを 記載しておきます。(KCLは必要です) 'vba…

曲線と戦ってみる8

こちらの続きです。 曲線と戦ってみる7 - C#ATIA 検証用の曲線を作成するのが面倒になってきたので、 ユニークな曲線を作成するだけのマクロを作りました。 'vba Partファイルにランダムな曲線を作成 Option Explicit Private Const CurveCountMin = 5& '曲線最小数 Pri…

曲線と戦ってみる7

こちらの続きです。 曲線と戦ってみる6 - C#ATIA 一本の曲線を近似化するだけなので、あまりスピードには こだわるつもりは無かったのですが、コードが荒れない程度であれば 高速化したいので、テスト用コードを作成。こちらのType1のコードを見ると、y4yamaさんも曲線…

曲線と戦ってみる6

こちらの続きです。 曲線と戦ってみる5 - C#ATIA 最適な数の点を求める方法がわからないのですが、 曲線とチャレンジする円弧のお互いの長さを考えて 見ることにします。チャレンジする円弧に対し、この区間の曲線の状態は 想像するに3タイプが考えられます。 …