sakinen Posted July 10, 2011 Share Posted July 10, 2011 Im trying to automate the process of creating layouts. Also i need a lisp function to use to create a viewport. I basically need to make a viewport in a certain layer (non printable of course) with fit option (it takes the hole printing area of paper space) and then set the scale for this viewport. Scale can be found within an attribute of a block already inserted in drawing. If someone has some ideas please can you share it with me. Thanks in advance. Quote Link to comment Share on other sites More sharing options...
Tharwat Posted July 10, 2011 Share Posted July 10, 2011 Change the name of the name according to the one you need as noticed in the routine . (defun c:Test (/ p1 p2 e)(vl-load-com) ;; Tharwat 10. 07. 2011 (if (eq (vla-get-activespace (vla-get-activedocument (vlax-get-acad-object)) ) 0 ) (if (and (setq p1 (getpoint "\n First corner fo Viewport :")) (setq p2 (getcorner p1 "\n Second corner fo Viewport :")) ) (progn (command "_.mview" "_non" p1 "_non" p2) (vla-put-customscale (setq e (vlax-ename->vla-object (entlast))) acVpScaleToFit ) (vla-put-layer e [color=red][b]"0"[/b][/color])[color=red]; <<-- Change the "0" to your favourite layer[/color] ) (princ) ) (princ "\n you must be in paper space world !!") ) (princ) ) Tharwat 1 Quote Link to comment Share on other sites More sharing options...
sakinen Posted July 10, 2011 Author Share Posted July 10, 2011 First of all thanks a lot. Ive managed to test it, but i didn't understood the scale part. It offers me to draw viewport. This part is ok, but pulling attribute value from a block and use it for scale i cant resolve. Quote Link to comment Share on other sites More sharing options...
Tharwat Posted July 10, 2011 Share Posted July 10, 2011 What kind of attributes you have in a block ? Quote Link to comment Share on other sites More sharing options...
Guest kruuger Posted July 10, 2011 Share Posted July 10, 2011 (defun c:TEST (/ P W H) (if (and (setq P (getpoint "\nSelect center point of VIEPORT: ")) (setq W (getreal "\nSelect width of VIEPORT: ")) (setq H (getreal "\nSelect height of VIEPORT: ")) ) (progn (vla-Display (vla-AddPViewport (vla-Get-PaperSpace (vla-Get-ActiveDocument (vlax-Get-Acad-Object) ) ) (vlax-3D-Point P) W H ) :vlax-true ) ) (princ "\n** Invalid input **") ) (princ) ) vla viewport k. Quote Link to comment Share on other sites More sharing options...
Tharwat Posted July 11, 2011 Share Posted July 11, 2011 kruuger . just read this but pulling attribute value from a block and use it for scale i cant resolve. Regards. Quote Link to comment Share on other sites More sharing options...
Lee Mac Posted July 11, 2011 Share Posted July 11, 2011 Nice coding Kruuger I tweaked it a little for a more intuitive input: (defun c:test ( / p1 p2 ) ;; Kruuger's code, tweaked by Lee Mac (if (and (setq p1 (getpoint "\nSpecify First Corner of Viewport: ")) (setq p2 (getcorner "\nSpecify Opposite Corner of Viewport: " p1)) ) (progn (setq p1 (trans p1 1 0) p2 (trans p2 1 0) ) (vla-Display (vla-AddPViewport (vla-Get-PaperSpace (vla-Get-ActiveDocument (vlax-Get-Acad-Object))) (vlax-3D-Point (mapcar '(lambda ( a b ) (/ (+ a b) 2.)) p1 p2)) (abs (- (car p1) (car p2))) (abs (- (cadr p1) (cadr p2))) ) :vlax-true ) ) ) (princ) ) 1 Quote Link to comment Share on other sites More sharing options...
sakinen Posted July 11, 2011 Author Share Posted July 11, 2011 What kind of attributes you have in a block ? Its just the number for custom setting of the viewport scale. For example i have a titleblock and in it i defined my scale 1:100, so i need to make a viewport with a scale 0.01. It would be nice to lock it inside the lisp while doing all this stuff. Quote Link to comment Share on other sites More sharing options...
Lee Mac Posted July 11, 2011 Share Posted July 11, 2011 Perhaps these will help you read your attribute. Set the VP Scale using vla-put-customscale Lock the VP using vla-put-displaylocked Quote Link to comment Share on other sites More sharing options...
sakinen Posted July 11, 2011 Author Share Posted July 11, 2011 Thank you Lee Mac and Kruuger! Unfortunately i cant see the attribute extraction from block to use as a scale in the code. Sorry if i am a bit annoying, but i want to understand a code and not just copy paste it. As for the viewport making, I dont want to pick points. Just like type in the command (-vports), and select fit as an option and that's it. Quote Link to comment Share on other sites More sharing options...
sakinen Posted July 11, 2011 Author Share Posted July 11, 2011 Perhaps these will help you read your attribute. Set the VP Scale using vla-put-customscale Lock the VP using vla-put-displaylocked Thanks a lot Lee. This will be useful allright. Quote Link to comment Share on other sites More sharing options...
Guest kruuger Posted July 11, 2011 Share Posted July 11, 2011 Nice coding Kruuger I tweaked it a little for a more intuitive input: (defun c:test ( / p1 p2 ) ;; Kruuger's code, tweaked by Lee Mac (if (and (setq p1 (getpoint "\nSpecify First Corner of Viewport: ")) (setq p2 (getcorner "\nSpecify Opposite Corner of Viewport: " p1)) ) (progn (setq p1 (trans p1 1 0) p2 (trans p2 1 0) ) (vla-Display (vla-AddPViewport (vla-Get-PaperSpace (vla-Get-ActiveDocument (vlax-Get-Acad-Object))) (vlax-3D-Point (mapcar '(lambda ( a b ) (/ (+ a b) 2.)) p1 p2)) (abs (- (car p1) (car p2))) (abs (- (cadr p1) (cadr p2))) ) :vlax-true ) ) ) (princ) ) thanks Lee. Tweaked code saved sakinen probalby you want something like this ? see attached. type MVP and select border. it get scale from attribute border and create viewport in paper scale. also create hyperlink between viewport and boarder (only WCS) i try to create something to speed up making viewport. we draw boarder in model (it is faster then work in paper space with many vport) and then automatically create vport with scale, description etc (all with vla). kruuger v0.03.dwg Make Viewport v0.03.lsp Quote Link to comment Share on other sites More sharing options...
sakinen Posted July 11, 2011 Author Share Posted July 11, 2011 Tried it. Didn't work for me. Good idea thou. Its probably something wrong i am doing. Quote Link to comment Share on other sites More sharing options...
Guest kruuger Posted July 11, 2011 Share Posted July 11, 2011 Tried it. Didn't work for me. Good idea thou. Its probably something wrong i am doing. any error ? what is wrong ? Quote Link to comment Share on other sites More sharing options...
Tharwat Posted July 11, 2011 Share Posted July 11, 2011 Tried it. Didn't work for me. Good idea thou. Its probably something wrong i am doing. Could you bring a copy of your block in dwg format ? Quote Link to comment Share on other sites More sharing options...
Kowal Posted November 5, 2015 Share Posted November 5, 2015 How to modify the code to return to paper? (defun c:vtest ( / p1 p2 d) ;; Kruuger's code, tweaked by Lee Mac (if (and (setq p1 (getpoint "\nSpecify First Corner of Viewport: ")) (setq p2 (getcorner "\nSpecify Opposite Corner of Viewport: " p1)) ) (progn (setq p1 (trans p1 1 0) p2 (trans p2 1 0) ) (vla-Display (vla-AddPViewport (vla-Get-PaperSpace (setq d (vla-Get-ActiveDocument (vlax-Get-Acad-Object)))) (vlax-3D-Point (mapcar '(lambda ( a b ) (/ (+ a b) 2.)) p1 p2)) (abs (- (car p1) (car p2))) (abs (- (cadr p1) (cadr p2))) ) :vlax-true ) [color="red"](vla-put-mspace d :vlax-true) (command "_.Zoom" "_E") (command "_.Zoom" "_W") (?)[/color] ) ) (princ) ) Did not work. (vla-put-mspace d :vlax-false) and (command "_.pspace") Quote Link to comment Share on other sites More sharing options...
Lee Mac Posted November 5, 2015 Share Posted November 5, 2015 This works for me: (defun c:vtest ( / app doc pt1 pt2 ) ;; Kruuger's code, tweaked by Lee Mac (if (and (setq pt1 (getpoint "\nSpecify first corner of viewport: ")) (setq pt2 (getcorner "\nSpecify opposite corner of viewport: " pt1)) ) (progn (setq app (vlax-get-acad-object) doc (vla-get-activedocument app) pt1 (trans pt1 1 0) pt2 (trans pt2 1 0) ) (vla-display (vla-addpviewport (vla-get-paperspace doc) (vlax-3D-point (mapcar '(lambda ( a b ) (/ (+ a b) 2.)) pt1 pt2)) (abs (- (car pt1) (car pt2))) (abs (- (cadr pt1) (cadr pt2))) ) :vlax-true ) (vla-put-mspace doc :vlax-true) (vla-zoomextents app) (vla-put-mspace doc :vlax-false) ) ) (princ) ) (vl-load-com) (princ) Quote Link to comment Share on other sites More sharing options...
Kowal Posted November 5, 2015 Share Posted November 5, 2015 Now it works, thank you. Quote Link to comment Share on other sites More sharing options...
Lee Mac Posted November 5, 2015 Share Posted November 5, 2015 You're most welcome. Quote Link to comment Share on other sites More sharing options...
Zohaib khan Posted August 27, 2020 Share Posted August 27, 2020 hello everyone...i need lispo file which automatically pick the scale of viewport and give it to me in desire units so i can easily put it in my title block...i dont know i am asking the right thing or not but someone pls guide me... Quote Link to comment Share on other sites More sharing options...
Recommended Posts
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.