SolidWorks API Community

Unofficial User Site

トピック: transformについて

transformについて 8 年 4 週間 前 #57

  • PON
  • PON さんのアバター
  • オフライン
  • フレッシュボーダー
  • 投稿数: 2
  • カルマ: 0
はじめまして :lol:
とはいっても カタマリのほうで 散々お世話になっている hiroponです
こちらに投稿してみました

transformについて わからないところがありご質問させていただきます
やりたいことは 明確で

Assembly中で 選択した部品を 新しいAssembly に配置関係(座標)そのまま(合致は崩れてOK)で
配置させたいというものです。
きっちりと配置(XYZだけでなく回転情報も)させたいとなると Assmbly::AddComponents3 Method
で transforms の引数を定義してやったほうがいいのかなと思い それを使用しています
transformのデータは Compontnt::Transformプロパティを使用してゲットしています。 

問題がありまして、サブアッセンブリの中の部品を選択すると 全く違う位置に配置されます。
サブアッセンブリと ルートアッセンブリで 座標変換が必要なのかな?と思っているのですが、

1.APIヘルプを読むと ルートアッセンブリのtransformデータを返す という文言があります
 ということは 座標変換は必要ないということでしょうか?

2.座標変換が必要かと思い
 dim cmpTransformData as MathTransform
dim subassyTransformData as MathTransform
dim subassycomp as component2
dim finalTransformData as MathTransform

cmpTransform = cmp.transform
subassycomp = cmp.parent  ’SUBAssyのコンポーネント取得
subassyTransform=subassycomp .transform ’SUBAssyのTransformDataを取得
finalTransformData =subassyTransform.multiply(cmpTransform)   '座標変換?

として 最終のtransformDataを生成した(つもり)のですが、このtransformデータを
 用いても 思っている場所に配置されませんでした

色々調べたのですが 途方に暮れている状態でして ご教授いただけると幸いです

よろしくお願いいたします。
ゲストの書き込みは許可されていません。

transformについて 8 年 3 週間 前 #58

  • hisa
  • hisa さんのアバター
  • オフライン
  • 管理者
  • 投稿数: 12
  • 感謝を受け取りました 7
  • カルマ: 0
PONさん、(こちらでは)はじめまして :)

たまにしかここを見ていなかったため、回答が遅くなりました・・・

試しに下記の簡単なマクロで確認してみましたが、PONさんが書かれている通り
ComponentのTransformはルートアセンブリから見たTransformとなる様です。

Option Explicit

Sub main()

    Dim swApp As SldWorks.SldWorks
    Dim swModel1 As SldWorks.ModelDoc2
    Dim swModel2 As SldWorks.ModelDoc2
    Dim swSelMgr As SldWorks.SelectionMgr
    Dim swAssy As SldWorks.AssemblyDoc
    Dim swComp1 As SldWorks.Component2
    Dim swComp2 As SldWorks.Component2
    Dim swXform As SldWorks.MathTransform
    
    Set swApp = Application.SldWorks
    
    Set swModel1 = swApp.ActiveDoc
    Set swSelMgr = swModel1.SelectionManager
    
    Set swComp1 = swSelMgr.GetSelectedObject5(1)
    Set swXform = swComp1.Transform2
    
    Set swModel2 = swApp.NewDocument("C:\ProgramData\SolidWorks\SolidWorks 2014\templates\アセンブリ.asmdot", 0, 0, 0)
    Set swAssy = swModel2
    Set swComp2 = swAssy.AddComponent4(swComp1.GetModelDoc2.GetPathName, "", 0#, 0#, 0#)
    swComp2.Transform = swXform

End Sub

ですので、単純に元のアセンブリ側で取得したTransformを新規アセンブリ側に挿入した構成部品のTransformにセットしてあげれば良いと思います ;)
最初新規アセンブリのビューの向きが選択元のアセンブリと違ったので「おや?」と思いましたが :P
最終編集: 8 年 3 週間 前 : hisa.
ゲストの書き込みは許可されていません。
次のユーザが感謝しました: PON

transformについて 8 年 3 週間 前 #59

  • PON
  • PON さんのアバター
  • オフライン
  • フレッシュボーダー
  • 投稿数: 2
  • カルマ: 0
hisaさん、ありがとうございます

万事うまくいきました

ただ、ズレが生じる場合がありました。
また 後日投稿します :evil:
ゲストの書き込みは許可されていません。
ページ作成時間: 0.055 秒