Author Topic: Better coding method?  (Read 1889 times)

0 Members and 1 Guest are viewing this topic.

Biscuits

  • Swamp Rat
  • Posts: 502
Better coding method?
« on: February 14, 2017, 11:48:54 AM »
Just wondering if there would be a better/cleaner or more condensed way to write this code.
I will need to go as far as 30 pages not just the 3 you see below and it could get rather lengthy.
Ideas would be appreciated...thanks


Code: [Select]

; Routine to copy and past each page in Model Space to Paperspace
; Currently written for up to (30 Pages)
; All named views will be deleted
; All Layouts will be deleted
; User may insert selected Layouts from "PageSetups.dwg"

; XXXXXXXXXXX  WARNING: XXXXXXXXX

;               Must be done in sequence beginning with page 1
;               Each original page in Model space will be deleted
;               If a mistake is made an UNDO will be necessary

(defun C:MS2PS_COPY  ()

(COMMAND "REGENAUTO" "ON")
(COMMAND "ZOOM" "S" ".8X")

(initdia 1)

(COMMAND "LAYOUT" "TEMPLATE"  "PageSetups.dwg")
(COMMAND "LAYOUT" "DELETE"  "Layout1")

(COMMAND "COPYBASE" PAUSE "WINDOW" PAUSE PAUSE "")
(COMMAND "LAYOUT" "SET" "01")
(COMMAND "PASTECLIP" "0,0")
(COMMAND "ZOOM" "EXTENTS")
(COMMAND "LAYOUT" "SET" "MODEL")
(COMMAND "ERASE" "PREVIOUS" "")

(COMMAND "COPYBASE" PAUSE "WINDOW" PAUSE PAUSE "")
(COMMAND "LAYOUT" "SET" "02")
(COMMAND "PASTECLIP" "0,0")
(COMMAND "ZOOM" "EXTENTS")
(COMMAND "LAYOUT" "SET" "MODEL")
(COMMAND "ERASE" "PREVIOUS" "")

(COMMAND "COPYBASE" PAUSE "WINDOW" PAUSE PAUSE "")
(COMMAND "LAYOUT" "SET" "03")
(COMMAND "PASTECLIP" "0,0")
(COMMAND "ZOOM" "EXTENTS")
(COMMAND "LAYOUT" "SET" "MODEL")
(COMMAND "ERASE" "PREVIOUS" "")

)


Lee Mac

  • Seagull
  • Posts: 12913
  • London, England
Re: Better coding method?
« Reply #1 on: February 14, 2017, 12:34:15 PM »
Hint: foreach | while | repeat

dubb

  • Swamp Rat
  • Posts: 1105
Re: Better coding method?
« Reply #2 on: February 14, 2017, 03:54:45 PM »
I not an expert lisper, but here is what I have.
Code: [Select]
(defun C:MS2PS_COPY  ()

(COMMAND "REGENAUTO" "ON")
(COMMAND "ZOOM" "S" ".8X")

(initdia 1)

(COMMAND "LAYOUT" "TEMPLATE"  "PageSetups.dwg")
(COMMAND "LAYOUT" "DELETE"  "Layout1")
  (setq pages (getint "\nHow many pages?: "))
  (setq laynum 0)
  (repeat pages
    (setq laynum (+ laynum 1))
    (func (itoa laynum))
  )
  )

(defun func(laynum / )
(COMMAND "COPYBASE" PAUSE "WINDOW" PAUSE PAUSE "")
(COMMAND "LAYOUT" "SET" laynum)
(COMMAND "PASTECLIP" "0,0")
(COMMAND "ZOOM" "EXTENTS")
(COMMAND "LAYOUT" "SET" "MODEL")
(COMMAND "ERASE" "PREVIOUS" "")
  (princ)
)
I did with without adding "0" to the layout name.
« Last Edit: February 14, 2017, 04:02:33 PM by dubb »

Biscuits

  • Swamp Rat
  • Posts: 502
Re: Better coding method?
« Reply #3 on: February 15, 2017, 04:56:10 PM »
Thanks guys for the starting point.

Lee Mac trying to go down that path.
Dubb your routine works great, struggling to add "o" to layout name though.

dubb

  • Swamp Rat
  • Posts: 1105
Re: Better coding method?
« Reply #4 on: February 15, 2017, 06:15:26 PM »
Thanks guys for the starting point.

Lee Mac trying to go down that path.
Dubb your routine works great, struggling to add "o" to layout name though.

Your welcome.
Here is a quick update to add the "0".
This should work with layouts named
01 02 03 04 05 06.....10 12 13 etc.

I replaced
Code: [Select]
(COMMAND "LAYOUT" "SET" laynum)
with this
Code: [Select]
(if (> (atoi laynum) 10)
  (COMMAND "LAYOUT" "SET" laynum)
  (COMMAND "LAYOUT" "SET" (strcat "0" laynum))
  )

Biscuits

  • Swamp Rat
  • Posts: 502
Re: Better coding method?
« Reply #5 on: February 16, 2017, 12:34:17 PM »
Thank you Dubb...works like a charm. I tried a variety of ways and got nowhere.
Ya got a cold one comin!

Biscuits

  • Swamp Rat
  • Posts: 502
Re: Better coding method?
« Reply #6 on: March 10, 2017, 02:10:11 PM »
Here's the final version of my code. But there is a problem in moving the tenth page to layout 10.
It moves it to 0,0 in modelspace, moves on to 11 and proceeds correctly from then on.
Any ideas how to fix? Makes no sense to me.

Thanks

Code: [Select]
(defun C:MS2PS_COPY  ()

(COMMAND "REGENAUTO" "ON")
(COMMAND "ZOOM" "S" ".8X")

(initdia 1)
(setq pages (length (layoutlist)))
;  (setq pages (getint "\nHow many pages?: "))
  (setq laynum 0)
  (repeat pages
    (setq laynum (+ laynum 1))
    (func (itoa laynum))
  )
  )

(defun func(laynum / )
(COMMAND "COPYBASE" PAUSE "WINDOW" PAUSE PAUSE "")

(if (> (atoi laynum) 10)
  (COMMAND "LAYOUT" "SET" laynum)
  (COMMAND "LAYOUT" "SET" (strcat "0" laynum))
  )

(COMMAND "PASTECLIP" "0,0")
(COMMAND "ZOOM" "EXTENTS")
(COMMAND "LAYOUT" "SET" "MODEL")
(COMMAND "ERASE" "PREVIOUS" "")
  (princ)
)

Lee Mac

  • Seagull
  • Posts: 12913
  • London, England
Re: Better coding method?
« Reply #7 on: March 10, 2017, 05:20:10 PM »
Code: [Select]
(> (atoi laynum) 10)
Should be:
Code: [Select]
(> (atoi laynum) 9)

Biscuits

  • Swamp Rat
  • Posts: 502
Re: Better coding method?
« Reply #8 on: March 14, 2017, 11:40:23 AM »
Thanks Lee, that was the ticket!