TheSwamp

Code Red => AutoLISP (Vanilla / Visual) => Topic started by: CHulse on May 22, 2018, 12:53:14 PM

Title: Support file search path
Post by: CHulse on May 22, 2018, 12:53:14 PM
Does anyone here know a way to add new locations to the support file search path via lisp? We use a few network locations for support files and occasionally the network connection is lost. If a user opens cad without that connection, the entry in the support file path list is lost also.
Was hoping to make a lisp to add them back easily.

Any direction would be appreciated.

Thanks
Title: Re: Support file search path
Post by: Crank on May 22, 2018, 01:47:05 PM
here (https://www.theswamp.org/index.php?topic=53001.msg578195#msg578195) and here (http://www.cadtutor.net/forum/showthread.php?41813-Lisp-Command-For-Setting-The-Auto-File-Save-Location&p=282086&viewfull=1#post282086).
Title: Re: Support file search path
Post by: CHulse on May 22, 2018, 02:05:07 PM
Awesome, thanks.
Apparently I didn't spend enough time searching before I posted.
Title: Re: Support file search path
Post by: Lee Mac on May 22, 2018, 03:08:36 PM
http://lee-mac.com/addremovesupportpaths.html
Title: Re: Support file search path
Post by: BIGAL on May 22, 2018, 09:29:19 PM
Another example.

Code: [Select]
; resets the paths usefull for update versions of Autocad
; by A Houston 2011
; This sets a reference to the install path of your product
; the gets are their for info maybe other use
; use this to find other settings
;(vlax-dump-object (vla-get-files (vla-get-preferences (vlax-get-Acad-object))) T)



(vl-load-com)
(defun setpaths ( / *files* doc)
; make temp directory
(if (vl-file-directory-p "C:\\Acadtemp\\")
(Princ "Acadtemp exists")
(vl-mkdir "C:\\AcadTEMP\\")
)

(setq *files*  (vla-get-files  (vla-get-preferences (vlax-get-Acad-object))))

; savepath
;(vla-get-AutoSavepath *files*)
(vla-put-AutoSavepath *files* "C:\\AcadTemp")

; custom icons
;(vla-get-CustomIconPath *files*))
(vla-put-CustomIconPath *files* "P:\\Autodesk\\ICONS")

; printers config
;(vla-get-PrinterConfigPath *files*)
(vla-put-PrinterConfigPath *files* "P:\\AutoDESK\\Plotting\\Plot Styles 2011")

; printers style sheet
;(vla-get-PrinterStyleSheetPath *files*)
(vla-put-PrinterStyleSheetPath *files* "P:\\AutoDESK\\Plotting\\Plot Styles")

; printer drv's
;(vla-get-PrinterDescPath *files*)
(vla-put-PrinterDescPath *files* "P:\\AutoDESK\\Plotting\\Drv")

; print spooler
;(vla-get-PrintSpoolerPath *files*)
(vla-put-PrintSpoolerPath *files* "C:\\AcadTemp\\")

; template  path
;(vla-get-TemplateDwgPath *files*)
(vla-put-TemplateDwgPath *files* "P:\\Autodesk\\c3d Templates")

; template location
;(vla-get-QnewTemplateFile *files*)
(vla-put-QnewTemplateFile *files* "P:\\Autodesk\\c3d Templates\\XXXX.dwt")

;make new support paths exist + new
(setq paths (vla-get-SupportPath *files*))
(setq XXXXpaths "P:\\autodesk\\supportfiles;P:\\autodesk\\lisp;P:\\autodesk\\fonts;P:\\autodesk\\hfs fonts;")
(setq newpath (strcat XXXXpaths paths))
(vla-put-SupportPath *files* newpath)

; Tempdirectory
;(vla-get-TempFilePath *files*))
(vla-put-TempFilePath *files* "C:\\AcadTemp\\")

;   PlotLogFilePath = "C:\\Documents and Settings\\BIGAL.XXXX-AD\\localsettings\\application data\\autodesk\\c3d 2011\\enu\\"
(vla-put-PlotLogFilePath *files* "C:\\AcadTemp\\")

;   LogFilePath = "C:\\Documents and Settings\\BIGAL.XXXX-AD\\localsettings\\application data\\autodesk\\c3d 2011\\enu\\"
(vla-put-LogFilePath *files* "C:\\AcadTemp\\")


; xref temp path
;(vla-get-TempXrefPath *files*))
(vla-put-TempXrefPath *files* "C:\\AcadTemp\\")

; end use of *files*
)
(setpaths)

; exit quitely
(princ "All Done")
Title: Re: Support file search path
Post by: CHulse on May 23, 2018, 08:41:59 AM
http://lee-mac.com/addremovesupportpaths.html

Thanks Lee. I think I'll be using that. Appreciate your great work!
Title: Re: Support file search path
Post by: JohnK on May 23, 2018, 10:26:04 AM
I may be missing something but isn't it as simple as:
Code - Auto/Visual Lisp: [Select]
  1. (setenv "ACAD" (strcat <PATHSTR> (getenv "ACAD")))
Title: Re: Support file search path
Post by: Lee Mac on May 23, 2018, 02:26:05 PM
http://lee-mac.com/addremovesupportpaths.html

Thanks Lee. I think I'll be using that. Appreciate your great work!

You're welcome!  :-)
Title: Re: Support file search path
Post by: dgorsman on May 23, 2018, 03:14:22 PM
I may be missing something but isn't it as simple as:
Code - Auto/Visual Lisp: [Select]
  1. (setenv "ACAD" (strcat <PATHSTR> (getenv "ACAD")))

A little more complicated when you start considering outcomes.  For example, what happens if the path is already present?  What if you want the search path somewhere in the middle of the existing paths?
Title: Re: Support file search path
Post by: JohnK on May 23, 2018, 04:13:52 PM
I may be missing something but isn't it as simple as:
Code - Auto/Visual Lisp: [Select]
  1. (setenv "ACAD" (strcat <PATHSTR> (getenv "ACAD")))

A little more complicated when you start considering outcomes.  For example, what happens if the path is already present?  What if you want the search path somewhere in the middle of the existing paths?
Not enough information in the OP but...I don't care if the path already exists (in this context or/and unless you have 50 duplicates). But you shouldn't be calling this type of code every time you open a drawing, for example. Besides, AutoCAD (used to--at least) stop once it found the first occurrence of what it was looking for. Now if you want to re-order the list that takes a bit more. But I'm sure you can find plenty of examples here (I'm sure I've even done that task once or a thousand times in the past so I probably even have code posted here to do that-and I'm a dummy) but that wasn't the question; the OP wanted to know how to add to the path variable (-i.e. hence the "get path, append new to it, set the path" response from me).
Title: Re: Support file search path
Post by: rkmcswain on May 24, 2018, 07:37:41 AM
Quote from: CHulse
Does anyone here know a way to add new locations to the support file search path via lisp? We use a few network locations for support files and occasionally the network connection is lost. If a user opens cad without that connection, the entry in the support file path list is lost also.
Was hoping to make a lisp to add them back easily.


We use a local "acad.lsp" (located in \Program Files\Autodesk\AutoCAD 2019\Support), which loads the network version of "acad.lsp".
The network copy in turn sets the support file search paths (SFSP), and the network location of this "acad.lsp" gets put at the top of the list, forcing this same "acad.lsp" to load the next time.

If, by chance, the network resource is not available at ACAD startup time, then the local "acad.lsp" fires, and informs the user that the network resource is N/A.
So at this point, like you say, those network paths are dropped from the SFSP.
Say the network resource comes back online, and the user restarts ACAD.
The local "Acad.lsp" fires again, this time finding the network "acad.lsp", which loads, and voila, everything is back to normal, with no human intervention.
Title: Re: Support file search path
Post by: ScottMC on May 24, 2018, 10:45:15 AM
Understandable why my Win7Pro 64 was unhelpful in installing my A2K but, to complicate things, windows refused my "New/Open" window of my "Start-in:" folder till.. went and took a chance and copied my A2K "Autodesk Shared" DLL etc files into my main CAD dwg folder, changed the "Start-in:" to that main folder and finally, it works!! "Select file to open" image below shows the "Look in Favorites" which still doesn't work.. only challenge left but don't miss it.
Title: Re: Support file search path
Post by: ahsattarian on January 23, 2021, 01:13:07 PM
This may help u  :



Code - Auto/Visual Lisp: [Select]
  1. (defun c:a ()
  2.   (print (acet-pref-supportpath-list))
  3.   (defun sfspli ()
  4.     ;|  http://paracadd.com/lisp/-access-to-the-options-dialog-properties.LSP  |;
  5.     (print (vla-get-supportpath (vla-get-files (vla-get-preferences (vlax-get-acad-object))))) ;|  http://paracadd.com/lisp/SupportPaths.lsp  |;
  6.     (setq str (getenv "ACAD"))
  7.     (setq li nil)
  8.     (setq txt "")
  9.     (setq n (strlen str))
  10.     (setq i 0)
  11.     (repeat n
  12.       (setq i (1+ i))
  13.       (setq let (substr str i 1))
  14.       (cond ((/= (ascii let) 59) (setq txt (strcat txt let))))
  15.       (cond ((= (ascii let) 59) (setq li (append li (list txt))) (setq txt "")))
  16.     )
  17.     (cond ((/= txt "") (setq li (append li (list txt)))))
  18.     (setq k 0)
  19.     (foreach a li
  20.       (setq k (1+ k))
  21.       (princ "\n  ")
  22.       (cond ((< k 10) (princ "0")))
  23.       (princ k)
  24.       (princ "  --->  ")
  25.       (princ a)
  26.     )
  27.   )
  28.   (princ "\n\n >>>>>>>>>>> Before : >>>>>>>>>>> \n")
  29.   (sfspli)
  30.   (setq shl (vla-getinterfaceobject (vlax-get-acad-object) "shell.application"))
  31.   (setq fld (vlax-invoke-method shl 'browseforfolder 0 "Select a folder" 512 ""))
  32.   (setq ad (strcat (vlax-get-property (vlax-get-property fld 'self) 'path) "\\"))
  33.   (setq li1 (cdr (cdr (vl-directory-files ad "*.*" -1))))
  34.   (setq li2 nil)
  35.   (foreach a li1 (setq b (strcat ad a)) (setq li2 (append li2 (list b))))
  36.   (setq li3 (acad_strlsort li2))
  37.   (setq li0 nil)
  38.   (foreach a li (cond ((not (member a li3)) (setq li0 (append li0 (list a))))))
  39.   (setq li li0)
  40.   (setq li4 (reverse li3))
  41.   (foreach a li4 (cond ((not (member a li)) (setq li (append (list a) li)))))
  42.   (setq str "")
  43.   (foreach a li (setq str (strcat str a ";")))
  44.   (setq str (substr str 1 (1- (strlen str))))
  45.   (setenv "ACAD" str)
  46.   (princ "\n\n >>>>>>>>>>> After : >>>>>>>>>>> \n")
  47.   (sfspli)
  48.   (textscr)
  49.   (princ)
  50. )