drawing revision refer to sheet set and drawing prop attribute

drawing revision refer to sheet set and drawing prop attribute

mduvalAA6EJ
Enthusiast Enthusiast
302 Views
2 Replies
Message 1 of 3

drawing revision refer to sheet set and drawing prop attribute

mduvalAA6EJ
Enthusiast
Enthusiast

i have trouble to do want i want with this lisp can someone could help, see attached files (excuse my english) thanks

;;; 2021-nov-03 by Martin Duval from Rochon experts Infrastructel

;;; revision sheet lisp for autocad

;;; REC_REVISION

;; dwg document property (DWGPROP) add this to this lisp work...

;CurrentSheetRevisionBy

;00SheetRevisionNumber
;00SheetRevisionNumber
;00SheetRevisionDate
;00SheetIssuePurpose
;00SheetRevisionBy

;01SheetRevisionNumber
;01SheetRevisionDate
;01SheetIssuePurpose
;01SheetRevisionBy

;02SheetRevisionNumber
;02SheetRevisionDate
;02SheetIssuePurpose
;02SheetRevisionBy


(vl-load-com)

(defun c:rec_revision (/)

(setq ACADOBJECT (vlax-get-acad-object))

(setq ACADDOCUMENT (vla-get-ActiveDocument ACADOBJECT))

;;Get the SummaryInfo

(setq DPROPS (vlax-get-Property ACADDOCUMENT 'SummaryInfo))

;(setq DWGREVRN (vlax-get-Property DPROPS "CurrentSheetRevisionNumber")) ;;; SETQ DWGREVRN revision number sheetset

(setq DWGREV00RN (getpropertyvalue "156ef" "TextString"))

(setq DWGREV01RN (vla-getcustombyKey DPROPS "01SheetRevisionNumber"))
(setq DWGREV01RD (vla-getcustombyKey DPROPS "01SheetRevisionDate"))
(setq DWGREV01IP (vla-getcustombyKey DPROPS "01SheetIssuePurpose"))
(setq DWGREV01BY (vla-getcustombyKey DPROPS "01SheetRevisionBy"))

(setq DWGREV02RN (vla-getcustombyKey DPROPS "02SheetRevisionNumber"))
(setq DWGREV02RD (vla-getcustombyKey DPROPS "02SheetRevisionDate"))
(setq DWGREV02IP (vla-getcustombyKey DPROPS "02SheetIssuePurpose"))
(setq DWGREV02BY (vla-getcustombyKey DPROPS "02SheetRevisionBy"))

(cond
(/= "%%" DWGREV00RN)
(setq REVRN 100)
)

(cond
((and
(/= DWGREV01RN DWGREV00RN)
(= 100 REVRN))

;;((setpropertyvalue "156b8" "textstring" DWGREV00RN))
(vla-setcustombyKey DPROPS "01SheetRevisionNumber" DWGREVRN ) ;;; set value of custom revision number 01 if =/ revsion number sheetlist and if they are value rev 00=revsheetlist
(setq REVRN 1))
)


(cond
((and
(/= DWGREV02RN DWGREV01RN)
(= 1 REVRN))

;;((setpropertyvalue "156ea" "textstring" DWGREV00RN))
(vla-setcustombyKey DPROPS "02SheetRevisionNumber" DWGREVRN ) ;;; set value of custom revision number 01 if =/ revsion number sheetlist and if they are value rev 01=rev sheet list
(setq REVRN 2))
)

;;etc

(princ)
)

0 Likes
303 Views
2 Replies
Replies (2)
Message 2 of 3

mduvalAA6EJ
Enthusiast
Enthusiast

Hello, can someone help me i work to my Lisp routine and files this is a update of all i think is very simple to resolve the problem but i think in team is more powerfull to have result i do my possible and i will work on it to resolve it later if no solution because it is very important to me... excuse my english i am french and also i try to program in lisp but i am not very good.. i learn it

 

here the program the files to run it are attached in this message 

 

thank you very much

 

 

;;; 2021-nov-03 by Martin Duval from Rochon experts Infrastructel

;;; revision sheet lisp for autocad

;;; REC_REVISION REVISION 2021-NOV-11-1


;; dwg document property (DWGPROP) add this to this lisp work...

;01SheetRevisionNumber
;01SheetRevisionDate
;01SheetIssuePurpose
;01SheetRevisionBy

;02SheetRevisionNumber
;02SheetRevisionDate
;02SheetIssuePurpose
;02SheetRevisionBy

; or use the template 

;;NEED ALSO BLOCK REFERENCE SSREV

;;;WORK WITH THE SHEET SET MANAGER OR FORCE THE DEFAULT FIELD VALUE IN SSREV BLOCK REFERENCE

(vl-load-com)

(defun c:rec_revision
(x / BlkName DwgName OldPath SSREVRN SSREVRD SSREVIP SSREVBY PNAME VERIFYSI TMP EPROP EVALUE DOC DB SI REVRN)

(princ "SheetSet REVISION\: " DWGREVSSRN)
(princ "REVISION A\: " DWGREVARN)
(princ "REVISION B\: " DWGREVBRN)

;;;CHEK IF "TESTSheetRevisionNumber" EXIST ON CUSTOM DRAWING PROPERTY IF NOT CREATE IT

(setq DOC (vla-get-ActiveDocument (vlax-get-Acad-Object)))
(setq DB (vla-get-Database DOC))
(setq SI (vla-get-SummaryInfo DB))
(setq VERIFYSI (vla-get-summaryinfo
(vla-get-activedocument (Vlax-get-acad-object))
)
TMP 0
)

;IN: PNAME - property name to search as string (NOT case sensitive)
;OUT: returns t if property exists, else nil


(vla-GetCustomByIndex VERIFYSI TMP 'EPROP 'EVALUE)

(while (and (not (eq (setq EPROP (strcase EPROP))
(setq PNAME (strcase "01SheetRevisionNumber"))
)
)
(< (+ TMP 1) (vla-numcustominfo VERIFYSI))
)
(setq TMP (1+ TMP))
(vla-GetCustomByIndex VERIFYSI TMP 'EPROP 'EVALUE)
) ;while
(if (eq EPROP "01SheetRevisionNumber")
t
nil
)
)

 

;; MAIN PROGRAM


;;;; get value of attributes to lisp variables function DWGREVRN - DWGREVRD - DWGREVIP - DWGREVBY

;(function
; (lambda (x / BlkName DwgName OldPath)

(setq BlkName "SSREV")
(setq AttTagRN "SSREVRN")

(vlax-for lo (vla-get-Layouts x)
(vlax-for obj (vla-get-Block lo)
(if
(and
(= (vla-get-ObjectName obj) "AcDBlockreference")
(= (vla-get-Name obj) BlkName)
)
(foreach attRN (vlax-invoke obj 'GetAttributes)
(setq DWGREVRN (vla-get-TextString attRN)
)))))

(setq BlkName "SSREV")
(setq AttTagRD "SSREVRD")

(vlax-for lo (vla-get-Layouts x)
(vlax-for obj (vla-get-Block lo)
(if
(and
(= (vla-get-ObjectName obj) "AcDBlockreference")
(= (vla-get-Name obj) BlkName)
)
(foreach attRD (vlax-invoke obj 'GetAttributes)
(setq DWGREVRD (vla-get-TextString attRD)
)))))

(setq BlkName "SSREV")
(setq AttTagIP "SSREVIP")

(vlax-for lo (vla-get-Layouts x)
(vlax-for obj (vla-get-Block lo)
(if
(and
(= (vla-get-ObjectName obj) "AcDBlockreference")
(= (vla-get-Name obj) BlkName)
)
(foreach attIP (vlax-invoke obj 'GetAttributes)
(setq DWGREVIP (vla-get-TextString attIP)
)))))

(setq BlkName "SSREV")
(setq AttTagRV "SSREVBY")

(vlax-for lo (vla-get-Layouts x)
(vlax-for obj (vla-get-Block lo)
(if
(and
(= (vla-get-ObjectName obj) "AcDBlockreference")
(= (vla-get-Name obj) BlkName)
)
(foreach attRV (vlax-invoke obj 'GetAttributes)
(setq DWGREVBY (vla-get-TextString attRV)
)))))


;;;; SET VALUE TO VARIABLES DWGREV(#)RN - RD - IP - BY from DWGPROP CUSTOM PARAMETRES PRESET IN TEMPLATE OR DRAWING

(setq DWGREVARN (vla-getcustombyKey SI "01SheetRevisionNumber"))
(setq DWGREVARD (vla-getcustombyKey SI "01SheetRevisionDate"))
(setq DWGREVAIP (vla-getcustombyKey SI "01SheetIssuePurpose"))
(setq DWGREVABY (vla-getcustombyKey SI "01SheetRevisionBy"))

(setq DWGREVBRN (vla-getcustombyKey SI "02SheetRevisionNumber"))
(setq DWGREVBRD (vla-getcustombyKey SI "02SheetRevisionDate"))
(setq DWGREVBIP (vla-getcustombyKey SI "02SheetIssuePurpose"))
(setq DWGREVBBY (vla-getcustombyKey SI "02SheetRevisionBy"))

 

;;; CONDITION IF BY DEFAULT %% IS THE VALUE OF SHEET SET REVISION OR NOT FOR EACH LISP VARIABLE DWGREVSS##


(cond
(/= "%%" DWGREVSSRN)
(setq REVRN 100)
)

;;; set value of custom revision number A if =/ revsion number sheetlist and if they are value rev 00=revsheetlist
(if
(and
(/= DWGREVARN DWGREVSSRN)
(= 100 REVRN)
)
(vla-setcustombyKey SI "01SheetRevisionNumber" 'DWGREVSSRN)
)

;;; set value REVRN1 IF CHANGE MADE ON VARIABLE DWGREVARN = DWGREVSSRN

(cond
(= DWGREVSSRN DWGREVARN)
(setq REVRN 1)
)


;;; set value of custom revision number A if =/ revsion number sheetlist and if they are value rev A=rev sheet list
(if
(and
(/= DWGREVBRN DWGREVARN)
(= 1 REVRN)
)
(vla-setcustombyKey SI "02SheetRevisionNumber" 'DWGREVSSRN)
)

;;; set value REVRN1 IF CHANGE MADE ON VARIABLE DWGREVBRN = DWGREVSSRN

(cond
(= DWGREVSSRN DWGREVBRN)
(setq REVRN 2)
)


;;etc THE PROGRAM IS TESTING FOR REVISION NUMBER

 


(vlax-release-object SI)
(vlax-release-object DB)
(vlax-release-object DOC)

 


(princ)

 

 

0 Likes
Message 3 of 3

mduvalAA6EJ
Enthusiast
Enthusiast

why too few argument??

 

 

;;; 2021-nov-03 by Martin Duval from Rochon experts Infrastructel

;;; revision sheet lisp for autocad

;;; REC_REVISION REVISION 2021-NOV-12-1


;; dwg document property (DWGPROP) add this to this lisp work...

;01SheetRevisionNumber
;01SheetRevisionDate
;01SheetIssuePurpose
;01SheetRevisionBy

;02SheetRevisionNumber
;02SheetRevisionDate
;02SheetIssuePurpose
;02SheetRevisionBy

;or use the template

;;NEED ALSO BLOCK REFERENCE SSREV

;;;WORK WITH THE SHEET SET MANAGER OR FORCE THE DEFAULT FIELD VALUE IN SSREV BLOCK REFERENCE

(vl-load-com)

(defun c:rec_revision
(SSREVRN SSREVRD SSREVIP SSREVBY PNAME VERIFYSI TMP DOC DB SI REVRN EPROP EVALUE )

(princ "SheetSet REVISION " DWGREVSSRN)
(princ "REVISION 01 " DWGREVARN)
(princ "REVISION 02 " DWGREVBRN)

;;;CHEK IF "TESTSheetRevisionNumber" EXIST ON CUSTOM DRAWING PROPERTY IF NOT CREATE IT

(setq DOC (vla-get-ActiveDocument (vlax-get-Acad-Object)))
(setq DB (vla-get-Database DOC))
(setq SI (vla-get-SummaryInfo DB))
(setq VERIFYSI (vla-get-summaryinfo (vla-get-activedocument (Vlax-get-acad-object)))TMP 0 )

;IN: PNAME - property name to search as string (NOT case sensitive)
;OUT: returns t if property exists, else nil


(vla-GetCustomByIndex VERIFYSI TMP 'EPROP 'EVALUE)

(while (and (not (eq (setq EPROP (strcase EPROP))
(setq PNAME (strcase "01SheetRevisionNumber"))
)
)
(< (+ TMP 1) (vla-numcustominfo VERIFYSI))
)
(setq TMP (1+ TMP))
(vla-GetCustomByIndex VERIFYSI TMP 'EPROP 'EVALUE)
) ;while
(if (eq EPROP "01SheetRevisionNumber")
t
nil
)

 

;; MAIN PROGRAM


;;;; get value of attributes to lisp variables function DWGREVRN - DWGREVRD - DWGREVIP - DWGREVBY

(function
(lambda (x / BlkName)

(setq BlkName "SSREV")
(setq AttTagRN "SSREVRN")

(vlax-for lo (vla-get-Layouts x)
(vlax-for obj (vla-get-Block lo)
(if
(and
(= (vla-get-ObjectName obj) "AcDBlockreference")
(= (vla-get-Name obj) BlkName)
)
(foreach AttTagRN (vlax-invoke obj 'GetAttributes)
(setq DWGREVRN (vla-get-TextString AttTagRN)
)))))
))

(function
(lambda (x / BlkName)

(setq BlkName "SSREV")
(setq AttTagRD "SSREVRD")

(vlax-for lo (vla-get-Layouts x)
(vlax-for obj (vla-get-Block lo)
(if
(and
(= (vla-get-ObjectName obj) "AcDBlockreference")
(= (vla-get-Name obj) BlkName)
)
(foreach AttTagRD (vlax-invoke obj 'GetAttributes)
(setq DWGREVRD (vla-get-TextString AttTagRD)
)))))
))

(function
(lambda (x / BlkName)
(setq BlkName "SSREV")
(setq AttTagIP "SSREVIP")

(vlax-for lo (vla-get-Layouts x)
(vlax-for obj (vla-get-Block lo)
(if
(and
(= (vla-get-ObjectName obj) "AcDBlockreference")
(= (vla-get-Name obj) BlkName)
)
(foreach AttTagIP (vlax-invoke obj 'GetAttributes)
(setq DWGREVIP (vla-get-TextString AttTagIP)
)))))
))

(function
(lambda (x / BlkName)
(setq BlkName "SSREV")
(setq AttTagRV "SSREVBY")

(vlax-for lo (vla-get-Layouts x)
(vlax-for obj (vla-get-Block lo)
(if
(and
(= (vla-get-ObjectName obj) "AcDBlockreference")
(= (vla-get-Name obj) BlkName)
)
(foreach AttTagRV (vlax-invoke obj 'GetAttributes)
(setq DWGREVBY (vla-get-TextString AttTagRV)
)))))
))

;;;; SET VALUE TO VARIABLES DWGREV(#)RN - RD - IP - BY from DWGPROP CUSTOM PARAMETRES PRESET IN TEMPLATE OR DRAWING

(setq DWGREVARN (vla-getcustombyKey SI "01SheetRevisionNumber"))
(setq DWGREVARD (vla-getcustombyKey SI "01SheetRevisionDate"))
(setq DWGREVAIP (vla-getcustombyKey SI "01SheetIssuePurpose"))
(setq DWGREVABY (vla-getcustombyKey SI "01SheetRevisionBy"))

(setq DWGREVBRN (vla-getcustombyKey SI "02SheetRevisionNumber"))
(setq DWGREVBRD (vla-getcustombyKey SI "02SheetRevisionDate"))
(setq DWGREVBIP (vla-getcustombyKey SI "02SheetIssuePurpose"))
(setq DWGREVBBY (vla-getcustombyKey SI "02SheetRevisionBy"))

 

;;; CONDITION IF BY DEFAULT %% IS THE VALUE OF SHEET SET REVISION OR NOT FOR EACH LISP VARIABLE DWGREVSS##


(cond
(/= "%%" DWGREVSSRN)
(setq REVRN 100)
)

;;; set value of custom revision number A if =/ revsion number sheetlist and if they are value rev 00=revsheetlist
(if
(and
(/= DWGREVARN DWGREVSSRN)
(= 100 REVRN)
)
(vla-setcustombyKey SI "01SheetRevisionNumber" 'DWGREVSSRN)
)

;;; set value REVRN1 IF CHANGE MADE ON VARIABLE DWGREVARN = DWGREVSSRN

(cond
(= DWGREVSSRN DWGREVARN)
(setq REVRN 1)
)


;;; set value of custom revision number A if =/ revsion number sheetlist and if they are value rev A=rev sheet list
(if
(and
(/= DWGREVBRN DWGREVARN)
(= 1 REVRN)
)
(vla-setcustombyKey SI "02SheetRevisionNumber" 'DWGREVSSRN)
)

;;; set value REVRN1 IF CHANGE MADE ON VARIABLE DWGREVBRN = DWGREVSSRN

(cond
(= DWGREVSSRN DWGREVBRN)
(setq REVRN 2)
)


;;etc THE PROGRAM IS TESTING FOR REVISION NUMBER

 

(vlax-release-object VERIFYSI)
(vlax-release-object SI)
(vlax-release-object DB)
(vlax-release-object DOC)

(princ)
)

0 Likes