Jump to content

Multiple/Quick SaveAs


Grrr

Recommended Posts

Hi guys,

Today I had to save as multiple dwgs into a different dwg version and I ended up with this:

 

Batched it quickly ( I hate/try to avoid using browser dialogs, when I don't have to ) :

(defun C:SaveAsQuick ( / ftp k f L ) 
[color="darkgreen"] 
 ;| Type: AcSaveAsType enum 
 acR12_dxf: AutoCAD R12 DXF (*.dxf) 
 acR14_dwg: AutoCAD R14 DWG (*.dwg) 
 ac2000_dwg: AutoCAD 2000 DWG (*.dwg) 
 ac2000_dxf: AutoCAD 2000 DXF (*.dxf) 
 ac2000_Template: AutoCAD 2000 Drawing Template File (*.dwt) 
 ac2004_dwg: AutoCAD 2004 DWG (*.dwg) 
 ac2004_dxf: AutoCAD 2004 DXF (*.dxf) 
 ac2004_Template: AutoCAD 2004 Drawing Template File (*.dwt) 
 ac2007_dwg: AutoCAD 2007 DWG (*.dwg) 
 ac2007_dxf: AutoCAD 2007 DXF (*.dxf) 
 ac2007_Template: AutoCAD 2007 Drawing Template File (*.dwt) 
 ac2010_dwg: AutoCAD 2010 DWG (*.dwg) 
 ac2010_dxf: AutoCAD 2010 DXF (*.dxf) 
 ac2010_Template: AutoCAD 2010 Drawing Template File (*.dwt) 
 ac2013_dwg: AutoCAD 2013 DWG (*.dwg) 
 ac2013_dxf: AutoCAD 2013 DXF (*.dxf) 
 ac2013_Template: AutoCAD 2013 Drawing Template File (*.dwt) 
 acNative: A synonym for the latest drawing release. In this release, this value equals ac2013_dwg. 
 |;
 
 ;| https://knowledge.autodesk.com/support/autocad/learn-explore/caas/sfdcarticles/sfdcarticles/How-to-find-which-version-of-AutoCAD-was-used-to-create-save-a-DWG.html
 The AC10xx versions are as follows: 
 AC1015 = AutoCAD 2000 
 AC1018 = AutoCAD 2004 
 AC1021 = AutoCAD 2007 
 AC1024 = AutoCAD 2010 
 AC1027 = AutoCAD 2013 
 AC1032 = AutoCAD 2018 
 |;
 [/color]
 
 (cond 
   ( (= 0 (getvar 'dwgtitled)) (alert "\nThe active drawing is unsaved!") )
   ( 
     (not
       (setq ftp
         (eval
           (nth
             (vl-position
               (setq k
                 (progn 
                   (setq L '("eXit" "R14" "2000" "2004" "2007" "2010" "2013"))
                   (setq f '((del L) (substr (apply 'strcat (mapcar '(lambda (x) (strcat del x)) L)) 2)))
                   (initget (f " " L)) (cond ( (getkword (strcat "Choose version [" (f "/" L) "] <eXit>: ")) ) ("eXit"))
                 ); progn
               ); setq k
               L
             ); vl-position
             '(nil acR14_dwg ac2000_dwg ac2004_dwg ac2007_dwg ac2010_dwg ac2013_dwg)
           ); nth
         ); eval
       ); setq ftp
     ); not
     (prompt "\nUser Exited.")
   )
   (
     (
       (lambda (doc)
         (apply 
           '(lambda (a b c / pat des header)
             (cond
               ( (findfile (setq pat (strcat a b "_" k c))) (alert (strcat "\nDrawing already exists: " pat)) )
               ( (vla-SaveAs doc pat ftp) nil)
               ( (progn (setq pat (findfile pat)) (setq des (open pat "r")) (setq header (substr (read-line des) 1 6))  (close des) header)
                 (alert 
                   (strcat "Drawing saved as " 
                     (cond 
                       (
                         (cdr 
                           (assoc header
                             '(("AC1015" . "AutoCAD 2000")
                               ("AC1018" . "AutoCAD 2004") 
                               ("AC1021" . "AutoCAD 2007") 
                               ("AC1024" . "AutoCAD 2010") 
                               ("AC1027" . "AutoCAD 2013") 
                               ("AC1032" . "AutoCAD 2018") 
                             ); list
                           ); assoc
                         ); cdr
                       )
                       ("Unknown")
                     ); cond
                     "."
                   ); strcat
                 ); alert
               )
               ( (alert "\nUnable to find the saved copy.") )
             ); cond
           )
           (fnsplitl (vla-get-FullName doc))
         )
       )
       (vla-get-ActiveDocument (vlax-get-acad-object))
     )
   )
 ); cond
 
 (princ)
); defun C:SaveAsQuick

 

BTW

The original idea'n'attempt was to use ODBX with SaveAs method, but looks like it fails :ouch: :

; Save As Multiple dwgs
(defun test ( / ftp tmp L new )

 (cond 
   ( (not LM:browseforfolder) (alert "You forgot to define 'LM:browseforfolder'") )
   ( (not LM:ODBX) (alert "You forgot to define 'LM:ODBX'") )
   (
     (not
       (setq ftp
         (
           (lambda ( / f L )
             (eval
               (nth
                 (vl-position
                   (progn 
                     (setq L '("eXit" "R14" "2000" "2004" "2007" "2010" "2013"))
                     (setq f '((del L) (substr (apply 'strcat (mapcar '(lambda (x) (strcat del x)) L)) 2)))
                     (initget (f " " L)) (cond ( (getkword (strcat "Choose version [" (f "/" L) "] <eXit>: ")) ) ("eXit"))
                   ); progn
                   L
                 ); vl-position
                 '(nil acR14_dwg ac2000_dwg ac2004_dwg ac2007_dwg ac2010_dwg ac2013_dwg)  
               ); nth
             ); eval
           ); lambda
         )
       ); setq ftp
     ); not
   )
   (
     (not
       (and 
         (setq tmp (LM:browseforfolder "Select Folder of Drawings to SaveAs" nil 512))
         (setq L (mapcar (function (lambda ( x ) (strcat tmp "\\" x))) (vl-directory-files tmp "*.dwg" 1)))
       )
     )
   )
   ( (not (setq new (LM:browseforfolder "Select Folder to Put the Copies" (strcat (getenv "userprofile") "\\Desktop\\") 0))) )
   (
     (LM:ODBX ; (LM:ODBX <fun> [lst] [sav])
       (function
         (lambda ( doc ) ; object.SaveAs FileName [, FileType] [, SecurityParams]
           ;; Doesn't work because SaveAs changes the focus to the copied dwg file, hence the grip is lost
           (vl-catch-all-apply (function (lambda nil (vla-SaveAs doc (strcat new "\\" (vla-get-Name doc)) ftp))))
         )
       )
       L nil
     )
   )
 ); cond 
 (princ)
); defun

Link to comment
Share on other sites

yeah had the same problem with odbx ... it can only save 'native' format as it is called. Ended up doing it with script and autocadcore console so at least my system wasn't hang up while processing.

Link to comment
Share on other sites

BTW

The original idea'n'attempt was to use ODBX with SaveAs method, but looks like it fails :ouch: :

 

quoted by LM

Due to a restriction on the saveas method when invoked through an ObjectDBX interface, all drawings will be saved to the native format, i.e. the latest version available - this is unfortunately unavoidable.

 

Note that when saving drawings through ObjectDBX, drawing file thumbnails will be lost until the next manual save.

 

options:

1. obdx - :ouch:

2. rlx's scr suggestion - ?

3. TrueView - ?

4. etc..??

Link to comment
Share on other sites

Thank you guys for your replies,

I never had a real odbx task to perform, so I think this is the first one.

Had a deja-vu while trying, guess I've tried it before but don't remember - haha :lol:

 

Maybe I'll ask MP if his RunAll could do the trick, although I tried and it failed again.

This was my quick attempt, but didn't played with it much:

(defun define-test ( / tmp )
 
 (if (setq tmp (LM:browseforfolder "Select Folder of Drawings to SaveAs" nil 512))
   (progn
     (eval
       (append 
         '(defun-q test)
         '( ( / f )
           (setq f
             (lambda (x)
               (
                 (lambda (doc)
                   (or (= 0 (getvar 'dwgtitled)) (vla-SaveAs doc (strcat x "\\" (vla-get-Name doc)) ac2000_dwg) )
                 )
                 (vla-get-ActiveDocument (vlax-get-acad-object))
               )
               (princ)
             )
           )
         ); quote
         (list (list 'f tmp))
       ); append
     ); eval
     (vl-propagate 'test)
   ); progn
 ); if
 
); defun define-test

(_RunAll "(test)")

 

Sorry for my late reply - busy days came again. :glare:

Edited by Grrr
Link to comment
Share on other sites

Thank you guys for your replies

Maybe I'll ask MP if his RunAll could do the trick..

... 
(_RunAll "(test)")

 

cool idea! if MP's code work, but it required login theswamp ATM i can't due to forgotten both pw & recovery email pw as well.(it only can be online by another old company pc which has pw saved)

 

another simplified

[color="green"];(vl-bb-set 'test '((/ doc) (setq doc (vla-get-activedocument (vlax-get-acad-object))) (or (= 0 (getvar 'dwgtitled))
;                    (vla-saveas doc (strcat tmp "\\" (vla-get-name doc)) ac2000_dwg) (princ)))
;  )  ; <-  i didn't test the code it requires vl-bb-ref , so not relavant   [/color]

(mapcar 'set
       '(tmp test)
        (list (LM:browseforfolder "Select Folder of Drawings to SaveAs" nil 512)
             '((/ doc)
               (setq doc (vla-get-activedocument (vlax-get-acad-object)))
               (or
                (= 0 (getvar 'dwgtitled))
                (if tmp (vla-saveas doc (strcat tmp "\\" (vla-get-name doc)) ac2000_dwg))
                )
               (princ)
               )
             )
)
(mapcar 'vl-propagate '(tmp test))

Edited by hanhphuc
Link to comment
Share on other sites

sadly I / we can't / are forbidden to / may not whatever ... pick one , use VBA any more. Had written my own VBA batch routine, oh I dunno , ten years ago and the next year VBA wasn't standard included with autocad any more so I stopped using it all together. A pity because it runs pretty fast... odbx is fast , acadcore a little bit slower and pure script the slowest but at least I have time to drink my tea (you think about that, you speed maniac haha)

Link to comment
Share on other sites

cool idea! if MP's code work, but it required login theswamp ATM i can't due to forgotten both pw & recovery email pw as well.(it only can be online by another old company pc which has pw saved)

 

He wrote some very detailed explanation(s) there, so I cannot copy it all.

But in a nutshell the technique is to define a function that's propagate-able via setq/defun-q, propagate it and then use _RunAll to iterate with it thru all the opened documents.

But it requires a VBA subfunction/module aswell (obviously it has less limitation than LISP) - the 'MPTools.dvb' file.

 

Did you know ...

 

AutoCAD will not let you use vl-propagate on functions or commands defined via defun?

 

For example:

 

(defun foo ( ) (princ "\nHi from foo.") (princ))

 

>> FOO

 

(vl-propagate 'foo)

 

>> (error "Visual LISP: Illegal inter-doc import/export object" #)

 

However you can side step this limitation if you define the function via setq or defun-q (merely a wrapper for setq):

 

(setq foo '(( ) (princ "\nHi from foo.") (princ)))

 

>> (nil (PRINC "\nHi from foo.") (PRINC))

 

or

 

(defun-q foo ( ) (princ "\nHi from foo.") (princ))

 

>> FOO

 

(vl-propagate 'foo)

 

>> (nil (PRINC "\nHi from foo.") (PRINC))

 

Which you could then pass to _RunAll

 

 

Overall mentioned it' date=' because he claims:

Anyway, with this program you can plot, qsave, saveas, conditionally close docs, draw things, do things with xrefs, query a doc, write results to a csv file ... etc. for all open docs with the appropriate statements, lisp or supplemental vba code.

Which may mean that there are advantages over ODBX, although you have to open a reasonable amount of documents.

 

And for a header he wrote (if you are interested) :

In this thread I'll be posting code that will enable you to run arbitrary commands or functions in all open documents. As a member of a CAD support team I do this scores of times a day, typically with 50 drawings open per AutoCAD instance (when ObjectDBX won't suffice). This technique is generally far more convenient -- and faster -- than writing and invoking a temporary script (by hand or via ScriptPro), acknowledging that some tasks may require full fledged scripting. That said, between ObjectDBX and the technique to be shared herein it's been ages since I've needed any scripts to perform my work.

 

 

 

another simplified

 <..> 

 

 

hanhphuc,

I think you didn't understood the concept of my (defun-q test ..), so your function definition is not the same as mine - defining and evaluating mine versus yours (pretty-printed) :

 

In mine I use the 'tmp' variable to hardcode it to the function I'll propagate (so in the same time I'm prompted once for a folder, and then its value is used inside the function's definition for all the documents) :

((/ F)
 (SETQ F
   (LAMBDA (X)
     ((LAMBDA (DOC)
       (OR	(= 0 (GETVAR 'DWGTITLED))
         (vla-SaveAs
           DOC
           (STRCAT X "\\" (vla-get-Name DOC))
           ac2000_dwg
         )
       )
     )
     (vla-get-ActiveDocument (vlax-get-acad-object))
     )
     (PRINC)
   )
 )
 (F "C:\\Users\\Grrr\\Desktop\\Test") [color=darkgreen] ; this path comes from the 'tmp' variable [/color]
)

 

However, your should work only if I have defined a global 'tmp' variable for every document (that'd be potentially uneffective requirement) :

((/ DOC) 
 (SETQ DOC (vla-get-ActiveDocument (vlax-get-acad-object)))
 (OR (= 0 (GETVAR 'DWGTITLED))
   (IF TMP [color=darkgreen] ; you use the 'tmp' variable, but it will be null when passed to the other documents [/color]
     (vla-SaveAs
       DOC
       (STRCAT TMP "\\" (vla-get-Name DOC))
       ac2000_dwg
     )
   )
 )
 (PRINC)
)

 

Yea I know you may say that my 'tmp' is global, but actually I can wrap it within a defun-maker function, where its localised (so modified the original code in reply #4).

Apologies for leading to misunderstanding (guess you understand now, after reading this).

And I intentially didn't hardcode the path, because I prefer to specify it with the Folder Browser. :P

 

 

Had written my own VBA batch routine, oh I dunno , ten years ago

 

You did VBA before? - you suprised me! :lol: Now I realise why you are so good at scripting objects. :thumbsup:

 

 

and the next year VBA wasn't standard included with autocad any more so I stopped using it all together.

 

Yea that seems to be a drawback for autodesk.. I never tried VBA before, untill some forum members started to mention it constantly so then I decided "ok lets see what its like".

The first obvious advantage I saw (from LISP) were the userforms - the concept of writing code to the control's events.

Although if you push enough yourself with LISP'n'DCL you could replicate the program (looks like I'm talking to the right guy :lol: ).

But I don't know if there are any more advantages in VBA when we're talking about functionality. :unsure:

 

 

but at least I have time to drink my tea (you think about that, you speed maniac haha)

 

I'm on the same opinion, depending if the certain program covers my rules:

  • Substitutes alot of annoying/repeating manual steps
  • I use that program relative rarely (for instance plotting - one spends few hours drawing, and just in the end he does plotting)
  • Requires less than 5 min processing (by that time I drink my coffee, and sit back /refreshed/ on the computer)

 

So overall that sounds like this 'Multiple SaveAs' intention.

 

Still thanks for your input Rlx - I saw already that you do alot of ODBX-ing, so you are familiar enough with such problems.

Link to comment
Share on other sites

The only thing I did with VBA was writing a routine to open a drawing an then plot it or run a script. So nothing major really. But to invest more time in a product no longer supported would be pointless. The one main advantage for VBA is that it sees AutoCAD as an object and not the drawing so your code never loses it focus like lisp does cause lisp only runs in its own workspace. And making dialogs was easier because of the dialog editor. But in terms programming ... lisp is not as fast and very limited compared to other languages but its much more forgiving (no declarations in advance) and you can type & test on the fly... I said it before , I rather be quick in pasting something together and lose some performance then first having to write ten pages for all the declarations of the variables. But sometimes you need performance of course... good luck with your app.

 

 

gr. Rlx

Link to comment
Share on other sites

However, your should work only if I have defined a global 'tmp' variable for every document (that'd be potentially uneffective requirement) :

 

maybe you overlooked post#5

(mapcar 'vl-propagate '([b][color="red"]tmp[/color][/b] test))

'tmp' variable is set globally to every document as well, i.e: the symbol is boundp

however i do agree any global variables is not advisable for coders.

 

Despite my works or not no worries, as long as your app working then that's great ! plus with MP's (_runall) is interesting idea than script etc..

 

He wrote some very detailed explanation(s) there, so I cannot copy it all.

But in a nutshell the technique is to define a function that's propagate-able via setq/defun-q, propagate it and then use _RunAll to iterate with it thru all the opened documents.

Thank you for sharing MP idea & multiple savaAs idea is very useful :thumbsup:

 

In mine I use the 'tmp' variable to hardcode it to the function I'll propagate

(so in the same time I'm prompted once for a folder, and then its value is used inside the function's definition for all the documents) :

 

(define-test ( / tmp ) ... )

now makes sense now , my understanding you only get the path once then redefine in your 'test' (whereas my previous post was to propagate the variable 'tmp' , apologize if i was wrong) :oops:

 

i think the concept almost same

--> defun-q 'LIST

--> read 'STR

(defun define-test2 (/ tmp )
 (if (setq tmp (LM:browseforfolder "Select Folder of Drawings to SaveAs" nil 512))
   (set 'test2
          ([color="blue"]read[/color]
            (apply
              'strcat
              (list
                [color="purple"]"(( / doc )(setq doc (vla-get-activedocument (vlax-get-acad-object)))(or (= 0 (getvar \"dwgtitled\"))(vla-saveas doc (strcat \""[/color]
                (vl-string-translate "\\" "/" [b][color="red"]tmp[/color][/b])
                [color="purple"]"/\"(vla-get-Name DOC)) ac2000_dwg))))"[/color]
                )
              )
            )
         )
   )
 (vl-propagate 'test2)
 (princ)
 )

[color="green"];problem of [color="blue"]read[/color] string method, it failed in control string "\r" "\n" "(princ)""(prin1)""(print)" etc..
;i.e: [color="blue"]set[/color] , [color="blue"]defun-q[/color] is preferable function to be used in your context[/color]

 

p/s: any exception which if user's folder contains newer version drawing ?

 

 

... lisp is not as fast and very limited compared to other languages but its much more forgiving (no declarations in advance) and you can type & test on the fly...

gr. Rlx

agree :) especially for short liners

Edited by hanhphuc
add commnet rlx. princ, defun-q link
Link to comment
Share on other sites

Ok, here goes offtopic... :lol: :sorry:

 

But to invest more time in a product no longer supported would be pointless.

 

Agreed, well if I think about the worst case: if Autodesk decides for some reason to not upload a VBA enabler for the future ACAD versions..

then it would force you to run some MS Office application and thru its VBAIDE to execute your VB code (which would require to access the ACAD primary object).

 

 

sadly I / we can't / are forbidden to / may not whatever ... pick one , use VBA any more. Had written my own VBA batch routine

 

I understand you... say you write this awesome VB program, and you provide it to your users with the words "but you have to download and install VBA enabler in order to use it".

The fact that this VB integrated editor is not built-in to ACAD (just like VLIDE) ...sucks.

 

 

The one main advantage for VBA is that it sees AutoCAD as an object and not the drawing so your code never loses it focus like lisp does cause lisp only runs in its own workspace.

And making dialogs was easier because of the dialog editor.

But in terms programming ... lisp is not as fast and very limited compared to other languages but its much more forgiving (no declarations in advance) and you can type & test on the fly...

 

Thanks for explaining, now I see the eventual advantages compared to our lovely LISP.

And I don't think this language will die soon, because:

  • Reason1: The invested amount of recourses: the educating ones + soo many users themselves have written and use a ton of .lsp routines
  • Reason2: Whats the purpose of a programming language? - Its for a human being to interact easier with the computer, in order to explain what hes trying to do (algorithm).
    The fact that its so relatively easy to learn, for the cost of speed & limitations - makes it user-friendly and unique for the programmer.
    Its like comparing bikes with cars - if cars can drive you further and faster, still then why we drive bikes?

 

 

I said it before , I rather be quick in pasting something together and lose some performance then first having to write ten pages for all the declarations of the variables.

But sometimes you need performance of course...

 

Rlx, as a user myself I'll share with you my 'performance' criteria (by performance you mean how fast the program is it, right?).

That might be obvious but anyway:

It depends on how many times the certain function/program must be called per drawing session (to do a certain task).

For instance lets say the "LINE" and "PLOT" commands were customly made LISP functions - so normaly per drawing session say you would call "LINE" 200 times and "PLOT" just 3 times.

The time of your drawing session say would be an hour and a half.

A slight delay when invoking "LINE" would be noticable, due the frequent calls.. however if theres a noticable 2-3 sec delay for "PLOT" it should not be a big deal for you (unless the user is too demanding).

So thats the reason BIGAL keeps some reports (with a reactor) of every one in his office, about who's calling what commands how many times (ACAD stalker). :lol:

 

 

good luck with your app.

 

Thanks, alhough that was just a side task that yielded a side problem for me (nothing urgent) that sparkled this question.

I'll keep you guys informed if one day I came up with a solution for this.

 

 

 

 

maybe you overlooked post#5

(mapcar 'vl-propagate '([b][color="red"]tmp[/color][/b] test))

'tmp' variable is set globally to every document as well, i.e: the symbol is boundp

however i do agree any global variables is not advisable for coders.

 

Despite my works or not no worries, as long as your app working then that's great ! plus with MP's (_runall) is interesting idea than script etc..

 

You are correct, I did not notice that you propagated the 'tmp' variable. Apologies! :oops:

 

 

now makes sense now , my understanding you only get the path once then redefine in your 'test' (whereas my previous post was to propagate the variable 'tmp' , apologize if i was wrong) :oops:

 

You are correct, that was exactly my intention. ;)

 

 

i think the concept almost same

 

Well in all cases we bound an unevaluated lists as a values to our symbols via defun-q/setq/set.

 

Or if you mean about the approach of assembling/defining the actual function - mine syntax is easier in order to build it:

 

(defun define-tests ( / s1 s2 s3 s4 symdefun argsdefun )
 
 (setq[color="darkgreen"] ; Our variables we would want to hardcode[/color]
   s1 "Hello " 
   s2 "hanhphuc,"
   s3 " its me,"
   s4 " Grrr! :)"
 )[color="darkgreen"]; setq[/color]
 
 (foreach x 
   (list [color="darkgreen"]; (list 'f ...) can be 'simplified' more, but I didn't wanted to ruin the syntax from #4 (so you would loose track)[/color]
     (list 'test1 (list 'f s1 s2 s3 s4))
     (list 'test2 (list 'f s2 s3 s4 ""))
     (list 'test3 (list 'f s1 "from" s4 ""))
   )[color="darkgreen"]; list [/color]
   [color="darkgreen"]; Just to not confuse further, bound the args here:[/color]
   (setq symdefun (car x))
   (setq argsdefun (cadr x))
  [color="darkgreen"] ; Define:[/color]
   (eval
     (append 
       (list 'defun-q symdefun) ;[color="darkgreen"] <- Here we pass our function definition's desired name[/color]
       '( ( / f )
         (setq f
           (lambda (a b c d) [color="darkgreen"]; <- Keep in track the amount of arguments required[/color]
            [color="darkgreen"] ; The code does our stuff..
             ; Notice that we can just write stuff 'cleanly' (no string reading required nor additional quoting)[/color]
             (alert (strcat a b))
             (alert (strcat c d))
             (princ)
           )
         )
       )[color="darkgreen"]; quote[/color]
       (list argsdefun) [color="darkgreen"]; <- Here we pass the arguments we would want to hardcode in our function definition [/color]
     )[color="darkgreen"]; append[/color]
   )[color="darkgreen"]; eval[/color]
 )[color="darkgreen"]; foreach[/color]
 
)[color="darkgreen"]; defun define-tests[/color]
[color="darkgreen"]; (test1)
; (test2)
; (test3)[/color]

 

Don't get me wrong your alternatives should work fine - I just prefer mine, since I found it to be the easiest way to create a 'Self-Writing Code'.

 

 

p/s: any exception which if user's folder contains newer version drawing ?

 

If you refer to the 'Save As Multiple dwgs' code attempt -

At this point I didn't wanted to handle too much exceptions, in order to focus on the actual problem.

But the concept was simple - just specify some empty folder or create new.

 

 

If its about the 'C:SaveAsQuick' - it already handles that exception:

( (findfile (setq pat (strcat a b "_" k c))) (alert (strcat "\nDrawing already exists: " pat)) )

 

 

Sorry for my late reply - I'm super tired and kinda bisy recently.

But like I said, I'll inform you guys if/when I found a solution to this.

Link to comment
Share on other sites

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.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...