Code to Convert
CADForums.net Forum Index CADForums.net
Discussion of AutoCAD and other CAD software.
 
 FAQFAQ   MemberlistMemberlist     RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 
 
Google
 
Web cadforums.net
Code to Convert

 
Post new topic   Reply to topic    CADForums.net Forum Index -> SolidWorks
Author Message
inthepickle
Guest





Posted: Thu Nov 10, 2005 5:10 pm    Post subject: Code to Convert Reply with quote

I have written this macro, and I have gotten a little help from this
forum, and I need some more. If macro is not written very well, don't
be surprised. Like I said, I am no expert.

The pre-requisite to this macro is that your part is modeled, and 3
reference dimension are put on the part. The problem is that I have a
few variables that I need written to the custom properties of
SolidWorks. I can write them as a decimal, but I don't know how to
write them as a fraction that rounds to the 16th.

I am posting all of my code below. Can someone please help.

=================================================================
Public Thickness As String
Public Width As String
Public Length As String
Public RW As Double
Sub Main()

Dim swApp As Object
Dim Part As Object
Set swApp = Application.SldWorks
Set Part = swApp.ActiveDoc

FlatPattern

SelectDims

ChgDimsToFractions

WriteEquation

HideAnnotations

DeleteCustomProps

GetDimValues

WriteCustomProps

Formed_Iso_Fit

Part.ForceRebuild

End Sub
Private Sub FlatPattern()

Dim swApp As Object
Dim Part As Object
Dim boolstatus As Boolean
Dim longstatus As Long, longwarnings As Long
Dim FeatureData As Object
Dim Feature As Object
Dim Component As Object

Set swApp = Application.SldWorks
Set Part = swApp.ActiveDoc

boolstatus = Part.Extension.SelectByID2("Flat-Pattern1",
"BODYFEATURE", 0, 0, 0, False, 0, Nothing, 0)
Part.ClearSelection2 True
Part.SetBendState 2
boolstatus = Part.EditRebuild3

End Sub
Private Sub SelectDims()

Dim swApp As Object
Dim Part As Object
Dim boolstatus As Boolean

Set swApp = Application.SldWorks
Set Part = swApp.ActiveDoc

boolstatus = Part.Extension.SelectByID2("RD3@Annotations@DS
TEST.moPart_c", "DIMENSION", -0.004780741706299, -0.05064288656189,
0.1173281560361, False, 0, Nothing, 0)
boolstatus = Part.Extension.SelectByID2("RD2@Annotations@DS
TEST.moPart_c", "DIMENSION", 0.09844823636707, -0.07157967685629,
0.03503256571634, True, 0, Nothing, 0)
boolstatus = Part.Extension.SelectByID2("RD1@Annotations@DS
TEST.moPart_c", "DIMENSION", 0.07994366233927, -0.06914516635694,
0.05110302488907, True, 0, Nothing, 0)

End Sub
Private Sub ChgDimsToFractions()

Dim swApp As Object
Dim swModel As Object
Dim swSelMgr As Object
Dim selCount As Integer
Dim selType As Integer
Dim CurrentSelDimension As Object
Dim i As Integer

Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc

Set swSelMgr = swModel.SelectionManager()
selCount = swSelMgr.GetSelectedObjectCount()

If (selCount > 0) Then
For i = 1 To selCount
selType = swSelMgr.GetSelectedObjectType2(i)
If (selType = swSelDIMENSIONS) Then
Set CurrentSelDimension = swSelMgr.GetSelectedObject3(i)
CurrentSelDimension.SetDual True
CurrentSelDimension.SetUnits False, swINCHES, swFRACTION,
16, True
End If
Next
End If

End Sub
Private Sub WriteEquation()

Dim swApp As Object
Dim Part As Object

Set swApp = Application.SldWorks
Set Part = swApp.ActiveDoc

Part.ClearSelection2 True

Part.DeleteAllRelations
Part.AddRelation """D1@RectWeight"" = ""RD1@Annotations"" *
""RD2@Annotations"" * ""RD3@Annotations"" * .2836"

Part.ForceRebuild

End Sub
Private Sub HideAnnotations()

Dim swApp As Object
Dim Part As Object
Dim boolstatus As Boolean
Dim longstatus As Long, longwarnings As Long
Dim FeatureData As Object
Dim Feature As Object
Dim Component As Object

Set swApp = Application.SldWorks
Set Part = swApp.ActiveDoc

boolstatus = Part.SetUserPreferenceToggle(197, False)

End Sub
Private Sub GetDimValues()

Dim swApp As Object
Dim Part As Object
Dim boolstatus As Boolean
Const Density = 0.2836

Set swApp = Application.SldWorks
Set Part = swApp.ActiveDoc

Thickness = Round(Part.Parameter("RD1@Annotations").SystemValue /
0.0254, 3)
Width = Round(Part.Parameter("RD2@Annotations").SystemValue /
0.0254, 3)
Length = Round(Part.Parameter("RD3@Annotations").SystemValue /
0.0254, 3)
RW = Round(Thickness * Width * Length * Density, 3)

End Sub
Private Sub DeleteCustomProps()

Dim ModelDoc2 As Object

Set swApp = CreateObject("SldWorks.Application")
Set ModelDoc2 = swApp.ActiveDoc

retval = ModelDoc2.DeleteCustomInfo2("", "CutSize")
retval = ModelDoc2.DeleteCustomInfo2("", "RectangularWeight")
retval = ModelDoc2.DeleteCustomInfo2("", "SWDescription")
retval = ModelDoc2.DeleteCustomInfo2("", "GroupType")

End Sub
Private Sub WriteCustomProps()

Dim ModelDoc2 As Object

Set swApp = CreateObject("SldWorks.Application")
Set ModelDoc2 = swApp.ActiveDoc

retval = ModelDoc2.AddCustomInfo3("", "CutSize", 30, Width & " x "
& Length)
retval = ModelDoc2.AddCustomInfo3("", "RectangularWeight", 30, RW)
retval = ModelDoc2.AddCustomInfo3("", "SWDescription", 30, "PLATE,
" & Thickness & " x " & Width & " x " & Length & ", ""SW-Material@DS
TEST.SLDPRT""")
retval = ModelDoc2.AddCustomInfo3("", "GroupType", 30, Thickness)

'MsgBox Thickness
'MsgBox Width
'MsgBox Length
'MsgBox RW

End Sub
Private Sub Formed_Iso_Fit()

Dim swApp As Object
Dim Part As Object
Dim boolstatus As Boolean
Dim longstatus As Long, longwarnings As Long
Dim FeatureData As Object
Dim Feature As Object
Dim Component As Object

Set swApp = Application.SldWorks
Set Part = swApp.ActiveDoc

boolstatus = Part.Extension.SelectByID2("Flat-Pattern1",
"BODYFEATURE", 0, 0, 0, False, 0, Nothing, 0)
Part.ClearSelection2 True
Part.SetBendState 3
boolstatus = Part.EditRebuild3

Part.ShowNamedView2 "*Isometric", 7

Part.ViewZoomtofit2

End Sub

Back to top
Mark Reimer
Guest





Posted: Mon Nov 14, 2005 5:10 pm    Post subject: Re: Code to Convert Reply with quote

I pulled this function from one of my programs. There may be simpler
methods out there, but I know it works. You can specify any denominator
value and if the number you pass to the function is close enough to the
fractional value it send the fraction, otherwise it leaves it alone.
You can specify a tolerance large enough such that it will always
return a fraction if you want to.

Function DimensionalFraction(DecimalValue As Double, MaxDenominator As
Double, Tolerance As Double) As String
'converts Decimal Value to a mixed fraction text in a dimesional form
using 2,4,8,16,32 in the denominator
Dim withintol As Boolean
Dim toler As Double
Dim num As Double 'numerator
Dim denom As Double 'denominator


denom = 2 ' start with denominator = 2 for halves then double it
for 4ths ,8ths etc.
withintol = False

Do
' num = Application.WorksheetFunction.RoundUp(DecimalValue *
denom, 0) ' Use this function in Excel.
num = Round(DecimalValue * denom, 0) 'Multiply decimal value by
the denominator and round to nearest int
If num < (DecimalValue * denom) Then 'If it rounded down then
add 1 to force Round Up to nearest integer
num = num + 1
End If
'if the decimal value times the denominator is greater than the
rounded up value plus the
'tolerance * denom, then it is within tolerance
If ((DecimalValue * denom) >= (num - (Tolerance * denom))) Then
withintol = True
Exit Do
End If

num = Round(DecimalValue * denom, 0) 'Round Down to nearest
integer
If num > (DecimalValue * denom) Then
num = num - 1
End If
If ((DecimalValue * denom) <= (num + (Tolerance * denom))) Then
withintol = True
Exit Do
End If

denom = denom * 2

Loop While denom <= MaxDenominator

If withintol = True Then
If ((num Mod denom) = 0) Then ' Check if no fractions to be
displayed (dia is a whole number approx)
DimensionalFraction = CStr(num / denom)
ElseIf ((num / denom) > 1) Then 'Check if dia is more than 1 if
it was equal to one then num mod denom would be zero
DimensionalFraction = CStr(Int(num / denom)) + "-" +
CStr(num - Int(num / denom) * denom) + "/" + CStr(denom)
ElseIf ((num / denom) < 1) Then ' Check if dia is less than 1
so no whole numbers
DimensionalFraction = CStr(num) + "/" + CStr(denom)
Else
'there is no longer anything else
End If
Else ' give up and return the original DecimalValueimal value - not
close enough to a dimensional fraction
DimensionalFraction = DecimalValue
End If

End Function


--Mark


inthepickle wrote:
Quote:
I have written this macro, and I have gotten a little help from this
forum, and I need some more. If macro is not written very well, don't
be surprised. Like I said, I am no expert.

The pre-requisite to this macro is that your part is modeled, and 3
reference dimension are put on the part. The problem is that I have a
few variables that I need written to the custom properties of
SolidWorks. I can write them as a decimal, but I don't know how to
write them as a fraction that rounds to the 16th.

I am posting all of my code below. Can someone please help.

=================================================================
Public Thickness As String
Public Width As String
Public Length As String
Public RW As Double
Sub Main()

Dim swApp As Object
Dim Part As Object
Set swApp = Application.SldWorks
Set Part = swApp.ActiveDoc

FlatPattern

SelectDims

ChgDimsToFractions

WriteEquation

HideAnnotations

DeleteCustomProps

GetDimValues

WriteCustomProps

Formed_Iso_Fit

Part.ForceRebuild

End Sub
Private Sub FlatPattern()

Dim swApp As Object
Dim Part As Object
Dim boolstatus As Boolean
Dim longstatus As Long, longwarnings As Long
Dim FeatureData As Object
Dim Feature As Object
Dim Component As Object

Set swApp = Application.SldWorks
Set Part = swApp.ActiveDoc

boolstatus = Part.Extension.SelectByID2("Flat-Pattern1",
"BODYFEATURE", 0, 0, 0, False, 0, Nothing, 0)
Part.ClearSelection2 True
Part.SetBendState 2
boolstatus = Part.EditRebuild3

End Sub
Private Sub SelectDims()

Dim swApp As Object
Dim Part As Object
Dim boolstatus As Boolean

Set swApp = Application.SldWorks
Set Part = swApp.ActiveDoc

boolstatus = Part.Extension.SelectByID2("RD3@Annotations@DS
TEST.moPart_c", "DIMENSION", -0.004780741706299, -0.05064288656189,
0.1173281560361, False, 0, Nothing, 0)
boolstatus = Part.Extension.SelectByID2("RD2@Annotations@DS
TEST.moPart_c", "DIMENSION", 0.09844823636707, -0.07157967685629,
0.03503256571634, True, 0, Nothing, 0)
boolstatus = Part.Extension.SelectByID2("RD1@Annotations@DS
TEST.moPart_c", "DIMENSION", 0.07994366233927, -0.06914516635694,
0.05110302488907, True, 0, Nothing, 0)

End Sub
Private Sub ChgDimsToFractions()

Dim swApp As Object
Dim swModel As Object
Dim swSelMgr As Object
Dim selCount As Integer
Dim selType As Integer
Dim CurrentSelDimension As Object
Dim i As Integer

Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc

Set swSelMgr = swModel.SelectionManager()
selCount = swSelMgr.GetSelectedObjectCount()

If (selCount > 0) Then
For i = 1 To selCount
selType = swSelMgr.GetSelectedObjectType2(i)
If (selType = swSelDIMENSIONS) Then
Set CurrentSelDimension = swSelMgr.GetSelectedObject3(i)
CurrentSelDimension.SetDual True
CurrentSelDimension.SetUnits False, swINCHES, swFRACTION,
16, True
End If
Next
End If

End Sub
Private Sub WriteEquation()

Dim swApp As Object
Dim Part As Object

Set swApp = Application.SldWorks
Set Part = swApp.ActiveDoc

Part.ClearSelection2 True

Part.DeleteAllRelations
Part.AddRelation """D1@RectWeight"" = ""RD1@Annotations"" *
""RD2@Annotations"" * ""RD3@Annotations"" * .2836"

Part.ForceRebuild

End Sub
Private Sub HideAnnotations()

Dim swApp As Object
Dim Part As Object
Dim boolstatus As Boolean
Dim longstatus As Long, longwarnings As Long
Dim FeatureData As Object
Dim Feature As Object
Dim Component As Object

Set swApp = Application.SldWorks
Set Part = swApp.ActiveDoc

boolstatus = Part.SetUserPreferenceToggle(197, False)

End Sub
Private Sub GetDimValues()

Dim swApp As Object
Dim Part As Object
Dim boolstatus As Boolean
Const Density = 0.2836

Set swApp = Application.SldWorks
Set Part = swApp.ActiveDoc

Thickness = Round(Part.Parameter("RD1@Annotations").SystemValue /
0.0254, 3)
Width = Round(Part.Parameter("RD2@Annotations").SystemValue /
0.0254, 3)
Length = Round(Part.Parameter("RD3@Annotations").SystemValue /
0.0254, 3)
RW = Round(Thickness * Width * Length * Density, 3)

End Sub
Private Sub DeleteCustomProps()

Dim ModelDoc2 As Object

Set swApp = CreateObject("SldWorks.Application")
Set ModelDoc2 = swApp.ActiveDoc

retval = ModelDoc2.DeleteCustomInfo2("", "CutSize")
retval = ModelDoc2.DeleteCustomInfo2("", "RectangularWeight")
retval = ModelDoc2.DeleteCustomInfo2("", "SWDescription")
retval = ModelDoc2.DeleteCustomInfo2("", "GroupType")

End Sub
Private Sub WriteCustomProps()

Dim ModelDoc2 As Object

Set swApp = CreateObject("SldWorks.Application")
Set ModelDoc2 = swApp.ActiveDoc

retval = ModelDoc2.AddCustomInfo3("", "CutSize", 30, Width & " x "
& Length)
retval = ModelDoc2.AddCustomInfo3("", "RectangularWeight", 30, RW)
retval = ModelDoc2.AddCustomInfo3("", "SWDescription", 30, "PLATE,
" & Thickness & " x " & Width & " x " & Length & ", ""SW-Material@DS
TEST.SLDPRT""")
retval = ModelDoc2.AddCustomInfo3("", "GroupType", 30, Thickness)

'MsgBox Thickness
'MsgBox Width
'MsgBox Length
'MsgBox RW

End Sub
Private Sub Formed_Iso_Fit()

Dim swApp As Object
Dim Part As Object
Dim boolstatus As Boolean
Dim longstatus As Long, longwarnings As Long
Dim FeatureData As Object
Dim Feature As Object
Dim Component As Object

Set swApp = Application.SldWorks
Set Part = swApp.ActiveDoc

boolstatus = Part.Extension.SelectByID2("Flat-Pattern1",
"BODYFEATURE", 0, 0, 0, False, 0, Nothing, 0)
Part.ClearSelection2 True
Part.SetBendState 3
boolstatus = Part.EditRebuild3

Part.ShowNamedView2 "*Isometric", 7

Part.ViewZoomtofit2

End Sub
Back to top
 
Post new topic   Reply to topic    CADForums.net Forum Index -> SolidWorks All times are GMT
Page 1 of 1

 
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum




Windows Server DSP VoIP Electronics New Topics
Contact Us
Powered by phpBB