Visual LISP, AutoLISP and General Customization
cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

How can I Auto Publish in Lisp ??

9 REPLIES 9
Reply
Message 1 of 10
toolbox2
2698 Views, 9 Replies

How can I Auto Publish in Lisp ??

I am writing a lisp routine that uses AutoPublish. It will save & then close the drawing file. Auto Publish will publish all paperspace layouts to PDF on the QSAVE command. It works but only if I choose not to close the drawing file.

 

After Publishing, I need to set the AUTOMATICPUB to zero which is why I'm not AutoPublishing on CLOSE.

 

;; Assume Auto Publish options have already been set to Publish to PDF on SAVE

(defun c:testpub ()

 

  (setvar "AUTOMATICPUB" 1)
  (command "QSAVE")
  (setvar "AUTOMATICPUB" 0)

 

  (command "CLOSE")  ;; << if this line is commented out then Auto Publish works.

)

 

 

How can I AutoPublish on QSAVE; set AUTOMATICPUB=0; then close the file?

 

I have seen alternative solutions for what I'm trying to do : (1) use lisp to plot each layout (but I'd need to select the correct PageSetup for each layout);  (2) create a temporary DSD file and Publish that.

 

but I want to explore AutoPublish because it seems to be a simple way of achieving what I want.

 

9 REPLIES 9
Message 2 of 10
BlackBox_
in reply to: toolbox2

Have you tried instead simply setting Autopublish to publish on CLOSE (or perhaps even 'Prompt on Close')?

 

The trouble I see with what you're attempting, is that you're creating a new command, which either needs to be specifically enacted via command line, custom menu, toolbar button, or ribbon button, etc. whereas the Autopublish mechanism was coded in either .NET or more likely ARX, and is event-based. You may not be able to use the native functionality of the new drawing tabs to acheive the desired results either. 

 

This is one of the reasons I developed this plug-in; to better allow the Autopublish mechanism to only publish to electronic document those drawings that should be published (i.e., sheets, exhibits, etc.), instead of publishing ALL drawings, including C3D models, XREF only drawings, etc.

 

HTH



"How we think determines what we do, and what we do determines what we get."

Message 3 of 10
toolbox2
in reply to: BlackBox_

Thanks for responding.

I even tried adding a pause after the QSAVE but that didn't help.

"Have you tried instead simply setting Autopublish to publish on CLOSE (or perhaps even 'Prompt on Close')?"

No, because I'd need some way of setting AUTOMATICPUB=0 after the CLOSE command.

Message 4 of 10
BlackBox_
in reply to: toolbox2


@toolbox2 wrote:

No, because I'd need some way of setting AUTOMATICPUB=0 after the CLOSE command.


Correct; LISP is a document level language, which is no longer in scope once the document it is being evaluated within is closed.

 

However, there are presumably one or more other documents open in the documents collection, thus one might be successful instead hooking the DocumentBecameCurrent event which is raised when the active document is CLOSEd and another becomes the active document.

 

That, paired with a call to (setvar 'automaticpub 0) within your AcadDoc.lsp *should* do the trick, methinks.

 

 

 

Pseudo-code reactor to be loaded with AcadDoc.lsp:

 

(vl-load-com)

(defun Autopublish:StartReactor	()
  (or *AutopublishReactor*
      (setq *AutopublishReactor*
	     (vlr-docmanager-reactor
	       nil
	       '(
		 (:vlr-documentbecamecurrent . Autopublish:DocumentBecameCurrent)
		)
	     )
      )
  )
  (princ)
)

(defun Autopublish:DocumentBecameCurrent (rea doc)
  (if (and *AutopublishReactor* (= 1 (getvar 'automaticpub)))
    (prompt (strcat "\n[BlackBox] : AUTOMATICPUB = "
		    (itoa (setvar 'automaticpub 0))
	    )
    )
  )
  (princ)
)

(Autopublish:StartReactor)

 



"How we think determines what we do, and what we do determines what we get."

Message 5 of 10
toolbox2
in reply to: toolbox2

Thanks.

Unfortunately, I can't rely on having more than one drawing open (this code will be used by several users). Using your code, AUTOMATICPUB doesn't get set to zero when the one and only drawing is closed. I suppose I could assume all users want it set to zero on startup and I could add that to acaddoc.lsp.

 

Any other ideas?

Message 6 of 10
BlackBox_
in reply to: toolbox2


@toolbox2 wrote:

 

Unfortunately, I can't rely on having more than one drawing open (this code will be used by several users). Using your code, AUTOMATICPUB doesn't get set to zero when the one and only drawing is closed. I suppose I could assume all users want it set to zero on startup and I could add that to acaddoc.lsp.


Why do you believe that you need AUTOMATICPUB == 0 when there are no documents open?

 

Under the suggestion offered, AUTOMATICPUB is set to 0 at drawing open, set to 1 prior to invocation of SAVE/CLOSE either via reactor or custom command as you note above, and is restored to 0 at either the DocumentBecameCurrent event (when there is another document open already), or when another document is opened by user (whichever comes first).

 

Even if thie active document is the last to be closed within that particular session prior to QUIT, the next time the user launches a session, AUTOMATICPUB is set to 0 at first run of AcadDoc.lsp.

 

 

 


@toolbox2 wrote:

 

Any other ideas?


Yes... The app mentioned here accounts for all of this and more... Allowing for AUTOMATICPUB == 1 during the user's entire session, without producing unwanted electronic documents, and requires zero LISP, reactors, modifying AcadDoc.lsp, etc... Simply specify your WCMATCH string once, and done. Lemon squeezy.

Cheers



"How we think determines what we do, and what we do determines what we get."

Message 7 of 10
toolbox2
in reply to: toolbox2

Hi and thanks for your help so far.

 

“Why do you believe that you need AUTOMATICPUB == 0 when there are no documents open?”

 

I don’t but I need it to be set to zero at some point.

 

The reactor works when switching between drawings, either manually or when I close a drawing and AutoCAD switches to the next drawing. But it doesn’t fire with one drawing open and that drawing is closed and reopened (or a new drawing started).

Message 8 of 10
BlackBox_
in reply to: toolbox2


@toolbox2 wrote:

 

Hi and thanks for your help so far.


You're welcome, toolbox2.

 

 

 


@toolbox2 wrote:

 

I don’t but I need it to be set to zero at some point.

 

The reactor works when switching between drawings, either manually or when I close a drawing and AutoCAD switches to the next drawing. But it doesn’t fire with one drawing open and that drawing is closed and reopened (or a new drawing started).



Correct; I've already gone over how to accomplish this in my prior posts, but I'll try and clarify one more time....

 

By definition the DocumentBecameCurrent event is raised only when the active document changes. In a zero document state (when you close the only open document), the event is not raised again until another document is opened (added to the document collection; includes QNEW, etc.).

 

Even then, the DocumentBecameCurrent event is raised before AcadDoc.lsp is loaded in the startup sequence, which is why you need to add a call to (setvar 'automaticpub 0) within your AcadDoc.lsp file, since you stated above that you want for this feature to be disabled by default, and only enabled this feature prior to SAVE/CLOSE with your macro, LISP, etc..

 

 

 

To demonstrate my point about the startup sequence, and that monitoring the DocumentBecameCurrent event alone is insufficient, here's some command line output following QNEW using MgdDbg's Document Manager Events (sorry to just paste; code tags would not let me use color):

 

 [code]


[Doc Mgr Event] : Document Create Started :
[Doc Mgr Event] : Document Lock Mode Will Change :
[Doc Mgr Event] : Document Lock Mode Changed :
[Doc Mgr Event] : Document To Be Deactivated : Drawing1.dwgRegenerating model.

[Doc Mgr Event] : Document Activation Changed : True

[Doc Mgr Event] : Document Created : Drawing2.dwg
[Doc Mgr Event] : Document Lock Mode Will Change : Drawing2.dwg
[Doc Mgr Event] : Document Lock Mode Changed : Drawing2.dwg
[Doc Mgr Event] : Document Lock Mode Will Change : Drawing2.dwg
[Doc Mgr Event] : Document Lock Mode Changed : Drawing2.dwg
[Doc Mgr Event] : Document Lock Mode Will Change : Drawing2.dwg
[Doc Mgr Event] : Document Lock Mode Changed : Drawing2.dwg
[Doc Mgr Event] : Document Lock Mode Will Change : Drawing2.dwg
[Doc Mgr Event] : Document Lock Mode Changed : Drawing2.dwg
[Doc Mgr Event] : Document Lock Mode Will Change : Drawing2.dwg
[Doc Mgr Event] : Document Lock Mode Changed : Drawing2.dwg
[Doc Mgr Event] : Document Lock Mode Will Change : Drawing2.dwg
[Doc Mgr Event] : Document Lock Mode Changed : Drawing2.dwg
[Doc Mgr Event] : Document Activated : Drawing2.dwg
[Doc Mgr Event] : Document Lock Mode Will Change : Drawing2.dwg
[Doc Mgr Event] : Document Lock Mode Will Change : Drawing2.dwg
[Doc Mgr Event] : Document Lock Mode Changed : Drawing2.dwg
[Doc Mgr Event] : Document Lock Mode Changed : Drawing2.dwg
[Doc Mgr Event] : Document Lock Mode Will Change : Drawing2.dwg
[Doc Mgr Event] : Document Lock Mode Changed : Drawing2.dwg
[Doc Mgr Event] : Document Became Current : Drawing2.dwg
[Doc Mgr Event] : Document Lock Mode Will Change : Drawing2.dwg
[Doc Mgr Event] : Document Lock Mode Changed : Drawing2.dwg
[Doc Mgr Event] : Document Lock Mode Will Change : Drawing2.dwg
[Doc Mgr Event] : Document Lock Mode Will Change : Drawing2.dwg
[Doc Mgr Event] : Document Lock Mode Changed : Drawing2.dwg
[Doc Mgr Event] : Document Lock Mode Changed : Drawing2.dwg
[Doc Mgr Event] : Document Lock Mode Will Change : Drawing2.dwg
[Doc Mgr Event] : Document Lock Mode Changed : Drawing2.dwg
[Doc Mgr Event] : Document Lock Mode Will Change : Drawing2.dwg
[Doc Mgr Event] : Document Lock Mode Changed : Drawing2.dwg
[Doc Mgr Event] : Document Lock Mode Will Change : Drawing2.dwg
[Doc Mgr Event] : Document Lock Mode Changed : Drawing2.dwg
[Doc Mgr Event] : Document Lock Mode Will Change : Drawing2.dwg
[Doc Mgr Event] : Document Lock Mode Changed : Drawing2.dwg
[Doc Mgr Event] : Document Lock Mode Will Change : Drawing2.dwg
[Doc Mgr Event] : Document Lock Mode Changed : Drawing2.dwg
[Doc Mgr Event] : Document Lock Mode Will Change : Drawing2.dwg
[Doc Mgr Event] : Document Lock Mode Changed : Drawing2.dwg
[Doc Mgr Event] : Document Lock Mode Will Change : Drawing2.dwg
[Doc Mgr Event] : Document Lock Mode Changed : Drawing2.dwg
[Doc Mgr Event] : Document Lock Mode Will Change : Drawing2.dwg
[Doc Mgr Event] : Document Lock Mode Changed : Drawing2.dwg
[Doc Mgr Event] : Document Lock Mode Will Change : Drawing2.dwg
[Doc Mgr Event] : Document Lock Mode Changed : Drawing2.dwg
[Doc Mgr Event] : Document Lock Mode Will Change : Drawing2.dwg
[Doc Mgr Event] : Document Lock Mode Changed : Drawing2.dwg
[Doc Mgr Event] : Document Lock Mode Will Change : Drawing2.dwg
[Doc Mgr Event] : Document Lock Mode Changed : Drawing2.dwg
[Doc Mgr Event] : Document Lock Mode Will Change : Drawing2.dwg
[Doc Mgr Event] : Document Lock Mode Changed : Drawing2.dwg

AutoCAD menu utilities loaded.

[Doc Mgr Event] : Document Lock Mode Will Change : Drawing2.dwg
[Doc Mgr Event] : Document Lock Mode Changed : Drawing2.dwg
[Doc Mgr Event] : Document Lock Mode Will Change : Drawing2.dwg
[Doc Mgr Event] : Document Lock Mode Changed : Drawing2.dwg
[Doc Mgr Event] : Document Lock Mode Will Change : Drawing2.dwg
[Doc Mgr Event] : Document Lock Mode Changed : Drawing2.dwg
[Doc Mgr Event] : Document Lock Mode Will Change : Drawing2.dwg
[Doc Mgr Event] : Document Lock Mode Changed : Drawing2.dwg
[Doc Mgr Event] : Document Lock Mode Will Change : Drawing2.dwg
[Doc Mgr Event] : Document Lock Mode Will Change : Drawing2.dwg
[Doc Mgr Event] : Document Lock Mode Changed : Drawing2.dwg
[Doc Mgr Event] : Document Lock Mode Changed : Drawing2.dwg
[Doc Mgr Event] : Document Lock Mode Will Change : Drawing2.dwg
[Doc Mgr Event] : Document Lock Mode Changed : Drawing2.dwg
[Doc Mgr Event] : Document Lock Mode Will Change : Drawing2.dwg
[Doc Mgr Event] : Document Lock Mode Changed : Drawing2.dwg
[Doc Mgr Event] : Document Lock Mode Will Change : Drawing2.dwg
[Doc Mgr Event] : Document Lock Mode Changed : Drawing2.dwg
[Doc Mgr Event] : Document Lock Mode Will Change : Drawing2.dwg
[Doc Mgr Event] : Document Lock Mode Changed : Drawing2.dwg
[Doc Mgr Event] : Document Lock Mode Will Change : Drawing2.dwg
[Doc Mgr Event] : Document Lock Mode Changed : Drawing2.dwg
[Doc Mgr Event] : Document Lock Mode Will Change : Drawing2.dwg
[Doc Mgr Event] : Document Lock Mode Changed : Drawing2.dwg
[Doc Mgr Event] : Document Lock Mode Will Change : Drawing2.dwg
[Doc Mgr Event] : Document Lock Mode Changed : Drawing2.dwg

Regenerating model.

[Doc Mgr Event] : Document Lock Mode Will Change : Drawing2.dwg
[Doc Mgr Event] : Document Lock Mode Will Change : Drawing2.dwg
[Doc Mgr Event] : Document Lock Mode Changed : Drawing2.dwg
[Doc Mgr Event] : Document Lock Mode Changed : Drawing2.dwg
[Doc Mgr Event] : Document Lock Mode Will Change : Drawing2.dwg
[Doc Mgr Event] : Document Lock Mode Changed : Drawing2.dwg
[Doc Mgr Event] : Document Lock Mode Will Change : Drawing2.dwg
[Doc Mgr Event] : Document Lock Mode Changed : Drawing2.dwg
[Doc Mgr Event] : Document Lock Mode Will Change : Drawing2.dwg
[Doc Mgr Event] : Document Lock Mode Changed : Drawing2.dwg

... AcadDoc.lsp loaded.

AutoCAD menu utilities loaded.
[Doc Mgr Event] : Document Lock Mode Will Change : Drawing2.dwg
[Doc Mgr Event] : Document Lock Mode Changed : Drawing2.dwg
[Doc Mgr Event] : Document Lock Mode Will Change : Drawing2.dwg
[Doc Mgr Event] : Document Lock Mode Will Change : Drawing2.dwg
[Doc Mgr Event] : Document Lock Mode Changed : Drawing2.dwg
[Doc Mgr Event] : Document Lock Mode Changed : Drawing2.dwg
[Doc Mgr Event] : Document Lock Mode Will Change : Drawing2.dwg
[Doc Mgr Event] : Document Lock Mode Changed : Drawing2.dwg
[Doc Mgr Event] : Document Lock Mode Will Change : Drawing2.dwg
[Doc Mgr Event] : Document Lock Mode Changed : Drawing2.dwg
[Doc Mgr Event] : Document Lock Mode Will Change : Drawing2.dwg
[Doc Mgr Event] : Document Lock Mode Will Change : Drawing2.dwg
[Doc Mgr Event] : Document Lock Mode Changed : Drawing2.dwg
[Doc Mgr Event] : Document Lock Mode Changed : Drawing2.dwg
[Doc Mgr Event] : Document Activation Changed : False
[Doc Mgr Event] : Document Activation Changed : True
[Doc Mgr Event] : Document Lock Mode Will Change : Drawing2.dwg
[Doc Mgr Event] : Document Lock Mode Changed : Drawing2.dwg
[Doc Mgr Event] : Document Lock Mode Will Change : Drawing2.dwg
[Doc Mgr Event] : Document Lock Mode Changed : Drawing2.dwg
[Doc Mgr Event] : Document Activation Changed : False
[Doc Mgr Event] : Document Activation Changed : True
[Doc Mgr Event] : Document Lock Mode Will Change : Drawing2.dwg
[Doc Mgr Event] : Document Lock Mode Changed : Drawing2.dwg
[Doc Mgr Event] : Document Lock Mode Will Change : Drawing2.dwg
[Doc Mgr Event] : Document Lock Mode Changed : Drawing2.dwg
[Doc Mgr Event] : Document Lock Mode Will Change : Drawing2.dwg
[Doc Mgr Event] : Document Lock Mode Changed : Drawing2.dwg
[Doc Mgr Event] : Document Lock Mode Will Change : Drawing2.dwg
[Doc Mgr Event] : Document Lock Mode Changed : Drawing2.dwg
[Doc Mgr Event] : Document Lock Mode Will Change : Drawing2.dwg
[Doc Mgr Event] : Document Lock Mode Changed : Drawing2.dwg
[Doc Mgr Event] : Document Lock Mode Will Change : Drawing2.dwg
[Doc Mgr Event] : Document Lock Mode Changed : Drawing2.dwg
[Doc Mgr Event] : Document Lock Mode Will Change : Drawing2.dwg
[Doc Mgr Event] : Document Lock Mode Changed : Drawing2.dwg
Command:
[Doc Mgr Event] : Document Lock Mode Will Change : Drawing2.dwg
[Doc Mgr Event] : Document Lock Mode Changed : Drawing2.dwg
[Doc Mgr Event] : Document Activation Changed : False
[Doc Mgr Event] : Document Activation Changed : True
[Doc Mgr Event] : Document Lock Mode Will Change : Drawing2.dwg
[Doc Mgr Event] : Document Lock Mode Changed : Drawing2.dwg
[Doc Mgr Event] : Document Lock Mode Will Change : Drawing2.dwg
[Doc Mgr Event] : Document Lock Mode Changed : Drawing2.dwg
[Doc Mgr Event] : Document Lock Mode Will Change : Drawing2.dwg

 

  [/code]

 

... I truly hope this helps make (more?) sense to you now. 

 

Cheers



"How we think determines what we do, and what we do determines what we get."

Message 9 of 10
toolbox2
in reply to: BlackBox_

Got it now. Thanks for your help.
Message 10 of 10
BlackBox_
in reply to: toolbox2


@toolbox2 wrote:
Got it now. Thanks for your help.

Glad to hear it; you're very welcome. :beer:

 

Cheers



"How we think determines what we do, and what we do determines what we get."

Can't find what you're looking for? Ask the community or share your knowledge.

Post to forums  

Autodesk Design & Make Report

”Boost