CreateLineがうまく弾けない

初めまして。SW2012 SP5でAPIを作り始めたものです。基本となるCreatelineで32.5度の直線を書こうと思っていますが、プログラムとして走らせると45度の線が引けてしまいます。そこでWait命令でタイミングをずらしたところ、表示ができますが100%ではありません。本来はAddDimension2で角度の設定をすればいいと思いますが自動プロだとなかなかうまくいきません。併せてAdddimension2で2つのライン間の角度を確実に表示する方法はありますでしょうか、以下のプログラムでLINE6、LINE7のBoolはTrueです、APIをやっておられている方にとっては初心者的なことでしょうけど何卒そのお力をお貸しくださるようにお願いします。

 

 

 

Part.ClearSelection2 True
'D6を書く
Dim Sun_Pou, Sun_PouS As Double
Sun_Pou = (D4_m - D3_m) / 2
'D6の寸法

Sun_PouS = (Sun_Pou - D5_m) * Math.Tan(32.5 / 180 * Pi) 'x座標
''''' Sun_PouS = (Sun_Pou - D5_m) * Math.Tan(D6_r) 'x座標

Part.ClearSelection2 True
Dim x_temp, y_temp, z_temp, x1_temp, y1_temp, z1_temp As Double
x_temp = -1 * Haba_A_m
y_temp = D3_m / 2 + D5_m
x1_temp = -1 * Haba_A_m + Sun_PouS
y1_temp = D4_m / 2
Dim waitTime As Variant
waitTime = Now + TimeValue("0:00:010")
Application.Wait waitTime

Set skSegment = Part.SketchManager.CreateLine(x_temp, y_temp, 0#, x1_temp, y1_temp, 0#) 'line6

boolstatus = Part.Extension.SelectByID2("Line6", "SKETCHSEGMENT", -1 * Haba_A_m, D3_m / 2 + D5_m / 2, 0#, False, 0, Nothing, 0) '真ん中
boolstatus = Part.Extension.SelectByID2("Line7", "SKETCHSEGMENT", -1 * Haba_A_m + Sun_PouS, D4_m / 2, 0, False, 0, Nothing, 0) '一番上
' Dim myDisplayDim As Object
Set myDisplayDim = Part.AddDimension2(-1 * Haba_A_m + Sun_PouS / 2, D4_m / 2 + Sun_Pou / 3, 0#) '書く場所
Set mydimension = Part.Parameter("D6@スケッチ2")
Part.ClearSelection2 True

コメント

コメント表示順: リミット: オートロード:
  • 小川昌幸 1362 日前

    西田さん

    ありがとうございます。当方社内プログラマーなので図面は普段書きません。

    今回も辻さんの指摘が無かったらこのコマンドまでたどり着かなかったかもしれません。

    逆に普段図面描かないのでそちらのほうで特化できればと考えています。

    昔は代理店やHELPDESKに見たいのに相談でしたが、フォーラムで解決できるのはMS化しているのではないかと

    思っています。また、ご指摘のSELECTBYID2もなかなか難問です。

    すいません。初心者なのでまた聞くともいます

     

     

  • 辻 直樹 1362 日前

    >画面表示の状態(ズームとか)によって選択されるオブジェクトが変わる

    これは西田さんの大好きな「SelectByID2」の場合ですね。
    確かにズームアウトして縮小表示されている場合は座標で選択するのは困難になりますね。

    なので私はオブジェクトが取得(変数に格納)されているなら、なるべくそのオブジェクトに合った「Select※」メソッドで直接選択するようにしています。

  • 西田将也 1362 日前

    直こう ONで 90 あるいは 45度でとらえてしまうことでしょうか。
    手動で操作してるときと同じ挙動をするので,
    直交だけじゃなくてけっこういろんなところで自動拘束つくと思います,
    プログラム書いてるつもりでいると,同じコードでも表示状態によって挙動が変わるとか思わないので
    ぼくも最初はかなり戸惑った記憶があります。
    同じ座標を選択にいっても,画面表示の状態(ズームとか)によって選択されるオブジェクトが変わるなど

    ”SketchManager"の"AddToDB"プロパティでスナップを回避
    しかしこんな名前ではリファレンス検索して見つけられる気がしないですね・・

  • 小川昌幸 1364 日前

    辻様

    どうやらこれでうまくいったようです。

    大変ありがとうございました。

    こんなこともあるんですね。

     

     

  • 辻 直樹 1364 日前

    下記アドレスがAPIヘルプの”AddToDB”のページになりますが、この中の「Example」に例があります。

    https://help.solidworks.com/2019/english/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.isketchmanager~addtodb.html

    "CreateLine"の前に"SketchMgr.AddtoDB=True"、後でFalseに戻します。

  • 小川昌幸 1364 日前

    辻様

    SWでは何というのかわかりませんが 直こう ONで 90 あるいは 45度でとらえてしまうことでしょうか。

    APIの具体的なサンプロが見つかりませんが、辻様がもしも参考にされているものがあったらお教え願います。

    多分 swModel.SketchManager.AddToDB = True を swModel.SketchManager.AddToDB = Falseでいいとは

    思いますがやってみます

     

     

  • 辻 直樹 1365 日前

    直線の角度がずれてしまうのは、"CreateLine"の時に何かに自動でスナップしてしまうのかも知れません。
    ”SketchManager"の"AddToDB"プロパティでスナップを回避してみてはいかがでしょうか。
    具体的な使い方は、APIヘルプのサンプルを参考にしてください。
    尚、スケッチ要素の作成後に元に戻しておくのを忘れないよう注意してくださいね。