Partial File Path
Partial File Path
On our drawing templates we have a file path shown (Using the custom properties SW-Folder Name). So recently we moved to a OneDrive setup for our files and the path added extra folder levels, so now it goes all they way across the template. Is there a way to parse out only part of the path to show?
For example our old file path was
X:\Data\Job Type\1000-2000\J1000\Filename
Now it looks like this
D:\OneDrive - Company Name\Documents - Communication site\Data\Job Type\1000-2000\J1000\Filename
Basically I would like to show just Data\Job Type\1000-2000\J1000\Filename on the boarder, is that possible to do?
For example our old file path was
X:\Data\Job Type\1000-2000\J1000\Filename
Now it looks like this
D:\OneDrive - Company Name\Documents - Communication site\Data\Job Type\1000-2000\J1000\Filename
Basically I would like to show just Data\Job Type\1000-2000\J1000\Filename on the boarder, is that possible to do?
A macro feature can be used to do this. You can even add the macro feature to your drawing template so that any future drawings made with the template will have the macro feature. Every rebuild the macro feature will check the current drawing path, trim off the part you don't want and store the result in a custom property that can be linked to a note on your sheet format.
The macro also listens for file save events so that it can update the property. The macro consists of one regular module and one class module (for the event handling):
Here is the Main module:
Here is the class module:
The macro feature is set up so that it stores the macro code in the file itself. The two constants (CUSTOM_PROPERTY_NAME and START_OF_TRIMMED_PATH) at the start of the module control the name of the custom property and the text to search for in the file path. The START_OF_TRIMMED_PATH constant should be set to the text that always represents the start of the string before which everything should be dropped. As written, it is looking for "Desktop" and storing in a custom property named "Path", which I used for testing purposes. So, 'C:\Users\jsculley\Desktop\SOLIDWORKS Files\somedrawing.slddrw" would be trimmed to "Desktop\SOLIDWORKS Files\somedrawing.slddrw" and stored in the Path custom property.
This is sample code only, not necessarily suitable for production.
Go to full postThe macro also listens for file save events so that it can update the property. The macro consists of one regular module and one class module (for the event handling):
Here is the Main module:
Code: Select all
Dim swApp As SldWorks.SldWorks
Dim mDoc As ModelDoc2
Dim fMgr As FeatureManager
Dim macroMethods(8) As String
Dim macroPath As String
Dim f As feature
Dim handler As New EventHandler
Const CUSTOM_PROPERTY_NAME = "Path"
Const START_OF_TRIMMED_PATH = "Desktop"
Option Explicit
Sub Main()
Set swApp = Application.SldWorks
Set mDoc = swApp.ActiveDoc
Set fMgr = mDoc.FeatureManager
macroPath = swApp.GetCurrentMacroPathName
macroMethods(0) = macroPath: macroMethods(1) = "Main": macroMethods(2) = "swmRebuild"
macroMethods(3) = macroPath: macroMethods(4) = "Main": macroMethods(5) = "swmEdit"
macroMethods(6) = macroPath: macroMethods(7) = "Main": macroMethods(8) = "swmSecurity"
Dim dimTypes As Variant
Dim dimValue As Variant
Dim vEditBodies As Variant
fMgr.InsertMacroFeature3 "StorePath", "", (macroMethods), Empty, Empty, Empty, dimTypes, dimValue, vEditBodies, Empty, swMacroFeatureEmbedMacroFile
End Sub
Function swmRebuild(vSW As Variant, vMDoc As Variant, feature As Variant) As Boolean
Dim mDoc As ModelDoc2
Set mDoc = vMDoc
handler.init mDoc
If Not hasProperty(mDoc) Then
createProperty mDoc
End If
updatePath mDoc
swmRebuild = True
End Function
Function swmEdit(swApp As Variant, mDoc As Variant, feature As Variant) As Boolean
swmEdit = True
End Function
Function swmSecurity(vSW As Variant, vDoc As Variant, vFeat As Variant) As Boolean
swmSecurity = SwConst.swMacroFeatureSecurityOptions_e.swMacroFeatureSecurityByDefault
End Function
Sub updatePath(mDoc As ModelDoc2)
Dim path As String
path = mDoc.GetPathName
If path <> "" Then
Dim mExt As ModelDocExtension
Set mExt = mDoc.Extension
Dim cMgr As CustomPropertyManager
Set cMgr = mExt.CustomPropertyManager("")
path = Mid(path, InStr(1, path, START_OF_TRIMMED_PATH , vbTextCompare))
cMgr.Set2 CUSTOM_PROPERTY_NAME, path
End If
End Sub
Sub createProperty(mDoc As ModelDoc2)
Dim mExt As ModelDocExtension
Set mExt = mDoc.Extension
Dim cMgr As CustomPropertyManager
Set cMgr = mExt.CustomPropertyManager("")
cMgr.Add3 CUSTOM_PROPERTY_NAME, swCustomInfoType_e.swCustomInfoText, "", swCustomPropertyOnlyIfNew
End Sub
Function hasProperty(mDoc As ModelDoc2) As Boolean
Dim mExt As ModelDocExtension
Set mExt = mDoc.Extension
Dim cMgr As CustomPropertyManager
Set cMgr = mExt.CustomPropertyManager("")
Dim val As String
Dim resolvedVal As String
Dim wasResolved As Boolean
If cMgr.Get5(CUSTOM_PROPERTY_NAME, False, val, resolvedVal, wasResolved) = swCustomInfoGetResult_NotPresent Then
hasProperty = False
Else
hasProperty = True
End If
End Function
Code: Select all
Option Explicit
Public WithEvents swDrawing As SldWorks.DrawingDoc
Private Function swDrawing_FileSaveAsNotify2(ByVal filename As String) As Long
updatePath swDrawing
swDrawing_FileSaveAsNotify2 = 0
End Function
Public Function init(ByRef aDoc As ModelDoc2)
Set swDrawing = aDoc
End Function
This is sample code only, not necessarily suitable for production.
Re: Partial File Path
What SW version are you using?
SW21 allow equation to be used in custom property which might fit your need (I dont have 21 at the moment so i am not sure whether will it work)
SW21 allow equation to be used in custom property which might fit your need (I dont have 21 at the moment so i am not sure whether will it work)
Far too many items in the world are designed, constructed and foisted upon us with no understanding-or even care-for how we will use them.
-
- Posts: 221
- Joined: Tue Mar 09, 2021 7:25 am
- Location: Netherlands
- x 184
- x 229
Re: Partial File Path
@TTevolve just curious, what is the purpose to have the path shown on the drawing? Do you use it to open the part/assembly that is on the drawing?
Re: Partial File Path
The only way I can think of is via macro.
Deepak Gupta
SOLIDWORKS Consultant/Blogger
SOLIDWORKS Consultant/Blogger
Re: Partial File Path
You can map a drive to your onedrive folder so that the path is much shorter. This is what I did, before we adopted PDM.
https://www.computerworld.com/article/2 ... ndows.html
(I love the fact that the OS that will tell you the path is too long burns up 40+ characters creating absurdly long and unnecessary paths.)
https://www.computerworld.com/article/2 ... ndows.html
(I love the fact that the OS that will tell you the path is too long burns up 40+ characters creating absurdly long and unnecessary paths.)
-
I may not have gone where I intended to go, but I think I have ended up where I needed to be. -Douglas Adams
I may not have gone where I intended to go, but I think I have ended up where I needed to be. -Douglas Adams
- Glenn Schroeder
- Posts: 1522
- Joined: Mon Mar 08, 2021 11:43 am
- Location: southeast Texas
- x 1759
- x 2132
Re: Partial File Path
I can't answer for @TTevolve, but I also have the file path in the margin of my Drawings. It's helpful when I have a pdf from several years ago in front of me, but not the SW files, and I want to find them.Frank_Oostendorp wrote: ↑Thu Apr 14, 2022 5:55 am @TTevolve just curious, what is the purpose to have the path shown on the drawing? Do you use it to open the part/assembly that is on the drawing?
"On the days when I keep my gratitude higher than my expectations, well, I have really good days."
Ray Wylie Hubbard in his song "Mother Blues"
Ray Wylie Hubbard in his song "Mother Blues"
-
- Posts: 221
- Joined: Tue Mar 09, 2021 7:25 am
- Location: Netherlands
- x 184
- x 229
Re: Partial File Path
Right. We use unique numbers for each part/assembly, drawings have the same file name as the items shown on it. So a search in file explorer will lead us to the documents. But we purchase items according our drawings all over the world, so we do not like to show our file paths.Glenn Schroeder wrote: ↑Thu Apr 14, 2022 8:37 am I can't answer for @TTevolve, but I also have the file part in the margin of my Drawings. It's helpful when I have a pdf from several years ago in front of me, but not the SW files, and I want to find them.
Re: Partial File Path
A macro feature can be used to do this. You can even add the macro feature to your drawing template so that any future drawings made with the template will have the macro feature. Every rebuild the macro feature will check the current drawing path, trim off the part you don't want and store the result in a custom property that can be linked to a note on your sheet format.
The macro also listens for file save events so that it can update the property. The macro consists of one regular module and one class module (for the event handling):
Here is the Main module:
Here is the class module:
The macro feature is set up so that it stores the macro code in the file itself. The two constants (CUSTOM_PROPERTY_NAME and START_OF_TRIMMED_PATH) at the start of the module control the name of the custom property and the text to search for in the file path. The START_OF_TRIMMED_PATH constant should be set to the text that always represents the start of the string before which everything should be dropped. As written, it is looking for "Desktop" and storing in a custom property named "Path", which I used for testing purposes. So, 'C:\Users\jsculley\Desktop\SOLIDWORKS Files\somedrawing.slddrw" would be trimmed to "Desktop\SOLIDWORKS Files\somedrawing.slddrw" and stored in the Path custom property.
This is sample code only, not necessarily suitable for production.
The macro also listens for file save events so that it can update the property. The macro consists of one regular module and one class module (for the event handling):
Here is the Main module:
Code: Select all
Dim swApp As SldWorks.SldWorks
Dim mDoc As ModelDoc2
Dim fMgr As FeatureManager
Dim macroMethods(8) As String
Dim macroPath As String
Dim f As feature
Dim handler As New EventHandler
Const CUSTOM_PROPERTY_NAME = "Path"
Const START_OF_TRIMMED_PATH = "Desktop"
Option Explicit
Sub Main()
Set swApp = Application.SldWorks
Set mDoc = swApp.ActiveDoc
Set fMgr = mDoc.FeatureManager
macroPath = swApp.GetCurrentMacroPathName
macroMethods(0) = macroPath: macroMethods(1) = "Main": macroMethods(2) = "swmRebuild"
macroMethods(3) = macroPath: macroMethods(4) = "Main": macroMethods(5) = "swmEdit"
macroMethods(6) = macroPath: macroMethods(7) = "Main": macroMethods(8) = "swmSecurity"
Dim dimTypes As Variant
Dim dimValue As Variant
Dim vEditBodies As Variant
fMgr.InsertMacroFeature3 "StorePath", "", (macroMethods), Empty, Empty, Empty, dimTypes, dimValue, vEditBodies, Empty, swMacroFeatureEmbedMacroFile
End Sub
Function swmRebuild(vSW As Variant, vMDoc As Variant, feature As Variant) As Boolean
Dim mDoc As ModelDoc2
Set mDoc = vMDoc
handler.init mDoc
If Not hasProperty(mDoc) Then
createProperty mDoc
End If
updatePath mDoc
swmRebuild = True
End Function
Function swmEdit(swApp As Variant, mDoc As Variant, feature As Variant) As Boolean
swmEdit = True
End Function
Function swmSecurity(vSW As Variant, vDoc As Variant, vFeat As Variant) As Boolean
swmSecurity = SwConst.swMacroFeatureSecurityOptions_e.swMacroFeatureSecurityByDefault
End Function
Sub updatePath(mDoc As ModelDoc2)
Dim path As String
path = mDoc.GetPathName
If path <> "" Then
Dim mExt As ModelDocExtension
Set mExt = mDoc.Extension
Dim cMgr As CustomPropertyManager
Set cMgr = mExt.CustomPropertyManager("")
path = Mid(path, InStr(1, path, START_OF_TRIMMED_PATH , vbTextCompare))
cMgr.Set2 CUSTOM_PROPERTY_NAME, path
End If
End Sub
Sub createProperty(mDoc As ModelDoc2)
Dim mExt As ModelDocExtension
Set mExt = mDoc.Extension
Dim cMgr As CustomPropertyManager
Set cMgr = mExt.CustomPropertyManager("")
cMgr.Add3 CUSTOM_PROPERTY_NAME, swCustomInfoType_e.swCustomInfoText, "", swCustomPropertyOnlyIfNew
End Sub
Function hasProperty(mDoc As ModelDoc2) As Boolean
Dim mExt As ModelDocExtension
Set mExt = mDoc.Extension
Dim cMgr As CustomPropertyManager
Set cMgr = mExt.CustomPropertyManager("")
Dim val As String
Dim resolvedVal As String
Dim wasResolved As Boolean
If cMgr.Get5(CUSTOM_PROPERTY_NAME, False, val, resolvedVal, wasResolved) = swCustomInfoGetResult_NotPresent Then
hasProperty = False
Else
hasProperty = True
End If
End Function
Code: Select all
Option Explicit
Public WithEvents swDrawing As SldWorks.DrawingDoc
Private Function swDrawing_FileSaveAsNotify2(ByVal filename As String) As Long
updatePath swDrawing
swDrawing_FileSaveAsNotify2 = 0
End Function
Public Function init(ByRef aDoc As ModelDoc2)
Set swDrawing = aDoc
End Function
This is sample code only, not necessarily suitable for production.
Re: Partial File Path
Like Glenn said above, we use PDF's to share our drawings with the shop, so it's a quick way to know where to look for models/parts/drawings when you created them a while ago and can't remember where you saved them. I know you can search by part number, but we have years of data so searches can take 2 or 3 minutes vs just going to the the folders in the path. I will try the macro JSculley put up.
It wasn't an issue until someone (an IT guy) decided to use really long folder names for the base folders and didn't consult anyone that it might be an issue. Thanks for the help guys!
It wasn't an issue until someone (an IT guy) decided to use really long folder names for the base folders and didn't consult anyone that it might be an issue. Thanks for the help guys!