SolidWorks專門論壇 SolidWorks forum

 找回密碼
 註冊
查看: 1780|回復: 10

如何利用API協助輸入草圖

[複製鏈接]
發表於 2023/5/12 15:36:52 | 顯示全部樓層 |閱讀模式
各位大大好
小弟我最近在研究如何利用EXCEL或是TXT檔案,事先輸入座標與矩形的長寬, 導入solidworks畫成2D草圖
礙於小弟的程式能力不太好, 只能求助OpenAi與各位大大
以下是AI提供的Python語言
===============================================================
import win32com.client as win32

# 設置SolidWorks程序的啟動參數
swApp = win32.Dispatch('SldWorks.Application')
swApp.Visible = True
swApp.UserControl = True

# 創建新文件
swModel = swApp.NewDocument('Part', 0, 0, 0)

# 創建草圖
swModel.Extension.SelectByID2('', 'PLANEXY', 0, 0, 0, False, 0, None, 0)
swModel.SketchManager.InsertSketch(True)

# 讀取TXT文件中的數據
with open('data.txt', 'r') as f:
    data = f.readlines()

# 創建矩形
for line in data:
    x, y, w, h = line.strip().split(',')
    swModel.SketchManager.CreateCenterRectangle(float(x), float(y), 0, float(w) / 2, float(h) / 2, 0)

# 完成草圖
swModel.ClearSelection2(True)
swModel.SketchManager.InsertSketch(True)

# 保存文件為SWP檔案
swModel.SaveAs3('drawing.swp', 0, True, True)

================================================================
另外AI有提醒請確保已經安裝了SolidWorks和Python環境,以及SolidWorks API的Python庫
我想請問SolidWorks API的Python庫是要另外購買的嗎?
有沒有其他方法可以完成匯入矩形草圖,爬文只有找到輸入XYZ點的三維座標,但SWP檔似乎也有Bug
先謝過各位大大



發表於 2023/5/12 18:20:25 | 顯示全部樓層
excel vba應該可以直接連solidworks 研究看看吧
 樓主| 發表於 2023/5/16 09:59:34 | 顯示全部樓層
目前我是試著讀取TXT檔

TXT檔案裏面就單純的4個數字 中間用空格分開

EX: -5.0522 7.4101 0.01 0.01

程式碼如下


Dim swApp As Object
Public Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr)

Sub main()
    Dim Part As Object
    Set swApp = Application.SldWorks
    Set Part = swApp.ActiveDoc
   
    Dim myModelView As Object
    Set myModelView = Part.ActiveView
    myModelView.FrameState = swWindowState_e.swWindowMaximized
   
    Part.SketchManager.Insert3DSketch True
   
    '開啟座標點檔案路徑
    Open "C:\Users\Alex.liu\Desktop\probehead\1234.txt" For Input As #1
   
    Dim X As Double, Y As Double, W As Double, L As Double
   
     Do While Not EOF(1)
    '判斷是否已經到達檔案結尾
    If Not EOF(1) Then
        Input #1, X, Y, W, L
        ' 繪製矩形
        Part.SketchManager.CreateCenterRectangle X, Y, 0, W, L, 0
        Sleep (10)
    Else
        MsgBox "輸入已超過檔案結尾"
    End If
Loop
   
    ' 關閉編號 #1 檔案
    Close #1
   
    Part.ClearSelection2 True
    Part.SketchManager.Insert3DSketch True
End Sub

現在遇到兩個問題
1. 我不論如何更改後面兩個數字(矩形長跟寬)
    畫出來的矩形都一樣大
2. 中心點位置現在是TXT檔案的1000倍
    我有試著將X/1000,Y/1000 但出來的中心點位置全部疊在正中心
    如果是X/100,Y/100 卻又是TXT檔的10倍

另外我有發現我改X/100,Y/100的時候會影響到矩形的邊長

請問有大大能幫我解惑嗎 謝謝
發表於 2023/5/16 16:12:29 | 顯示全部樓層
1. SW默认开启了自动捕捉(方便手动绘制草图),各个坐标点会被捕捉到某个附近的位置,如果坐标变化不是很大时,估计会被捕捉到相同的位置。
   解答:用代码绘制草图的话,先执行 Part.SketchManager.AddToDB=True,这样就可以直接将坐标提交给SW,不受捕捉的影响。
            在绘制草图的代码完成后,再执行 Part.SketchManager.AddToDB=False,就不影响后续手动绘图。
2. SW API里面使用的长度单位是米(m),不是毫米(mm)。
 樓主| 發表於 2023/5/16 17:53:15 | 顯示全部樓層
聽了xiaocake大大的建議後

Part.SketchManager.AddToDB=True 放置在 Part.SketchManager.Insert3DSketch True 之前
Part.SketchManager.AddToDB = False 放置在 Close #1 之後

畫出的矩形邊長數字比較不會是奇怪的數字

TXT檔案內容如下
-1 1 0.05 0.05
-2 2 0.02 0.02
-3 3 0.05 0.05






畫出來的矩形不論我KEY0.05或0.01 都是這幾個數字不會變動
但我將-3 3 0.05 0.05 改成 -4 4 0.05 0.05 的時候 6000會變8000
另外單位的部分 若我將TXT檔的數字改成以下
-0.001 0.001 0.0005 0.0005
-0.002 0.002 0.0005 0.0005
-0.004 0.004 0.0005 0.0005



會變以上圖形,雖然中心位置是對了 但邊長還是不對
我現在懷疑是不是 Part.SketchManager.CreateCenterRectangle X, Y, 0, W, L, 0
這W和L 不是指邊長,只要我一改這數字有可能就會畫不出矩形
而且我改中心位置也會影響W,L
還請熟知API的大大幫個小忙 謝謝

本帖子中包含更多資源

您需要 登錄 才可以下載或查看,沒有賬號?註冊

x

點評

樓上的前輩已解答, Part.SketchManager.CreateCenterRectangle X, Y, 0, W, L, 0 ← 此代號容易誤導,應該是 Part.SketchManager.CreateCenterRectangle X1, Y1, Z1, X2, Y2, Z2 此方法中給的六個參數,前3個為矩  詳情 回復 發表於 2023/5/17 10:35
發表於 2023/5/16 19:02:11 | 顯示全部樓層
以矩型的畫法想 起點的座標 終點座標的思緒應該就有解了.
發表於 2023/5/17 10:35:10 | 顯示全部樓層
bumpking 發表於 2023/5/16 17:53
聽了xiaocake大大的建議後

將Part.SketchManager.AddToDB=True 放置在 Part.SketchManager.Insert3DSketch ...

樓上的前輩已解答,

Part.SketchManager.CreateCenterRectangle X, Y, 0, W, L, 0 ← 此代號容易誤導,應該是 Part.SketchManager.CreateCenterRectangle X1, Y1, Z1, X2, Y2, Z2

此方法中給的六個參數,前3個為矩形中心點的x, y, z座標,後3個為矩形角落的x, y, z座標 (看你要讓終點位置在哪)。

以你的設定為例,(-3, 3, 0, 0.05, 0.05, 0) ,中心點位置為座標 (-3000mm, 3000mm, 0mm) ,終點位置為座標 (50mm, 50mm, 0mm),

因為畫面為了呈現3000mm的尺度,所以50mm看起來好像有在原點,實際Zoom in到原點看,矩形的角落應該不會落在原點上。

發表於 2023/5/17 10:57:05 來自手機 | 顯示全部樓層
樓上說的沒錯 補充一點  你的數值除以1000畫不出的問題 給你個方向 當畫1000*1000矩型時 裡面有1*1的矩型  遠看是不是像一個點
 樓主| 發表於 2023/5/17 13:42:47 | 顯示全部樓層
感謝大家熱心的幫忙
最後修正程式如下
====================================================
Dim swApp As Object
Public Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr)

Sub main()
    Dim Part As Object
    Set swApp = Application.SldWorks
    Set Part = swApp.ActiveDoc

    Dim myModelView As Object
    Set myModelView = Part.ActiveView
    myModelView.FrameState = swWindowState_e.swWindowMaximized

    Part.SketchManager.AddToDB = True

    Part.SketchManager.Insert3DSketch True

    '開啟座標點檔案路徑
    Open "C:\Users\Alex.liu\Desktop\xxxxx\12345.txt" For Input As #1

    Dim X As Double, Y As Double, W As Double, L As Double

    Do While Not EOF(1)
        '判斷是否已經到達檔案結尾
        If Not EOF(1) Then
            Input #1, X, Y, W, L

            ' 繪製矩形
            Part.SketchManager.CreateCornerRectangle X / 1000, Y / 1000, 0, W / 1000, L / 1000, 0
            Sleep (10)
        Else
            MsgBox "輸入已超過檔案結尾"
        End If
    Loop

    ' 關閉編號 #1 檔案
    Close #1

    Part.SketchManager.AddToDB = False

    Part.ClearSelection2 True
    Part.SketchManager.Insert3DSketch True
End Sub
===================================================

在TXT分別輸入起點座標(X,Y) 與終點座標 (W, L)
EX:
-7.0001        -7.4366        -6.9386        -7.5001
-6.9201        -7.4366        -6.8586        -7.5001
-6.8401        -7.4366        -6.7786        -7.5001
-6.7601        -7.4366        -6.6986        -7.5001

可以多個畫出矩形草圖, 有需要的人可以參考看看
我在程式碼裡面有除以1000,所以輸入的值就是以mm為單位

最後有一個小小的問題,有時候執行畫出來會黏在一起 導致長寬不對
但是多試個兩次之後 大概率就正常了,不知道是什麼原因就是了
發表於 2023/5/17 17:13:34 | 顯示全部樓層

=========================================
最後有一個小小的問題,有時候執行畫出來會黏在一起 導致長寬不對
但是多試個兩次之後 大概率就正常了,不知道是什麼原因就是了
=========================================

這部分有沒有圖片示意?看文字不太理解
 樓主| 發表於 2023/5/18 09:12:43 | 顯示全部樓層
我常發生的狀況是
1.有5組數據 ,結果只畫出4個
2.我的矩形應該邊長有3mm,而且中間有間隔,但是畫出來全部黏在一起,邊長也超過3mm

正常來說 我都一次輸入幾百個以上的數據
這時候我會先刪減到10個以內 測試OK了後
才會上幾百個數據
您需要登錄後才可以回帖 登錄 | 註冊

本版積分規則

論壇統計|手機版上論壇|論壇來自幾何科技 論壇架構版次 20240312

GMT+8, 2024/4/18 12:44 , Processed in 0.120938 second(s), 20 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2023 Discuz! Team.

快速回復 返回頂部 返回列表