A_Reed Posted November 20, 2013 Share Posted November 20, 2013 (edited) Hello All, I am writing this macro to help handle our drawing releases throughout the company I work for. We have issues with Solidworks assemblies (and the occasional drawing) not being the most stable things in the world so I have "pieced" this together to save clean copies of our work at revision releases in .pdf format (I'm no programmer, last time I used VB was 5 years ago in intro to engineering). Feel free to review and suggest ways to clean up the code but the main reason I am here is I wish to automate the process of pulling the revision letter from the part. Currently I have the code set up to prompt the user to enter the current Revision level (see line in Red). I would like to rewrite this line to pull from our property sheet for the part/assembly that is referenced in the open drawing. Each part we make has a Property sheet we pull info from to fill out the title block on our drawings, this typically requires a $PRPSHEET call in the drawing template to pull the info in automatically. I would really like to know how I can reference this information from my VB code and dimension it to a string variable to be used later in the code. Does anyone know how to execute this? Imports SolidWorks.Interop.sldworks Imports SolidWorks.Interop.swconst Imports System.Runtime.InteropServices Imports System Imports System.IO Partial Class SolidWorksMacro Public Sub main() Dim swDoc As ModelDoc2 = Nothing Dim longstatus As Integer = 0 Dim CurrentFilePath As String = "" Dim CurrentFileName As String = "" Dim ParentFilePath As String = "" Dim NewFileName As String = "" Dim ReleaseFilePath As String = "" Dim RevFilePath As String = "" Dim RevFileName As String = "" Dim RevLevelAdd As String = "" Dim RevLevel As String = "" swDoc = CType(swApp.ActiveDoc, ModelDoc2) [color="red"]RevLevel = InputBox("Please enter the new revision level", "Revision Entry", "A", , )[/color] CurrentFilePath = swDoc.GetPathName CurrentFileName = IO.Path.GetFileNameWithoutExtension(CurrentFilePath) ParentFilePath = IO.Path.GetDirectoryName(CurrentFilePath) RevLevelAdd = CurrentFileName & "_Rev " & RevLevel My.Computer.FileSystem.CreateDirectory(ParentFilePath & "\Revision Archive\") RevFileName = IO.Path.ChangeExtension(RevLevelAdd, ".pdf") RevFilePath = ParentFilePath & "\Revision Archive\" If File.Exists(RevFilePath & RevFileName) Then MsgBox("Revision Level Already Exists - Cannot Overwrite File", MsgBoxStyle.Information) Exit Sub Else longstatus = swDoc.SaveAs3(RevFilePath & RevFileName, 0, 0) MsgBox("Saved Drawing as: " & RevFilePath & RevFileName, MsgBoxStyle.Information) CurrentFilePath = swDoc.GetPathName CurrentFileName = IO.Path.GetFileName(CurrentFilePath) ParentFilePath = IO.Path.GetDirectoryName(CurrentFilePath) My.Computer.FileSystem.CreateDirectory(ParentFilePath & "\Release\") NewFileName = IO.Path.ChangeExtension(CurrentFileName, ".pdf") ReleaseFilePath = ParentFilePath & "\Release\" longstatus = swDoc.SaveAs3(ReleaseFilePath & NewFileName, 0, 0) MsgBox("Saved Drawing as: " & ReleaseFilePath & NewFileName, MsgBoxStyle.Information) MsgBox("All Done, Have A Nice Day!!", MsgBoxStyle.Information) End If End Sub Public swApp As SldWorks End Class Edited November 20, 2013 by A_Reed Quote Link to comment Share on other sites More sharing options...
A_Reed Posted November 22, 2013 Author Share Posted November 22, 2013 Okay so I have kind of figured out how to draw information from the property tables of a part with the CustomPropertyManager and swCustProp.Get4 now I have to figure out how to reference the part in the drawing and not the drawing itself. Right now all I get is the property table available from within the print, there has to be a way to redirect where the macro is looking for the information. Or alternately I think I can write a sub with a public dim to open the part/assembly file, reference the "Revision" property, store it in my variable, close the part and exit the sub to continue on with the main. Can anyone provide tips or guidance or am I just talking to myself ?? Quote Link to comment Share on other sites More sharing options...
stevsmith Posted November 25, 2013 Share Posted November 25, 2013 I would consider posting this to the api section of the Solidworks forums. https://forum.solidworks.com/community/solidworks/api I have a little experience with coding, but unfortunately not enough to do what you require. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.