SolidWorks專門論壇 SolidWorks forum

 找回密碼
 註冊
查看: 12771|回復: 34

使用Visual Studio建立SolidWorks二次開發環境(VB.NET)

[複製鏈接]
發表於 2018/5/12 11:32:30 | 顯示全部樓層 |閱讀模式
這裡有一個SolidWorks API的付費線上課程""SolidWorks API二次开发,1000有找這個價格算很便宜了,如果有興趣的可以學習一下
SolidWorks API除了使用內建的VBA編譯,也可以使用Visual Studio做為開發環境寫
這篇文除了給一些完全不知道怎麼入們的人參考,也順便當作自己的學習筆記,增加自己的印象~~

1.首先是先建立一個新的專案
螢幕擷取畫面 (1).png

2.建立新專案後到畫面右邊的方案總管加入新的參考項目
我們要操控的對象不是Windows環境中原生的物件,所以要將開物件的DLL檔加入專案,才可以引用那個物件中所有命名空間下的指令
螢幕擷取畫面 (2).png

3.自己開啟檔案瀏覽視窗加入物件的DLL
螢幕擷取畫面 (3).png

4.DLL檔路徑為"C:\Program Files\SolidWorks Corp\SolidWorks\api\redist\",如果有自訂安裝路徑請依自訂路徑為主
基本上只要加入這兩個DLL就可以了,除非你想要建立SolidWorks其他附屬程式的二次開發,不然其他東西用到的機會很小
有關各個DLL檔是用來做些什麼的資料請參考官方API Help" SolidWorks API Help"
螢幕擷取畫面 (4).png

5.完成加入參考後,可以看到方案總管增加了我們剛才引用的DLL檔
螢幕擷取畫面 (5).png

6.進入程式編輯區,在最上面加入我們剛才引用的命名空間,要做這一步才可以進行後續的物件引用.
有關命名空間引用的詳細資料請參考微軟官方的說明"Imports 陳述式 (.NET 命名空間和類型)"
螢幕擷取畫面 (6).png

7.我們用Button物件來簡單測試一下建立SolidWorks物件並將其顯示就可以看到SolidWorks被執行囉
螢幕擷取畫面 (7).png





114.32.241.168_5566 - 遠端桌面連線 2018_5_12 上午 11_19_53.mp4

6.14 MB, 下載次數: 380

發表於 2018/5/12 20:41:11 | 顯示全部樓層
蠻用心的貼文!2017的vb 看起來感覺不錯,目前我依舊用2010版的,c槽空間不多就不打算升級到2017了,我引用的方式是直接點專案→加入參考,然後再找尋我所想要引用的物件..
3.JPG
1.png

點評

我剛學VB時也是用2010版的IDE,不過後來要再找載點有點花時間,所以就拿最新的版本來用 2017版可以選擇需要的編譯模組安裝,不會一開始就這麼肥大(雖然還是很佔空間...)  詳情 回復 發表於 2018/5/12 21:42
 樓主| 發表於 2018/5/12 21:42:54 | 顯示全部樓層
kkovgto 發表於 2018/5/12 20:41
蠻用心的貼文!2017的vb 看起來感覺不錯,目前我依舊用2010版的,c槽空間不多就不打算升級到2017了,我引用 ...

我剛學VB時也是用2010版的IDE,不過後來要再找載點有點花時間,所以就拿最新的版本來用
2017版可以選擇需要的編譯模組安裝,不會一開始就這麼肥大(雖然還是很佔空間...)

另外想問一下,你對異形孔精靈的API有了解嗎?
我想要鑽定位銷孔,但是都弄不出來,最妙的是用錄製巨集紀錄動作後居然跟我說不能執行
阿不是SolidWorks自己建立的巨集嗎?竟然還不能執行,有後蝦的
API Help只有狹槽和沉頭孔的範例,我有成功用API鑽出沉頭孔,但是定位銷孔就是做不出來

發表於 2018/5/12 22:38:44 | 顯示全部樓層
用錄製巨集的好像只會鑽一個孔,之後還要想辦法進草圖編輯多個孔
定位銷的孔是指一般的鑽孔嗎,目前我只研究到攻牙孔部份....

點評

算是一般鑽孔吧,選擇一般鑽孔後,下面有選項可以選竄孔鑽孔和定位孔 我目前也是先打一個孔,在進入草圖新增其他草圖點 有試過畫出草圖,然後點選草圖後進行鑽孔 雖然這樣可以一次鑽很多孔,但是會多一個草圖 而且  詳情 回復 發表於 2018/5/13 06:49
 樓主| 發表於 2018/5/13 06:49:03 | 顯示全部樓層
kkovgto 發表於 2018/5/12 22:38
用錄製巨集的好像只會鑽一個孔,之後還要想辦法進草圖編輯多個孔
定位銷的孔是指一般的鑽孔嗎,目前我只研 ...

算是一般鑽孔吧,選擇一般鑽孔後,下面有選項可以選竄孔鑽孔和定位孔

我目前也是先打一個孔,在進入草圖新增其他草圖點
有試過畫出草圖,然後點選草圖後進行鑽孔
雖然這樣可以一次鑽很多孔,但是會多一個草圖
而且這樣做出來的孔,它的特徵參考會變成3D草圖

你可以提供你試過的攻牙的範例讓我試試看嗎我試出怎麼鑽沉頭孔花了我好多時間,雖然有做出也算有進度
不果這麼燒時間實在是沒什麼效率啊.......

還有想請你幫我試試看你用你的SolidWorks錄製鑽孔巨集後可不可以執行
我自己錄製的不能執行,所以我沒辦法用錄製巨集試出語法
只要能自己用VB.NET鑽出第一個孔,後面的事就簡單了

SolidWorks 自動化零件生成.zip (860.79 KB, 下載次數: 121)
這是我目前試出來的鑽沉頭孔



發表於 2018/5/13 09:05:18 | 顯示全部樓層
我無法使用你的巨集,因為你所使用的vb比我高,打不開。
建立螺紋孔的方式,必需建立螺蚊孔的資料。
我的方式是建立完螺紋孔,然後再進入異形孔內的草圖做編輯。
選擇"Point1" 刪除
之後添加新的點位置

結束草圖
我的巨集大概就是這些步驟
你再研究看看我的巨集吧
因為我比較懶 幾乎沒有寫註解...

hole2.swp

73.5 KB, 下載次數: 115

點評

原來Visual Studio也有這個問題啊,是我疏忽了,抱歉....我將代碼貼在記事本附上 我把代碼貼在這 為了方便在監看式中觀察鑽孔指令的參數,所以我把它包裝成自訂類別  詳情 回復 發表於 2018/5/13 14:10
 樓主| 發表於 2018/5/13 14:10:46 | 顯示全部樓層
kkovgto 發表於 2018/5/13 09:05
我無法使用你的巨集,因為你所使用的vb比我高,打不開。
建立螺紋孔的方式,必需建立螺蚊孔的資料。
我的方 ...

原來Visual Studio也有這個問題啊,是我疏忽了,抱歉....
我將代碼貼在記事本附上
自動化生成零件.txt (7.11 KB, 下載次數: 91)
自訂類別.txt (4.14 KB, 下載次數: 75)


我把代碼貼在這
  1. Imports SolidWorks.Interop.sldworks
  2. Imports SolidWorks.Interop.swconst

  3. Public Class Form1
  4.     '建立應用程式環境
  5.     Dim SwApp As New SldWorks
  6.     Dim Part As ModelDoc2

  7.     Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
  8.         '開啟應用程式 -> 建立零件
  9.         SwApp.Visible = True
  10.         Part = SwApp.INewPart

  11.         '建立Part1
  12.         CreatePart1()
  13.     End Sub

  14.     Sub CreatePart1()
  15.         '建立零件文檔
  16.         Dim Part As ModelDoc2 = SwApp.ActiveDoc
  17.         Part = SwApp.INewPart

  18.         '抑制尺寸設定對話框
  19.         SwApp.SetUserPreferenceToggle(10, False)

  20.         '填料1
  21.         Part.Extension.SelectByID2("上基準面", "PLANE", 0, 0, 0, False, 0, Nothing, 0)
  22.         Part.SketchManager.InsertSketch(True)
  23.         Part.SketchManager.CreateCornerRectangle(-0.036, -0.0475, 0, 0.036, 0.0475, 0)
  24.         Part.Extension.SelectByID2("Line2", "SKETCHSEGMENT", 0, 0, 0, False, 0, Nothing, 0)
  25.         Part.SelectMidpoint()
  26.         Part.Extension.SelectByID2("Point1@原點", "EXTSKETCHPOINT", 0, 0, 0, True, 0, Nothing, 0)
  27.         Part.SketchAddConstraints("sgHORIZONTALPOINTS2D")
  28.         Part.Extension.SelectByID2("Line1", "SKETCHSEGMENT", 0, 0, 0, False, 0, Nothing, 0)
  29.         Part.SelectMidpoint()
  30.         Part.Extension.SelectByID2("Point1@原點", "EXTSKETCHPOINT", 0, 0, 0, True, 0, Nothing, 0)
  31.         Part.SketchAddConstraints("sgVERTICALPOINTS2D")
  32.         Part.ClearSelection2(True)
  33.         Part.Extension.SelectByID2("Line2", "SKETCHSEGMENT", 0, 0, 0, False, 0, Nothing, 0)
  34.         Part.AddDimension2(-0.1, 0, 0)
  35.         Part.ClearSelection2(True)
  36.         Part.Extension.SelectByID2("Line1", "SKETCHSEGMENT", 0, 0, 0, False, 0, Nothing, 0)
  37.         Part.AddDimension2(0, 0, 0.1)
  38.         Part.SketchManager.InsertSketch(True)
  39.         Part.Extension.SelectByID2("草圖1", "SKETCH", 0, 0, 0, False, 4, Nothing, 0)
  40.         Part.FeatureManager.FeatureExtrusion2(True, False, False, 6, 0, 0.012, 0.01, False, False, False, False, 0, 0, False, False, False, False, True, True, True, 0, 0, False)
  41.         Part.ViewZoomtofit2()

  42.         '除料1
  43.         Part.Extension.SelectByID2("", "FACE", 0.036, 0, 0, False, 0, Nothing, 0)
  44.         Part.SketchManager.InsertSketch(True)
  45.         Part.ClearSelection2(True)
  46.         Part.SketchManager.CreatePolygon(-0.0295, 0.006551, 0, -0.022429, 0.006551, 0, 4, True)
  47.         Part.ClearSelection2(True)
  48.         Part.Extension.SelectByID2("Point5", "SKETCHPOINT", 0, 0, 0, False, 0, Nothing, 0)
  49.         Part.Extension.SelectByID2("", "EDGE", 0.036, 0, 0.0475, True, 0, Nothing, 0)
  50.         Part.AddDimension2(0.036, 0.02, 0.04)
  51.         Part.ClearSelection2(True)
  52.         Part.Extension.SelectByID2("Point5", "SKETCHPOINT", -0.0295, 0.006551, 0, False, 0, Nothing, 0)
  53.         Part.Extension.SelectByID2("", "EDGE", 0.036, -0.006, 0, True, 0, Nothing, 0)
  54.         Part.AddDimension2(0.036, 0, 0.06)
  55.         Part.ClearSelection2(True)
  56.         Part.Extension.SelectByID2("Arc1", "SKETCHSEGMENT", 0, 0, 0, False, 0, Nothing, 0)
  57.         Part.AddDimension2(0.036, 0.015, 0.015)
  58.         Part.ClearSelection2(True)
  59.         Part.Extension.SelectByID2("Line3", "SKETCHSEGMENT", 0, 0, 0, False, 0, Nothing, 0)
  60.         Part.Extension.SelectByID2("", "EDGE", 0.036, -0.006, 0, True, 0, Nothing, 0)
  61.         Part.AddDimension2(0.036, -0.002, 0.035)
  62.         Part.ClearSelection2(True)
  63.         Part.SketchManager.InsertSketch(True)
  64.         Part.Extension.SelectByID2("草圖2", "SKETCH", 0, 0, 0, False, 4, Nothing, 0)
  65.         Part.FeatureManager.FeatureCut3(True, False, False, 1, 0, 0.01, 0.01, False, False, False, False, 0, 0, False, False, False, False, False, True, True, True, True, False, 0, 0, False)
  66.         Part.ClearSelection2(True)
  67.         Part.ViewZoomtofit2()

  68.         '除料2
  69.         Part.Extension.SelectByID2("", "FACE", 0, 0.006, 0.042, False, 0, Nothing, 0)
  70.         Part.SketchManager.InsertSketch(True)
  71.         Part.SketchManager.CreateCornerRectangle(-0.012, -0.0375, 0, 0.012, -0.0475, 0)
  72.         Part.Extension.SelectByID2("Line3", "SKETCHSEGMENT", 0, 0, 0, False, 0, Nothing, 0)
  73.         Part.SelectMidpoint()
  74.         Part.Extension.SelectByID2("Point1@原點", "EXTSKETCHPOINT", 0, 0, 0, True, 0, Nothing, 0)
  75.         Part.SketchAddConstraints("sgVERTICALPOINTS2D")
  76.         Part.Extension.SelectByID2("Line4", "SKETCHSEGMENT", 0, 0, 0, False, 0, Nothing, 0)
  77.         Part.AddDimension2(0.02, 0.006, 0.04)
  78.         Part.ClearSelection2(True)
  79.         Part.Extension.SelectByID2("Line1", "SKETCHSEGMENT", 0, 0, 0, False, 0, Nothing, 0)
  80.         Part.AddDimension2(0, 0.006, 0.05)
  81.         Part.ClearSelection2(True)
  82.         Part.SketchManager.InsertSketch(True)
  83.         Part.Extension.SelectByID2("草圖3", "SKETCH", 0, 0, 0, False, 4, Nothing, 0)
  84.         Part.FeatureManager.FeatureCut3(True, False, False, 1, 0, 0.01, 0.01, False, False, False, False, 0, 0, False, False, False, False, False, True, True, True, True, False, 0, 0, False)
  85.         Part.ClearSelection2(True)

  86.         '沉頭孔1(嘗試改為定位銷孔)
  87.         Dim Counterbores As New Hole(swWzdGeneralHoleTypes_e.swWzdCounterBore, swWzdHoleStandards_e.swStandardISO,
  88.                                      swWzdHoleStandardFastenerTypes_e.swStandardISOSocketHeadCap, "M4",
  89.                                      swEndConditions_e.swEndCondThroughAll, 0.0045, -1, -1, 0.008, 0.0045,
  90.                                      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, "", False, False, False, False, False, False)

  91.         Part.Extension.SelectByID2("", "FACE", -0.018, 0.006, 0.0425, False, 0, Nothing, 0)

  92.         Part.FeatureManager.HoleWizard5(Counterbores.GenericHoleType, Counterbores.StandardIndex, Counterbores.FastenerTypeIndex,
  93.                                    Counterbores.SSize, Counterbores.EndType, Counterbores.Diameter, Counterbores.Depth, Counterbores.Length,
  94.                                    Counterbores.Value1, Counterbores.Value2, Counterbores.Value3, Counterbores.Value4, Counterbores.Value5,
  95.                                    Counterbores.Value6, Counterbores.Value7, Counterbores.Value8, Counterbores.Value9, Counterbores.Value10,
  96.                                    Counterbores.Value11, Counterbores.Value12, Counterbores.ThreadClass, Counterbores.RevDir, Counterbores.FeatureScope,
  97.                                    Counterbores.AutoSelect, Counterbores.AssemblyFeatureScope, Counterbores.AutoSelectComponents, Counterbores.PropagateFeatureToParts)

  98.         Part.Extension.SelectByID2("草圖5", "SKETCH", 0, 0, 0, False, 0, Nothing, 0)
  99.         Part.EditSketch()
  100.         Part.SketchManager.CreatePoint(0.015, 0.0415, 0)
  101.         Part.SketchManager.CreatePoint(-0.005, 0.0365, 0)
  102.         Part.SketchManager.CreatePoint(-0.026, 0.0165, 0)
  103.         Part.SketchManager.CreatePoint(0.026, 0.0165, 0)
  104.         Part.SketchManager.CreatePoint(-0.031, 0.0015, 0)
  105.         Part.SketchManager.CreatePoint(0.031, 0.0015, 0)
  106.         Part.SketchManager.CreatePoint(-0.005, -0.0115, 0)
  107.         Part.SketchManager.CreatePoint(0.015, -0.0165, 0)
  108.         Part.SketchManager.CreatePoint(0.018, -0.0425, 0)
  109.         Part.SketchManager.InsertSketch(True)


  110.         '開啟尺寸設定對話框
  111.         SwApp.SetUserPreferenceToggle(10, True)

  112.     End Sub
複製代碼



為了方便在監看式中觀察鑽孔指令的參數,所以我把它包裝成自訂類別


  1. Public Class Hole

  2.     Public Sub New(ByVal GenericHoleType As Integer, ByVal StandardIndex As Integer, ByVal FastenerTypeIndex As Integer, ByVal SSize As String,
  3.                    ByVal EndType As Integer, ByVal Diameter As Double, ByVal Depth As Double, ByVal Length As Double,
  4.                    ByVal Value1 As Double, ByVal Value2 As Double, ByVal Value3 As Double, ByVal Value4 As Double,
  5.                    ByVal Value5 As Double, ByVal Value6 As Double, ByVal Value7 As Double, ByVal Value8 As Double,
  6.                    ByVal Value9 As Double, ByVal Value10 As Double, ByVal Value11 As Double, ByVal Value12 As Double,
  7.                    ByVal ThreadClass As String, ByVal RevDir As Boolean, ByVal FeatureScope As Boolean, ByVal AutoSelect As Boolean,
  8.                    ByVal AssemblyFeatureScope As Boolean, ByVal AutoSelectComponents As Boolean, ByVal PropagateFeatureToParts As Boolean)
  9.         Me.GenericHoleType = GenericHoleType
  10.         Me.StandardIndex = StandardIndex
  11.         Me.FastenerTypeIndex = FastenerTypeIndex
  12.         Me.SSize = SSize
  13.         Me.EndType = EndType
  14.         Me.Diameter = Diameter
  15.         Me.Depth = Depth
  16.         Me.Length = Length
  17.         Me.Value1 = Value1
  18.         Me.Value2 = Value2
  19.         Me.Value3 = Value3
  20.         Me.Value4 = Value4
  21.         Me.Value5 = Value5
  22.         Me.Value6 = Value6
  23.         Me.Value7 = Value7
  24.         Me.Value8 = Value8
  25.         Me.Value9 = Value9
  26.         Me.Value10 = Value10
  27.         Me.Value11 = Value11
  28.         Me.Value12 = Value12
  29.         Me.ThreadClass = ThreadClass
  30.         Me.RevDir = RevDir
  31.         Me.FeatureScope = FeatureScope
  32.         Me.AutoSelect = AutoSelect
  33.         Me.AssemblyFeatureScope = AssemblyFeatureScope
  34.         Me.AutoSelectComponents = AutoSelectComponents
  35.         Me.PropagateFeatureToParts = PropagateFeatureToParts
  36.     End Sub

  37.     Public GenericHoleType As Integer
  38.     '柱孔        swWzdGeneralHoleTypes_e.swWzdCounterBore
  39.     '錐孔        swWzdGeneralHoleTypes_e.swWzdCounterSink        
  40.     '鑽孔        swWzdGeneralHoleTypes_e.swWzdHole
  41.     '直螺絲孔    swWzdGeneralHoleTypes_e.swWzdTap
  42.     '斜螺絲孔    swWzdGeneralHoleTypes_e.swWzdPipeTap
  43.     '舊制孔      swWzdGeneralHoleTypes_e.swWzdLegacy
  44.     '柱孔狹槽    swWzdGeneralHoleTypes_e.swWzdCounterBoreSlot
  45.     '錐孔狹槽    swWzdGeneralHoleTypes_e.swWzdCounterSinkSlot
  46.     '狹槽        swWzdGeneralHoleTypes_e.swWzdHoleSlot

  47.     Public StandardIndex As Integer
  48.     'ISO(公制)   swWzdHoleStandards_e.swStandardISO

  49.     Public FastenerTypeIndex As Integer
  50.     '公制沉頭孔  swWzdHoleStandardFastenerTypes_e.swStandardISOSocketHeadCap
  51.     '公制定位孔  swWzdHoleStandardFastenerTypes_e.swStandardISODowelHole

  52.     Public SSize As String
  53.     '特徵描述(特徵樹提示文字)

  54.     Public EndType As Integer
  55.     '特徵終止型態
  56.     'swEndConditions_e.swEndCondBlind              指定深度
  57.     'swEndConditions_e.swEndCondThroughAll         完全貫穿
  58.     'swEndConditions_e.swEndCondThroughNext        成形至下一面
  59.     'swEndConditions_e.swEndCondUpToVertex         成形至一頂點
  60.     'swEndConditions_e.swEndCondUpToSurface        成形至某一面
  61.     'swEndConditions_e.swEndCondOffsetFromSurface  至某面平移處
  62.     'swEndConditions_e.swEndCondMidPlane           兩側對稱
  63.     'swEndConditions_e.swEndCondUpToBody           成形至本體
  64.     'swEndConditions_e.swEndCondThroughAllBoth     完全貫穿-兩者

  65.     Public Diameter As Double
  66.     '鑽孔直徑

  67.     Public Depth As Double
  68.     '鑽孔深度

  69.     Public Length As Double
  70.     '狹槽長度(只對於狹槽型態的孔有效)

  71.     Public Value1 As Double
  72.     Public Value2 As Double
  73.     Public Value3 As Double
  74.     Public Value4 As Double
  75.     Public Value5 As Double
  76.     Public Value6 As Double
  77.     Public Value7 As Double
  78.     Public Value8 As Double
  79.     Public Value9 As Double
  80.     Public Value10 As Double
  81.     Public Value11 As Double
  82.     Public Value12 As Double
  83.     '依鑽孔類型有不同的定義,忽略該數值請輸入-1

  84.     Public ThreadClass As String
  85.     Public RevDir As Boolean
  86.     Public FeatureScope As Boolean
  87.     Public AutoSelect As Boolean
  88.     Public AssemblyFeatureScope As Boolean
  89.     Public AutoSelectComponents As Boolean
  90.     Public PropagateFeatureToParts As Boolean

  91. End Class
複製代碼

謝謝你提供的巨集,晚點我來試試看
你的巨集錄完之後可以執行鑽孔嗎,不知道為啥我的不行...

自動生成零件.gif





發表於 2018/5/13 15:51:02 | 顯示全部樓層
我提供的Code 可以執行,只是沒做標註的動作!你的code 我還沒仔細看完,但感覺蠻專業的。
你的好像是從開檔→建模→鑽孔 一次做完,
過程中好像蠻多地方用selectionbyid2 的部份,
但好像限定的比較沒有這麼靈活。
如果草圖名稱變化時可能selectionbyid2 會選不到草圖我提供的Code 只有先選擇面然後再執行巨集,比較簡略....


bandicam 2018-05-13 15-44-30-271.avi

2.56 MB, 下載次數: 100

點評

我剛開始學習API 想說用一般建模的過程把所有會用到的指令全部都練習一遍 開啟SolidWorks -> 建立新零件 -> 建立草圖 -> 建立特徵 目前在異形孔精靈卡關了,所以暫時沒什進展 這個手動設計的流程如果可以全部用  詳情 回復 發表於 2018/5/13 17:00
 樓主| 發表於 2018/5/13 17:00:12 | 顯示全部樓層
kkovgto 發表於 2018/5/13 15:51
我提供的Code 可以執行,只是沒做標註的動作!你的code 我還沒仔細看完,但感覺蠻專業的。
你的好像是從開 ...

我剛開始學習API
想說用一般建模的過程把所有會用到的指令全部都練習一遍
開啟SolidWorks -> 建立新零件 -> 建立草圖 -> 建立特徵
目前在異形孔精靈卡關了,所以暫時沒什進展
這個手動設計的流程如果可以全部用用程式碼表現
那我之後想做什麼樣的變化應該都不會是太大的問題
但前提是測試過所有指令且全部了解
有些單一指令帶了一堆參數,要搞懂真的要花不少時間
而且最幹的是自己錄製的巨集還不能執行,官方又沒適合的範例,真的會試到上火啊

至於你說的問題,因為這支程式是自動建立零件,所以好像只能這樣寫
如果是寫一些小工具,應該會不會把條件寫死了


發表於 2018/5/13 18:23:25 | 顯示全部樓層
異形孔我也卡蠻久的,
我現在才看到你建模的影片。
感覺蠻不錯。
最後我才發現我無法幫你測定位銷的孔,因為這功能是2013版後的功能,我是2012版的所以關於錄製定位銷的巨集無法執行的問題,目前我無解.

點評

這是我的錯誤訊息 我用自己錄的巨集沒辦法重現鑽孔特徵 [attachimg]221684[/attachimg] [attachimg]221685[/attachimg]  詳情 回復 發表於 2018/5/14 08:27
 樓主| 發表於 2018/5/14 08:27:45 | 顯示全部樓層
kkovgto 發表於 2018/5/13 18:23
異形孔我也卡蠻久的,
我現在才看到你建模的影片。
感覺蠻不錯。

你給我的巨集我可以成功使用喔,你幾乎把所有公制螺紋孔的指令都寫好了
這樣我就不用一直重打指令了,感謝你的分享

這是我的錯誤訊息
我用自己錄的巨集沒辦法重現鑽孔特徵
Macro8.swp (23 KB, 下載次數: 81)
螢幕擷取畫面 (49).png
螢幕擷取畫面 (50).png

發表於 2018/5/14 19:43:41 | 顯示全部樓層
我研究了許久,發現了一個問題,就是如果選直徑孔的話因為"Ø" 這字元在solidworks 裡面的vba 是無法顯示
,所以錄完後無法執行的可能原因
但如果把錄製的東西轉到你的vb2017 裡面 "Ø" 這字元就能顯示,
你可以朝這方面的做法試試

點評

你不是用2012版的嗎? 你是怎麼發現這個問題的!!!  詳情 回復 發表於 2018/5/15 08:27
 樓主| 發表於 2018/5/15 08:27:56 | 顯示全部樓層
kkovgto 發表於 2018/5/14 19:43
我研究了許久,發現了一個問題,就是如果選直徑孔的話因為"Ø" 這字元在solidworks 裡面的vba 是無法顯示
...

你不是用2012版的嗎?

你是怎麼發現這個問題的!!!

點評

我是用2012的阿!我看了你的問題,然後我再試著用鑽孔的方式錄製,也是一樣無法執行,想了一些時間,才發現這個問題  詳情 回復 發表於 2018/5/15 18:29
發表於 2018/5/15 15:31:56 | 顯示全部樓層
太感謝了!!終於有點頭緒了!這幾天都在看原廠的API文件,寫的不是很清楚,謝謝你的講解^^
發表於 2018/5/15 15:43:24 | 顯示全部樓層
請問  課程你有去上了嗎??實用度如何

點評

我已經看完一半了,原本預計要搞好幾個月才能畫零件的 因為這個教程,我現在已經學習到用API進行組裝了 我是覺得要學API看這可以學很快,不然Help裡面一堆指令 根本不知道從哪開始看,一點頭緒都沒有,不知道怎麼開  詳情 回復 發表於 2018/5/15 16:19
 樓主| 發表於 2018/5/15 16:19:08 | 顯示全部樓層
ruter1224 發表於 2018/5/15 15:43
請問  課程你有去上了嗎??實用度如何

我已經看完一半了,原本預計要搞好幾個月才能畫零件的
因為這個教程,我現在已經學習到用API進行組裝了

我是覺得要學API看這可以學很快,不然Help裡面一堆指令
根本不知道從哪開始看,一點頭緒都沒有,不知道怎麼開始

當然一定還有其他更好的學習資源,只是還沒被我發現而已
SolidWorks API 原廠教程
原廠也有教學,但是不知道怎麼買...

發表於 2018/5/15 16:30:53 | 顯示全部樓層
jbkndron: VB.net 我可以建立應用程式 可以連線SQL(新增 刪除 查詢 更新),都沒問題,獨獨目前想要把用VB.net寫出來的一些計算工具併入SolidWorks裡(工具列),搞不定,尤其是VB.net寫出來的DLL沒法直接開啟,查出來 要使用VS內建的登入檔碼產生器,然後再去建立跟修改登入檔,之後在開啟SW時才會出現,還蠻麻煩的

點評

直接併入SolidWorks工具列的話要用SDK這個我剛開始摸索,也不是很了解 YouTube有用C#寫的教學影片,不過是英文的 這影集的最後一節是在講有關SDK插件的寫法,但我還沒有很仔細研究  詳情 回復 發表於 2018/5/15 21:25
發表於 2018/5/15 16:44:23 | 顯示全部樓層

jbkndron: 剛剛上線去看了  zxlearning.com/course/18/notes  這個教學的試看版,他裡面有講到,講座裡面不會講到VB.NET的API作法,對我的參考價值較低

點評

基本上VB6和VB.NET語法差異很小,不太會有看不懂的問題 所以我這樣看著學算是無痛學習,因為我也沒學過VB6,但我覺得學習上沒什麼障礙 而且很多指令通常都是從錄製的巨集拿出來改,所以完全看不懂VB6其實比較辛苦  詳情 回復 發表於 2018/5/15 21:15
發表於 2018/5/15 18:29:03 | 顯示全部樓層
jbkndron 發表於 2018/5/15 08:27
你不是用2012版的嗎?

你是怎麼發現這個問題的!!!

我是用2012的阿!我看了你的問題,然後我再試著用鑽孔的方式錄製,也是一樣無法執行,想了一些時間,才發現這個問題。講到異型孔,你轉AUTOCAD時孔數量會不會有發生一個奇怪的現象!
例如:有8個M5孔,用孔標註的方式 8 x M5 轉到AUTOCAD檔後,
開啟轉完的Autocad檔,你在這個尺寸的地方點二下會變成 5 x M5 不知道你有沒有遇過!

點評

所以你的鑽螺絲孔聚集是直接看Help寫的,不是從錄製完的巨集修改的嗎? 我因為沒辦法用錄的,所以想試著自己填參數弄個定位銷恐孔出來 但一直都沒有成功,卡了好幾天了.... 我很少轉換成AutoCAD格式,但是有聽過  詳情 回復 發表於 2018/5/15 21:19
 樓主| 發表於 2018/5/15 21:15:22 | 顯示全部樓層
ruter1224 發表於 2018/5/15 16:44
jbkndron: 剛剛上線去看了  zxlearning.com/course/18/notes  這個教學的試看版,他裡面有講到,講座裡面不 ...

基本上VB6和VB.NET語法差異很小,不太會有看不懂的問題
所以我這樣看著學算是無痛學習,因為我也沒學過VB6,但我覺得學習上沒什麼障礙
而且很多指令通常都是從錄製的巨集拿出來改,所以完全看不懂VB6其實比較辛苦

之前我學程式概念還是看C#的教學影片來學VB的,反正兩個都是.NET平台上的語言
只要知道語法代表的意義,就算素材不是自己熟悉的語言也是可以用,只是有點麻煩

我會花錢買這個的主要目的是想知道這些API指令的使用方法光看Help和範例真的太花時間,沒什麼效率
如果不懂這些API指令的運作邏輯,就算是在短的範例也很難參透其中的工作原理

 樓主| 發表於 2018/5/15 21:19:57 | 顯示全部樓層
kkovgto 發表於 2018/5/15 18:29
我是用2012的阿!我看了你的問題,然後我再試著用鑽孔的方式錄製,也是一樣無法執行,想了一些時間,才發 ...

所以你的鑽螺絲孔聚集是直接看Help寫的,不是從錄製完的巨集修改的嗎?

我因為沒辦法用錄的,所以想試著自己填參數弄個定位銷恐孔出來

但一直都沒有成功,卡了好幾天了....


我很少轉換成AutoCAD格式,但是有聽過同事轉完給加工廠後出包
什麼尺寸隱形,或者是直接變了,這問題真的很瞎

點評

Help沒提到,雖然有範例但是是沉頭孔的範例,沒什麼幫助,我是用錄製巨集的方式查看,後來上網找找不到相關的答案, 就自己想了阿,然後可能直覺到某個地方有問題就剛好解答了疑惑. solidWroks 轉 CAD 很多  詳情 回復 發表於 2018/5/15 22:14
 樓主| 發表於 2018/5/15 21:25:57 | 顯示全部樓層
ruter1224 發表於 2018/5/15 16:30
jbkndron: VB.net 我可以建立應用程式 可以連線SQL(新增 刪除 查詢 更新),都沒問題,獨獨目前想要把用VB.net ...

直接併入SolidWorks工具列的話要用SDK這個我剛開始摸索,也不是很了解
YouTube有用C#寫的教學影片,不過是英文的

這影集的最後一節是在講有關SDK插件的寫法,但我還沒有很仔細研究

我最近也有在試著用VSTO寫Excel插件,不過還沒什麼進展
看起來這與SolidWorks SDK很像,只是要寫成SoliWorks插件要用他們的模板才能發佈他們的DLL
發表於 2018/5/15 22:14:28 | 顯示全部樓層
jbkndron 發表於 2018/5/15 21:19
所以你的鑽螺絲孔聚集是直接看Help寫的,不是從錄製完的巨集修改的嗎?

我因為沒辦法用錄的,所以想試著 ...

Help沒提到,雖然有範例但是是沉頭孔的範例,沒什麼幫助,我是用錄製巨集的方式查看,後來上網找找不到相關的答案,
就自己想了阿,然後可能直覺到某個地方有問題就剛好解答了疑惑.

solidWroks 轉 CAD 很多尺寸都是假象,後來我都還要需要進autocad 裡把尺寸炸開才避免這問題,為什麼會發生我說的原因呢?
是因為 "<>"←這個符號的關係....
不知道為什麼 sW的"<Num>" 轉到AutoCad 時就會變成了 "<>" 導致 8 x M5 變成了 5 x M5
 樓主| 發表於 2018/5/16 09:53:34 | 顯示全部樓層
這樣都能聯想出來,真的太神了!!!
我是看到一個特徵要呼叫這麼多參數就很頭痛,雖然有用Help的說明去試試看,但目前還是弄不出我想要的孔.....


發表於 2018/5/16 18:41:32 | 顯示全部樓層
可能是特徵功能在畫圖上方便很多,所以寫的東西與條件就多!所以在畫圖時沒感覺,但寫程式時就會感覺一堆東西,
一步一步來吧!我也是最近才慢慢研究零件建模方面的API。

點評

我已經成功用VB.NET鑽出銷孔了 過幾天把程式碼整理一下加點註解放上來 用你提出的觀點去試就有結論了,感謝你給的方向 不然20幾個參數排列組合的嘗試真的會試到崩潰  詳情 回復 發表於 2018/5/16 19:42
 樓主| 發表於 2018/5/16 19:42:21 | 顯示全部樓層
kkovgto 發表於 2018/5/16 18:41
可能是特徵功能在畫圖上方便很多,所以寫的東西與條件就多!所以在畫圖時沒感覺,但寫程式時就會感覺一堆東 ...

我已經成功用VB.NET鑽出銷孔了
過幾天把程式碼整理一下加點註解放上來
用你提出的觀點去試就有結論了,感謝你給的方向
不然20幾個參數排列組合的嘗試真的會試到崩潰

點評

用C#寫真麻煩~~~  詳情 回復 發表於 2018/5/18 16:58
可以分享嗎?  詳情 回復 發表於 2018/5/17 21:57
嗯~有時候寫程式,就是通了一個觀念後,很多事情就能迎刃而解了。 你真熱心 提供寫的程式 ,話說你進步的飛快 短短幾天就搞懂了 api那麼多東西.  詳情 回復 發表於 2018/5/16 21:05
發表於 2018/5/16 21:05:42 | 顯示全部樓層
jbkndron 發表於 2018/5/16 19:42
我已經成功用VB.NET鑽出銷孔了
過幾天把程式碼整理一下加點註解放上來
用你提出的觀點去試就有結論了,感 ...

嗯~有時候寫程式,就是通了一個觀念後,很多事情就能迎刃而解了。
你真熱心 提供寫的程式 ,話說你進步的飛快 短短幾天就搞懂了 api那麼多東西.
發表於 2018/5/16 22:26:58 | 顯示全部樓層
關於異形孔如果是普通直孔的話,你可以錄製另一種的方式(如圖),不會用到"Ø" 這字元,其實這個自訂模式也能自訂一些柱孔與沉頭孔,
有機會多試試!
1.JPG

發表於 2018/5/17 21:57:04 | 顯示全部樓層
jbkndron 發表於 2018/5/16 19:42
我已經成功用VB.NET鑽出銷孔了
過幾天把程式碼整理一下加點註解放上來
用你提出的觀點去試就有結論了,感 ...

可以分享嗎?

點評

我先把鑽孔成功的範例放上來好了  詳情 回復 發表於 2018/5/19 10:10
之後我另外發篇和建立特徵有關的帖子一起放上去  詳情 回復 發表於 2018/5/17 22:20
 樓主| 發表於 2018/5/17 22:20:16 | 顯示全部樓層

之後我另外發篇和建立特徵有關的帖子一起放上去

點評

OKOK  詳情 回復 發表於 2018/5/18 09:02
發表於 2018/5/18 09:02:00 | 顯示全部樓層
jbkndron 發表於 2018/5/17 22:20
之後我另外發篇和建立特徵有關的帖子一起放上去

OKOK
發表於 2018/5/18 16:58:36 | 顯示全部樓層
jbkndron 發表於 2018/5/16 19:42
我已經成功用VB.NET鑽出銷孔了
過幾天把程式碼整理一下加點註解放上來
用你提出的觀點去試就有結論了,感 ...

用C#寫真麻煩~~~
 樓主| 發表於 2018/5/19 10:10:51 | 顯示全部樓層

我先把鑽孔成功的範例放上來好了
SolidWorks 鑽孔測試(確認可執行).zip (652.54 KB, 下載次數: 118)

  1. Imports SolidWorks.Interop.sldworks
  2. Imports SolidWorks.Interop.swconst

  3. Public Class Form1


  4.     Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click


  5.         Dim swApp As SldWorks
  6.         Dim swModel As ModelDoc2
  7.         Dim swFeatureMgr As FeatureManager
  8.         Dim swFeature As Feature
  9.         Dim swModelDocExt As ModelDocExtension
  10.         Dim fileName As String
  11.         Dim errors As Long
  12.         Dim warnings As Long
  13.         Dim status As Boolean
  14.         Dim SlotType As Long
  15.         Dim HoleType As Long
  16.         Dim StandardIndex As Long
  17.         Dim FastenerTypeIndex As Long
  18.         Dim SSize As String
  19.         Dim EndType As Long
  20.         Dim ConvFactorLength As Double
  21.         Dim ConvFactorAngle As Double
  22.         Dim Diameter As Double
  23.         Dim Depth As Double
  24.         Dim Length As Double
  25.         Dim ScrewFit As Double
  26.         Dim DrillAngle As Double
  27.         Dim NearCsinkDiameter As Double
  28.         Dim NearCsinkAngle As Double
  29.         Dim FarCsinkDiameter As Double
  30.         Dim FarCsinkAngle As Double
  31.         Dim Offset As Double
  32.         Dim ThreadClass As String
  33.         Dim CounterBoreDiameter As Double
  34.         Dim CounterBoreDepth As Double
  35.         Dim HeadClearance As Double
  36.         Dim BotCsinkDiameter As Double
  37.         Dim BotCsinkAngle As Double
  38.         Dim swWizardHoleFeatData As WizardHoleFeatureData2



  39.         swApp = New SldWorks
  40.         swApp.Visible = True
  41.         fileName = "C:\Program Files\SolidWorks Corp\SolidWorks\samples\tutorial\api\block20.sldprt"
  42.         swModel = swApp.OpenDoc6(fileName, swDocumentTypes_e.swDocPART, swOpenDocOptions_e.swOpenDocOptions_Silent, "", errors, warnings)
  43.         swFeatureMgr = swModel.FeatureManager
  44.         swModelDocExt = swModel.Extension
  45.         'Use IFeatureManager::HoleWizard5
  46.         'to create a slot
  47.         'Select the face where to create the slot
  48.         status = swModelDocExt.SelectByID2("", "FACE", -0.000609805077203873, 0.0396239999998897, -0.00830387834611201, False, 0, Nothing, 0)
  49.         SlotType = swWzdGeneralHoleTypes_e.swWzdHoleSlot
  50.         StandardIndex = swWzdHoleStandards_e.swStandardAnsiInch
  51.         FastenerTypeIndex = swWzdHoleStandardFastenerTypes_e.swStandardAnsiInchAllDrillSizes
  52.         SSize = "#97"
  53.         EndType = swEndConditions_e.swEndCondBlind
  54.         ConvFactorLength = 25.4 / 1000     'Convert inches to meters
  55.         ConvFactorAngle = (22 / 7) / 180   'Convert degrees to radians
  56.         Diameter = 0.5 * ConvFactorLength
  57.         Depth = 2 * ConvFactorLength
  58.         Length = 3 * ConvFactorLength
  59.         'Value1 to Value7 arguments; SolidWorks
  60.         'ignores parameters set to -1
  61.         ScrewFit = -1                       'Value1
  62.         DrillAngle = 100 * ConvFactorAngle  'Value2
  63.         NearCsinkDiameter = -1              'Value3
  64.         NearCsinkAngle = -1                 'Value4
  65.         FarCsinkDiameter = -1               'Value5
  66.         FarCsinkAngle = -1                  'Value6
  67.         Offset = -1                         'Value7
  68.         ThreadClass = ""
  69.         swFeature = swFeatureMgr.HoleWizard5(SlotType, StandardIndex, FastenerTypeIndex,
  70.            SSize, EndType, Diameter, Depth, Length, ScrewFit, DrillAngle,
  71.            NearCsinkDiameter, NearCsinkAngle, FarCsinkDiameter, FarCsinkAngle, Offset, -1, -1, -1,
  72.            -1, -1, ThreadClass, False, False, False, False, False, False)

  73.         '_______________________________________________________________________________
  74.         status = swModelDocExt.SelectByID2("", "FACE", -0.00134479865672033, 0.0396240000000034, -0.0399210049380327, False, 0, Nothing, 0)

  75.         SlotType = swWzdGeneralHoleTypes_e.swWzdHoleSlot
  76.         StandardIndex = swWzdHoleStandards_e.swStandardAnsiInch
  77.         FastenerTypeIndex = swWzdHoleStandardFastenerTypes_e.swStandardAnsiInchAllDrillSizes
  78.         SSize = "#1"
  79.         EndType = swEndConditions_e.swEndCondBlind
  80.         ConvFactorLength = 25.4 / 1000     'Convert inches to meters
  81.         ConvFactorAngle = (22 / 7) / 180   'Convert degrees to radians
  82.         Diameter = 0.5 * ConvFactorLength
  83.         Depth = 2 * ConvFactorLength
  84.         Length = 3 * ConvFactorLength
  85.         'Value1 to Value7 arguments; SolidWorks
  86.         'ignores parameters set to -1
  87.         ScrewFit = -1                       'Value1
  88.         DrillAngle = 100 * ConvFactorAngle  'Value2
  89.         NearCsinkDiameter = -1              'Value3
  90.         NearCsinkAngle = -1                 'Value4
  91.         FarCsinkDiameter = -1               'Value5
  92.         FarCsinkAngle = -1                  'Value6
  93.         Offset = -1                         'Value7
  94.         ThreadClass = ""
  95.         swFeature = swFeatureMgr.HoleWizard5(SlotType, StandardIndex, FastenerTypeIndex,
  96.            SSize, EndType, Diameter, Depth, Length, ScrewFit, DrillAngle,
  97.            NearCsinkDiameter, NearCsinkAngle, FarCsinkDiameter, FarCsinkAngle, Offset, -1, -1, -1,
  98.            -1, -1, ThreadClass, False, False, False, False, False, False)

  99.         '_______________________________________________________________________________

  100.         'Print length of slot to Immediate window
  101.         swWizardHoleFeatData = swFeature.GetDefinition
  102.         Debug.Print("Length of slot: " & swWizardHoleFeatData.Length & " inches")
  103.         'Use IFeatureManager::HoleWizard5
  104.         'to create a counterbore hole
  105.         'Select the face where to create the hole
  106.         status = swModelDocExt.SelectByID2("", "FACE", -0.0060197480091233, 0.0396239999998329, 0.0270812377555103, False, 0, Nothing, 0)
  107.         HoleType = swWzdGeneralHoleTypes_e.swWzdCounterBore
  108.         StandardIndex = swWzdHoleStandards_e.swStandardAnsiInch
  109.         FastenerTypeIndex = swWzdHoleStandardFastenerTypes_e.swStandardAnsiInchBinding
  110.         SSize = "#12"
  111.         EndType = swEndConditions_e.swEndCondThroughAll
  112.         ConvFactorLength = 25.4 / 1000      'Convert inches to meters
  113.         ConvFactorAngle = (22 / 7) / 180    'Convert degrees to radians
  114.         Diameter = 0.5 * ConvFactorLength
  115.         Depth = -1
  116.         Length = -1
  117.         'Value1 to Value12 arguments; SolidWorks
  118.         'ignores parameters set to -1
  119.         CounterBoreDiameter = 0.6 * ConvFactorLength    'Value1
  120.         CounterBoreDepth = 0.2 * ConvFactorLength       'Value2
  121.         HeadClearance = -1                              'Value3
  122.         ScrewFit = -1                                   'Value4
  123.         DrillAngle = -1                                 'Value5
  124.         NearCsinkDiameter = -1                          'Value6
  125.         NearCsinkAngle = -1                             'Value7
  126.         BotCsinkDiameter = -1                           'Value8
  127.         BotCsinkAngle = -1                              'Value9
  128.         FarCsinkDiameter = -1                           'Value10
  129.         FarCsinkAngle = -1                              'Value11
  130.         Offset = -1                                     'Value12
  131.         ThreadClass = ""
  132.         swFeature = swFeatureMgr.HoleWizard5(HoleType, StandardIndex, FastenerTypeIndex, SSize, EndType,
  133.             Diameter, Depth, Length, CounterBoreDiameter, CounterBoreDepth, HeadClearance, ScrewFit, DrillAngle,
  134.             NearCsinkDiameter, NearCsinkAngle, BotCsinkDiameter, BotCsinkAngle, FarCsinkDiameter, FarCsinkAngle,
  135.             Offset, ThreadClass, False, False, False, False, False, False)

  136.     End Sub

  137.     Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
  138.         Dim swApp As SldWorks
  139.         Dim Part As ModelDoc2
  140.         Dim swFeatureMgr As FeatureManager
  141.         Dim swFeature As Feature
  142.         Dim swModelDocExt As ModelDocExtension
  143.         Dim swWizardHoleFeatData As WizardHoleFeatureData2

  144.         swApp = New SldWorks
  145.         swApp.Visible = True
  146.         'fileName = "C:\Program Files\SolidWorks Corp\SolidWorks\samples\tutorial\api\block20.sldprt"
  147.         'swModel = swApp.OpenDoc6(fileName, swDocumentTypes_e.swDocPART, swOpenDocOptions_e.swOpenDocOptions_Silent, "", errors, warnings)
  148.         Part = swApp.NewPart
  149.         swFeatureMgr = Part.FeatureManager
  150.         swModelDocExt = Part.Extension

  151.         '-----------------------------
  152.         Part.Extension.SelectByID2("前基準面", "PLANE", 0, 0, 0, False, 0, Nothing, 0)
  153.         Part.SketchManager.InsertSketch(True)
  154.         Part.ClearSelection2(True)
  155.         Part.SketchManager.CreateCenterRectangle(-0, 0, 0, 0.1, 0.1, 0)
  156.         Part.SetPickMode
  157.         Part.ClearSelection2(True)
  158.         Part.SketchManager.InsertSketch(True)
  159.         Part.ShowNamedView2("*不等角視圖", 8)
  160.         Part.ClearSelection2(True)
  161.         Part.Extension.SelectByID2("草圖1", "SKETCH", 0, 0, 0, False, 4, Nothing, 0)

  162.         Part.FeatureManager.FeatureExtrusion2(True, False, True, 0, 0, 0.01, 0.01, False, False, False, False, 0.0174532925199433, 0.0174532925199433, False, False, False, False, True, True, True, 0, 0, False)
  163.         Part.SelectionManager.EnableContourSelection = False
  164.         Part.ClearSelection2(True)
  165.         '-----------------------------


  166.         'ByVal GenericHoleType As System.Integer              鑽孔類型列舉
  167.         '柱孔        swWzdGeneralHoleTypes_e.swWzdCounterBore
  168.         '錐孔        swWzdGeneralHoleTypes_e.swWzdCounterSink       
  169.         '鑽孔        swWzdGeneralHoleTypes_e.swWzdHole
  170.         '直螺絲孔    swWzdGeneralHoleTypes_e.swWzdTap
  171.         '斜螺絲孔    swWzdGeneralHoleTypes_e.swWzdPipeTap
  172.         '舊制孔      swWzdGeneralHoleTypes_e.swWzdLegacy
  173.         '柱孔狹槽    swWzdGeneralHoleTypes_e.swWzdCounterBoreSlot
  174.         '錐孔狹槽    swWzdGeneralHoleTypes_e.swWzdCounterSinkSlot
  175.         '狹槽        swWzdGeneralHoleTypes_e.swWzdHoleSlot

  176.         'ByVal StandardIndex As System.Integer                尺寸單位定義
  177.         'ISO(公制)   swWzdHoleStandards_e.swStandardISO

  178.         'ByVal FastenerTypeIndex As System.Integer            孔類型與單位配對(需與鑽孔類型配對)
  179.         '公制沉頭孔  swWzdHoleStandardFastenerTypes_e.swStandardISOSocketHeadCap

  180.         'ByVal SSize As System.String                         特徵樹顯示的孔類型
  181.         'Ex:SSize = "M4" -> M4 六角承窩頭蓋螺釘的柱孔

  182.         'ByVal EndType As System.Short                        特徵終止型態定義
  183.         '指定深度   swEndConditions_e.swEndCondBlind

  184.         'ByVal Diameter As System.Double                      鑽孔直徑
  185.         'ByVal Depth As System.Double                         鑽孔深度
  186.         'ByVal Length As System.Double                        長度(僅對狹槽類型孔有效)

  187.         'ByVal Value1 As System.Double                        Value值依據孔類型有所不同(-1代表忽略該項目)
  188.         'ByVal Value2 As System.Double                        
  189.         'ByVal Value3 As System.Double                        
  190.         'ByVal Value4 As System.Double                        
  191.         'ByVal Value5 As System.Double                        
  192.         'ByVal Value6 As System.Double                        
  193.         'ByVal Value7 As System.Double                        
  194.         'ByVal Value8 As System.Double                        
  195.         'ByVal Value9 As System.Double                        
  196.         'ByVal Value10 As System.Double                       
  197.         'ByVal Value11 As System.Double                       
  198.         'ByVal Value12 As System.Double                       

  199.         'ByVal ThreadClass As System.String                   線程數(僅適用於 ANSI Inch標準)

  200.         'ByVal RevDir As System.Boolean                       鑽孔方向
  201.         'True  -> 參考面法向量
  202.         'False -> 反向法向量

  203.         'ByVal FeatureScope As System.Boolean                 多實體成型
  204.         'True  -> 特徵建立於"所有"實體
  205.         'False -> 特徵建立於"所選"實體

  206.         '尚未使用下列功能
  207.         'ByVal AutoSelect As System.Boolean                  
  208.         'ByVal AssemblyFeatureScope As System.Boolean         
  209.         'ByVal AutoSelectComponents As System.Boolean         
  210.         'ByVal PropagateFeatureToParts As System.Booleam      

  211.         '鑽孔參數定義
  212.         Dim Counterbores As New Hole(swWzdGeneralHoleTypes_e.swWzdCounterBore, swWzdHoleStandards_e.swStandardISO,
  213.                                    swWzdHoleStandardFastenerTypes_e.swStandardISOSocketHeadCap, "M4",
  214.                                    swEndConditions_e.swEndCondThroughAll, 0.0045, -1, -1, 0.008, 0.0045,
  215.                                    -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, "", False, False, False, False, False, False)

  216.         Part.Extension.SelectByID2("", "FACE", 0, 0, 0, False, 0, Nothing, 0)

  217.         Part.FeatureManager.HoleWizard5(Counterbores.GenericHoleType, Counterbores.StandardIndex, Counterbores.FastenerTypeIndex,
  218.                                    Counterbores.SSize, Counterbores.EndType, Counterbores.Diameter, Counterbores.Depth, Counterbores.Length,
  219.                                    Counterbores.Value1, Counterbores.Value2, Counterbores.Value3, Counterbores.Value4, Counterbores.Value5,
  220.                                    Counterbores.Value6, Counterbores.Value7, Counterbores.Value8, Counterbores.Value9, Counterbores.Value10,
  221.                                    Counterbores.Value11, Counterbores.Value12, Counterbores.ThreadClass, Counterbores.RevDir, Counterbores.FeatureScope,
  222.                                    Counterbores.AutoSelect, Counterbores.AssemblyFeatureScope, Counterbores.AutoSelectComponents, Counterbores.PropagateFeatureToParts)

  223.     End Sub

  224.     Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
  225.         Dim swApp As SldWorks
  226.         Dim Part As ModelDoc2
  227.         Dim swFeatureMgr As FeatureManager
  228.         Dim swModelDocExt As ModelDocExtension

  229.         swApp = New SldWorks
  230.         swApp.Visible = True
  231.         Part = swApp.NewPart
  232.         swFeatureMgr = Part.FeatureManager
  233.         swModelDocExt = Part.Extension

  234.         '-----------------------------
  235.         Part.Extension.SelectByID2("前基準面", "PLANE", 0, 0, 0, False, 0, Nothing, 0)
  236.         Part.SketchManager.InsertSketch(True)
  237.         Part.ClearSelection2(True)
  238.         Part.SketchManager.CreateCenterRectangle(-0, 0, 0, 0.1, 0.1, 0)
  239.         Part.SetPickMode()
  240.         Part.ClearSelection2(True)
  241.         Part.SketchManager.InsertSketch(True)
  242.         Part.ShowNamedView2("*不等角視圖", 8)
  243.         Part.ClearSelection2(True)
  244.         Part.Extension.SelectByID2("草圖1", "SKETCH", 0, 0, 0, False, 4, Nothing, 0)
  245.         Part.FeatureManager.FeatureExtrusion2(True, False, True, 0, 0, 0.01, 0.01, False, False, False, False, 0.0174532925199433, 0.0174532925199433, False, False, False, False, True, True, True, 0, 0, False)
  246.         Part.SelectionManager.EnableContourSelection = False
  247.         Part.ClearSelection2(True)
  248.         '-----------------------------
  249.         Part.Extension.SelectByID2("", "FACE", 0, 0, 0, False, 0, Nothing, 0)

  250.         Dim PinHole As New Hole(swWzdGeneralHoleTypes_e.swWzdHole, swWzdHoleStandards_e.swStandardISO,
  251.                                        swWzdHoleStandardFastenerTypes_e.swStandardISODowelHole, "Ø6.0",
  252.                                        swEndConditions_e.swEndCondThroughAll, 0.006, 0.01, 1, 0, 0, 0, 0, 0, 0, -1, -1, -1, -1, -1, -1, "", False, True, True, True, True, False)

  253.         Part.FeatureManager.HoleWizard5(PinHole.GenericHoleType, PinHole.StandardIndex, PinHole.FastenerTypeIndex,
  254.                                 PinHole.SSize, PinHole.EndType, PinHole.Diameter, PinHole.Depth, PinHole.Length,
  255.                                 PinHole.Value1, PinHole.Value2, PinHole.Value3, PinHole.Value4, PinHole.Value5,
  256.                                 PinHole.Value6, PinHole.Value7, PinHole.Value8, PinHole.Value9, PinHole.Value10,
  257.                                 PinHole.Value11, PinHole.Value12, PinHole.ThreadClass, PinHole.RevDir, PinHole.FeatureScope,
  258.                                 PinHole.AutoSelect, PinHole.AssemblyFeatureScope, PinHole.AutoSelectComponents, PinHole.PropagateFeatureToParts)
  259.     End Sub

  260. End Class
複製代碼

  1. Public Class Hole

  2.     Public Sub New(ByVal GenericHoleType As Integer, ByVal StandardIndex As Integer, ByVal FastenerTypeIndex As Integer, ByVal SSize As String,
  3.                    ByVal EndType As Integer, ByVal Diameter As Double, ByVal Depth As Double, ByVal Length As Double,
  4.                    ByVal Value1 As Double, ByVal Value2 As Double, ByVal Value3 As Double, ByVal Value4 As Double,
  5.                    ByVal Value5 As Double, ByVal Value6 As Double, ByVal Value7 As Double, ByVal Value8 As Double,
  6.                    ByVal Value9 As Double, ByVal Value10 As Double, ByVal Value11 As Double, ByVal Value12 As Double,
  7.                    ByVal ThreadClass As String, ByVal RevDir As Boolean, ByVal FeatureScope As Boolean, ByVal AutoSelect As Boolean,
  8.                    ByVal AssemblyFeatureScope As Boolean, ByVal AutoSelectComponents As Boolean, ByVal PropagateFeatureToParts As Boolean)
  9.         Me.GenericHoleType = GenericHoleType
  10.         Me.StandardIndex = StandardIndex
  11.         Me.FastenerTypeIndex = FastenerTypeIndex
  12.         Me.SSize = SSize
  13.         Me.EndType = EndType
  14.         Me.Diameter = Diameter
  15.         Me.Depth = Depth
  16.         Me.Length = Length
  17.         Me.Value1 = Value1
  18.         Me.Value2 = Value2
  19.         Me.Value3 = Value3
  20.         Me.Value4 = Value4
  21.         Me.Value5 = Value5
  22.         Me.Value6 = Value6
  23.         Me.Value7 = Value7
  24.         Me.Value8 = Value8
  25.         Me.Value9 = Value9
  26.         Me.Value10 = Value10
  27.         Me.Value11 = Value11
  28.         Me.Value12 = Value12
  29.         Me.ThreadClass = ThreadClass
  30.         Me.RevDir = RevDir
  31.         Me.FeatureScope = FeatureScope
  32.         Me.AutoSelect = AutoSelect
  33.         Me.AssemblyFeatureScope = AssemblyFeatureScope
  34.         Me.AutoSelectComponents = AutoSelectComponents
  35.         Me.PropagateFeatureToParts = PropagateFeatureToParts
  36.     End Sub

  37.     Public GenericHoleType As Integer
  38.     '柱孔        swWzdGeneralHoleTypes_e.swWzdCounterBore
  39.     '錐孔        swWzdGeneralHoleTypes_e.swWzdCounterSink       
  40.     '鑽孔        swWzdGeneralHoleTypes_e.swWzdHole
  41.     '直螺絲孔    swWzdGeneralHoleTypes_e.swWzdTap
  42.     '斜螺絲孔    swWzdGeneralHoleTypes_e.swWzdPipeTap
  43.     '舊制孔      swWzdGeneralHoleTypes_e.swWzdLegacy
  44.     '柱孔狹槽    swWzdGeneralHoleTypes_e.swWzdCounterBoreSlot
  45.     '錐孔狹槽    swWzdGeneralHoleTypes_e.swWzdCounterSinkSlot
  46.     '狹槽        swWzdGeneralHoleTypes_e.swWzdHoleSlot

  47.     Public StandardIndex As Integer
  48.     'ISO(公制)   swWzdHoleStandards_e.swStandardISO

  49.     Public FastenerTypeIndex As Integer
  50.     '公制沉頭孔  swWzdHoleStandardFastenerTypes_e.swStandardISOSocketHeadCap
  51.     '公制定位孔  swWzdHoleStandardFastenerTypes_e.swStandardISODowelHole

  52.     Public SSize As String
  53.     '特徵描述

  54.     Public EndType As Integer
  55.     '特徵終止型態

  56.     Public Diameter As Double
  57.     '鑽孔直徑

  58.     Public Depth As Double
  59.     '鑽孔深度

  60.     Public Length As Double
  61.     '狹槽長度

  62.     Public Value1 As Double
  63.     Public Value2 As Double
  64.     Public Value3 As Double
  65.     Public Value4 As Double
  66.     Public Value5 As Double
  67.     Public Value6 As Double
  68.     Public Value7 As Double
  69.     Public Value8 As Double
  70.     Public Value9 As Double
  71.     Public Value10 As Double
  72.     Public Value11 As Double
  73.     Public Value12 As Double
  74.     Public ThreadClass As String
  75.     Public RevDir As Boolean
  76.     Public FeatureScope As Boolean
  77.     Public AutoSelect As Boolean
  78.     Public AssemblyFeatureScope As Boolean
  79.     Public AutoSelectComponents As Boolean
  80.     Public PropagateFeatureToParts As Boolean

  81. End Class
複製代碼


發表於 2018/5/21 11:24:50 | 顯示全部樓層
剛剛測試出來了,成功把用VB.NET寫的視窗程式,在C#裡呼叫出來 成功執行了^^
您需要登錄後才可以回帖 登錄 | 註冊

本版積分規則

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

GMT+8, 2024/4/27 08:40 , Processed in 0.135178 second(s), 19 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2023 Discuz! Team.

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