Jump to content

Reactor for dwg close - how to save?


chulse

Recommended Posts

I seriously do not recommend you have this set to auto on. If you open a file, just to take something from it, print, etc. you will have to remember to turn the reactor off; otherwise, you will be changing the edit date of the file. This may not be a big deal to you, but you really should be aware it.

 

Please heed my advice.

Link to comment
Share on other sites

I seriously do not recommend you have this set to auto on. If you open a file, just to take something from it, print, etc. you will have to remember to turn the reactor off; otherwise, you will be changing the edit date of the file. This may not be a big deal to you, but you really should be aware it.

 

I thought about that... I was just thinking if there would be a way to check if the user wanted to save the DWG, or possibly check if the user had saved the dwg in the last 5 min or something...

Any thoughts?

 

The goal here was to prevent users from closing a dwg they were working on without reverting the UCS to World first. This is intended to prevent xrefing problems...

Link to comment
Share on other sites

It looks like you are most of the way to where you want to be, but I just wanted to toss another option out there. I have a macro on a button in a toolbar: "Zoom Save Close". It zooms extents on both model and paper space, locks the viewports, saves the drawing and closes it. You could write one that would set the UCS to World. This way, you can still exit the drawing without the fancy reactor changing the UCS. When you are actually editing the drawing and exit, you use the button "set UCS to World, Save, Close" and move to the next one.

 

Just another thought.

 

Glen

Link to comment
Share on other sites

It looks like you are most of the way to where you want to be, but I just wanted to toss another option out there. I have a macro on a button in a toolbar: "Zoom Save Close". It zooms extents on both model and paper space, locks the viewports, saves the drawing and closes it. You could write one that would set the UCS to World. This way, you can still exit the drawing without the fancy reactor changing the UCS. When you are actually editing the drawing and exit, you use the button "set UCS to World, Save, Close" and move to the next one.

 

Just another thought.

 

Glen

 

Good idea. However, I'd prefer not to leave this up to the user, but rather be completely "behind the scenes" and not rely on the user doing or remembering anything...

Link to comment
Share on other sites

Ok, this is a shameless bump... but does anyone have any ideas how to automate the turning on/off of the reactor based on when the file was last saved?

Link to comment
Share on other sites

Ok, this is a shameless bump... but does anyone have any ideas how to automate the turning on/off of the reactor based on when the file was last saved?

 

 

vl-file-systime

(vl-file-systime filename)

Arguments

filename A string containing the name of the file to be checked.

Return Values

A list containing the modification date and time, or nil, if the file is not

found.

Determines the size of a file, in bytes

Returns last modification time of the specified file

216 | AutoLISP Reference

The list returned contains the following elements:

n year

n month

n day-of-week

n day-of-month

n hours

n minutes

n seconds

Note that Monday is day 1 of day-of-week, Tuesday is day 2, etc.

Examples

_$ (vl-file-systime

"c:/program files/acad2000/sample/visuallisp/yinyang.lsp")

(1998 4 3 8 10 6 52 0)

The returned value shows that the file was last modified in 1998, in the 4th

month of the year (April), the 3rd day of the week (Wednesday), on the 10th

day of the month, at 6:52:0.

...............
Link to comment
Share on other sites

alanjt - thanks

How can I compare that value to the current time/date? Is the current date saved in a variable somewhere and would the list structure be the same?

Link to comment
Share on other sites

alanjt - thanks

How can I compare that value to the current time/date? Is the current date saved in a variable somewhere and would the list structure be the same?

(getvar 'cdate)

 

You'll have to do a little converting.

Link to comment
Share on other sites

Thanks - this should keep me busy for a while.

 

BTW, I decided to keep it turned off by default :) (at least until I can make the date thing work...)

Link to comment
Share on other sites

Be careful with vl-file-systime, if I remember, it doesn't report too well with files that are open.

Didn't know that. Granted, I've never thought of using it on an open file.

Link to comment
Share on other sites

I'm not sure that this would be any more accurate:

 

;; Get File Last Modified time (Lee Mac)
;; Args: Filepath of file to query
;; Returns: Julian Date

(defun GetLastModified ( file / fso fObj date )
 (vl-load-com)

 (setq fso (vlax-create-object "Scripting.FileSystemObject"))
 (cond (   (zerop (vlax-invoke fso 'FileExists file)))

       (   (setq fObj (vlax-invoke-method fso 'GetFile file)
                 date (+ 2415019 (vlax-get-property fObj 'DateLastModified)))))
 
 (vlax-release-object fso)

 date)

(defun c:LastMod ( / f )

 (if (setq f (getfiled "Select File to Query" "" "" 16))
   (princ (strcat "\nLast Modified: "
            (toDate (rtos (GetLastModified f) 2 15) "DD.MO.YYYY HH:MM:SS"))))

 (princ))

(defun toDate ( str format )
 (menucmd (strcat "m=$(edtime," str "," format ")")))

Link to comment
Share on other sites

More fun with the FSO :)

 

;; Get File Information (Lee Mac)
;; Args: Filepath of file to query
;; Returns: (<Filename> <Created> <LastAccessed> <LastModified> <Size>)

(defun GetFileInfo ( file )
 (vl-load-com)

 (setq fso (vlax-create-object "Scripting.FileSystemObject"))
 (cond (   (zerop (vlax-invoke fso 'FileExists file)))

       (   (setq fObj (vlax-invoke-method fso 'GetFile file))

           (setq info (mapcar
                        (function
                          (lambda ( property )
                            (vlax-get fObj property)))
                        
                        '(Name DateCreated DateLastAccessed DateLastModified Size)))))
 
 (vlax-release-object fso)

 info)

 

(defun c:test ( / f Date Size i )

 (setq Date (lambda ( d f ) (toDate (rtos (+ d 2415019) 2 15) f))
       Size (lambda ( s f ) (rtos (/ s (float f)) 2 3)))

 (if (and (setq f (getfiled "Select File to Query" "" "" 16))
          (setq i (GetFileInfo f)))
   
   (mapcar (function princ)
     (mapcar (function strcat) '("\nName: " "\nCreated: " "\nAccessed: " "\nModified: " "\nSize (KB): ")
       (mapcar
         (function (lambda ( foo property args )
                     (apply foo (cons property args))))
         
     '(strcat Date Date Date Size) i
     '(nil ("DD.MO.YYYY HH:MM") ("DD.MO.YYYY HH:MM") ("DD.MO.YYYY HH:MM") (1024.))))))
 
 (princ))

(defun toDate ( str format )
 (menucmd (strcat "m=$(edtime," str "," format ")")))

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...