Có vẻ như bạn quan tâm đến một lát phẳng của mô hình CAD của bạn. Mặc dù bạn có thể sử dụng tệp 3D và tự cắt nó có vẻ hơi quá mức vì ứng dụng CAD hoàn toàn có khả năng thực hiện các lát cắt cho bạn.
nhanh chóng và hèn hạ
Ok, vì vậy mỗi CAD có chế độ vẽ 2D, bạn có thể lưu bản vẽ đó ra dxf
hoặc pdf
cả hai đều dễ phân tích. Nếu bạn không tìm thấy một công cụ tốt cho việc này, thì việc chuyển pdf
thành svg
có thể dễ dàng hơn để phân tích cú pháp. Cách tiếp cận này cũng có thể được thực hiện nhanh chóng và bẩn thỉu bằng cách tận dụng các công cụ như Inkscape hoặc Illustrator. Hãy làm một ví dụ vì nó dễ làm:
Hình 1 : Bản vẽ xuất nhanh và bẩn dưới dạng pdf
/ svg
sau đó cô lập và đọc các điểm từ tệp đó Tôi đã sử dụng phiên bản sửa đổi công cụ này để kết xuất tọa độ từ đó pdf
. Bạn sẽ có thể làm điều đó trong Perl một cách dễ dàng. dữ liệu có sẵn ở đây
Phương pháp đúng
Có thể truy cập cả SolidWorks và Inventor qua cầu COM để bạn có thể truy cập mô hình dữ liệu ứng dụng CAD trực tiếp từ mã Perl của mình. Điều này có một số lợi ích nhưng chủ yếu không cần phân tích các tệp trung gian. Bạn có thể chọn các cạnh có liên quan và chỉ cần di chuyển chúng trực tiếp từ CAD. Bây giờ tôi chỉ có quyền truy cập vào SolidWorks tại nơi làm việc nhưng cách tiếp cận tương tự hoạt động trong nhà phát minh như tôi đã làm.
Tôi đã có thêm thời gian tại nơi làm việc để làm một số VBA
mã nhanh cho SolidWorks. Mã này lấy tất cả các dòng của một bản phác thảo kín, sắp xếp chúng thành đa giác (với thuật toán N ^ 2 ngây thơ) và in chúng trong VBA
bảng điều khiển gỡ lỗi.
Option Explicit
Sub main()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swPart As SldWorks.PartDoc
Dim swSelMgr As SldWorks.SelectionMgr
Dim swFeat As SldWorks.Feature
Dim swSketch As SldWorks.Sketch
Dim numLines As Long
Dim vLines As Variant
Dim dict As New Collection
Dim i As Variant
Set swApp = CreateObject("SldWorks.Application")
Set swModel = swApp.ActiveDoc
Set swPart = swModel
Set swSelMgr = swModel.SelectionManager
Set swFeat = swSelMgr.GetSelectedObject5(1)
Set swSketch = swFeat.GetSpecificFeature2
numLines = swSketch.GetLineCount2(1) 'Exclude crosshatch lines
vLines = swSketch.GetLines2(1) 'Exclude crosshatch lines
Dim startP, endP, line As Variant
For i = 1 To numLines - 1
line = Array(Array(vLines(12 * i + 6) * 1000, _
vLines(12 * i + 7) * 1000), _
Array(vLines(12 * i + 9) * 1000, _
vLines(12 * i + 10) * 1000))
dict.Add (line)
Next i
startP = Array(vLines(6) * 1000, _
vLines(7) * 1000)
endP = Array(vLines(9) * 1000, _
vLines(10) * 1000)
pp startP
pp endP
For i = 1 To dict.Count - 1
endP = NextPoint(dict, endP)
pp endP
Next i
End Sub
Sub pp(point As Variant)
Debug.Print " " & Str(point(0)) & ", " & Str(point(1))
End Sub
Function NextPoint(dict As Collection, point As Variant) As Variant
Dim i As Variant
For i = 1 To dict.Count
Dim data, startRP, endRP As Variant
data = dict.Item(i)
startRP = data(0)
endRP = data(1)
If endRP(0) = point(0) And endRP(1) = point(1) Then
dict.Remove (i)
NextPoint = startRP
Exit Function
End If
If startRP(0) = point(0) And startRP(1) = point(1) Then
dict.Remove (i)
NextPoint = endRP
Exit Function
End If
Next i
End Function
Vì vba đang gọi COM, bạn nên sử dụng mã ca, bạn có thể sử dụng gần như bất kỳ ngôn ngữ nào, ví dụ như perl thực hiện Win32 :: OLE có thể thực hiện công việc.
Hình 2 : Phần ví dụ với kết quả phác thảo một vòng đơn giản trong kết quả đầu ra này
Phần kết
Nếu bạn thực sự muốn xuất dữ liệu đa giác 3D và thực hiện cắt lát theo cách thủ công thì tôi sẽ xuất OBJ hoặc STL. Nhưng điều này sẽ nằm trong danh sách các cách tiếp cận của tôi chủ yếu vì tất cả các cách tiếp cận khác đều đơn giản hơn.