Jump to content

LISP to edit DWGPROPS


eric_monceaux

Recommended Posts

I have created a template (attached) that has specific fields in the Custom tab of DWGPROPS, which is referenced in the titleblock. I wanted to see if it was possible to have a LISP that asks for the custom field info at the start of a new drawing in the command bar instead of a dialog box.

 

I have tried changing the CMDDIA variable to 0, but it doesn't help. I really like using the DWGPROPS, but it doesn't navigate like ATTEDIT does (using keyboard navigation), and I am trying to speed that process up.

 

Also, on a side note, has any leway been made on being able to add a "total number of layouts" field in AutoCAD 2010? (For Page # of #)

DWGPROPS Lisp.dwg

Link to comment
Share on other sites

Try it

;;; *********************************************** *************************
;;; * Library DWGruLispLib Copyright © 2007 DWGru Programmers Group 
;;; * 
;;; * _dwgru-Dwgprops-get-all-prop 
;;; * 
;;; * 27/12/2007 Version 0001. Vladimir Azarko (VVA) 
;;; *********************************************** *************************

(defun _dwgru-dwgprops-get-all-prop (Doc / si ret nc key value) 
;;; Returns the file's properties, set the command _dwgprops 
;;; Returns an associative list, where the key is: 
;; - For properties created by the user (tab OTHER) 
;;; Property name 
;; - For standard properties (tab PAPER) 
;;; Key field 
;;; NAME - *TITLE* 
;;; AUTHOR - *AUTHOR* 
;;; TOPIC - *SUBJECT* 
;;; KEY WORDS - *KEYWORDS* 
;;; NOTES - *COMMENTS* 
;;; Hyperlink Base - *HYPERLINK* 
;;;!! Key fields are converted to uppercase 
;;; Doc - a pointer to the  document, nil - the current 
  
;;; Example 
;;; (_dwgru-dwgprops-get-all-prop nil) ;;;(("* AUTHOR * "" VVA ") (" * COMMENTS * "" Memo ") (" * HYPERLINK * "" Base ") 
                               ;;;("* KEYWORDS * "" Key ") (" * TITLE * "" named ") (" * SUBJECT * "" R ") (" UNIQKEY "" Key ")) 

(and
(or Doc
   (setq Doc (vla-get-activeDocument (vlax-get-acad-object)))
   )
(setq si (vla-get-SummaryInfo Doc))
(setq ret (list
    (list "*AUTHOR*" (vla-get-author si))
    (list "*COMMENTS*" (vla-get-comments si))
           (list "*HYPERLINK*" (vla-get-HyperlinkBase si))
    (list "*KEYWORDS*" (vla-get-keywords si))
           (list "*TITLE*" (vla-get-Title si))
    (list "*SUBJECT*" (vla-get-Subject si))
    )
)
(setq nc (vla-numcustominfo si))
(while (> nc 0) 
(vla-GetCustomByIndex si (- nc 1) 'key 'value)
(setq ret (append ret (list(list (strcase key) value))))  
(setq nc (1- nc))
)
(vlax-release-object si)
)
ret
)   
;;; *********************************************** *************************
;;; * Library DWGruLispLib Copyright © 2007 DWGru Programmers Group 
;;; * 
;;; * _dwgru-Dwgprops-get-custom-prop 
;;; * 
;;; * 27/12/2007 Version 0001. Vladimir Azarko (VVA) 
;;; *********************************************** *************************


(defun _dwgru-dwgprops-get-custom-prop (key Doc / app counter counter2 counter3 doc dwgprops kv) 
;;; Returns the value of the property created by the user (command _dwgprops) 
;;; Returns an associative list, where the key is: 
;; - For properties created by the user (tab OTHER) 
;;; Key - a string property name (tab OTHER) 
;; - For standard properties (tab PAPER) 
;;; Key field 
;;; NAME - *TITLE* 
;;; AUTHOR - *AUTHOR* 
;;; TOPIC - *SUBJECT* 
;;; KEY WORDS - *KEYWORDS* 
;;; NOTES - *COMMENTS* 
;;; Hyperlink Base - *HYPERLINK* 
;;; 
;;; Uses the library 
;;; _dwgru-Dwgprops-get-all-prop 
;;; _dwgru-Assoc (_dwgru-assoc-multi) 
  
;;; Doc - a pointer to the  document, nil - the current 
  
 (cadr (_dwgru-assoc key (_dwgru-dwgprops-get-all-prop Doc))) 
) 
;;; *********************************************** *************************
;;; * Library DWGruLispLib Copyright © 2007 DWGru Programmers Group 
;;; * 
;;; * _dwgru-Dwgprops-set-custom-prop 
;;; * 
;;; * 27/12/2007 Version 0001. Vladimir Azarko (VVA) 
;;; *********************************************** *************************

(defun _dwgru-dwgprops-set-custom-prop (key value Doc / si) 
;;, Create in the properties of the figure (team _dwgprops bookmark OTHER) 
;;; Property with key and value value 
;;; If the property was not, it is created, otherwise the changes 
;;; Key - a string property name (tab OTHER) 
;;; Value - a string  - value of property 
;;; Uses the library 
;;; _dwgru-Dwgprops-get-custom-prop 
;;; Doc - a pointer to the document, nil - the current 
;;; Returns - nil 
;;; Example 
;;; (_dwgru-dwgprops-set-custom-prop "dwgru" "dwgru-dwgprops-set-custom-prop" nil) 

  (or Doc 
  (setq Doc (vla-Get-ActiveDocument (vlax-Get-Acad-Object))) 
    ) 
  (setq si (vla-Get-SummaryInfo Doc)) 
  (if (_dwgru-dwgprops-get-custom-prop key Doc) 
    (vla-SetCustomByKey si key value) 
    (vla-AddCustomInfo si key value) 
  ) 
) 



(defun _dwgru-assoc-multi (key lst) 
  (if (= (type key) 'str) 
    (setq key (strcase key)) 
    ); _ End of if 
  (vl-remove-if-not 
    (function 
      (lambda (a / b) 
        (and (setq b (car a)) 
             (or (and (= (type b) 'str) (= (strcase b) key)) (equal b key)) 
             ); _ End of and 
        ); _ End of lambda 
      ); _ End of function 
    lst 
    ); _ End of vl-remove-if-not 
  ); _ End of defun 
(defun _dwgru-assoc (key lst) 
  (car (_dwgru-assoc-multi key lst)) 
  ); _ End of defun 

 

Usage

(defun C:TEST () 
[color="Red"](vl-load-com) ;;; Do not forget to add[/color]
  (setq str (getstring t "\nJob Number:")) 
  (_dwgru-dwgprops-set-custom-prop "Job Number" str nil)
  (setq str (getstring "\nCustomet:")) 
  (_dwgru-dwgprops-set-custom-prop "Customer" str nil)
  (setq str (getstring t "\nAddres:")) 
  (_dwgru-dwgprops-set-custom-prop "Addres" str nil)
 
  ) 

Edited by VVA
Link to comment
Share on other sites

Ok, I loaded the lisps, but I think I did something wrong, because I get the following error:

 

Command: appload
DWGruLispLib.lsp successfully loaded.
test.lsp successfully loaded.


Command: ; error: malformed list on input

Command:
Command:
Command: test

Job Number:109-567
; error: no function definition: _DWGRU-ASSOC

Command:

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