tzframpton Posted October 25, 2013 Share Posted October 25, 2013 I'm inquiring to see if there's a LISP roaming around that allows you to select equally spaced 2D objects (usually identical objects) then stretch them along any axis with the cursor, maintaining an equal distance as you lengthen or shorten the overall distance. I'm not looking to use the current Array function as it's cumbersome, but if a good Macro or equivalent exists to make my life easier on this, I'd surely but up to it as well. Hopefully that made sense. Thanks in advance!! Quote Link to comment Share on other sites More sharing options...
ReMark Posted October 25, 2013 Share Posted October 25, 2013 That certainly sounds familiar I just can't recall where I saw a dynamic block like that. I'm kind of surprised you did not find one yourself. You tend to be pretty resourceful. Maybe over at the AUGI website? Quote Link to comment Share on other sites More sharing options...
tzframpton Posted October 25, 2013 Author Share Posted October 25, 2013 That certainly sounds familiar I just can't recall where I saw a dynamic block like that. I'm kind of surprised you did not find one yourself. You tend to be pretty resourceful. Maybe over at the AUGI website? I'm not looking for a dynamic block.... just want to select entities and stretch. Say, four circles spaced 1" apart (4" total). Select them and pick the first circle cen pt1 then the last circle cen pt2 then stretch to 8", all four circles would be now 2" apart. And I've searched online with Google on this site and a couple others and can't find exactly what I'm looking for. I'm positive it exists though. Quote Link to comment Share on other sites More sharing options...
troggarf Posted October 25, 2013 Share Posted October 25, 2013 There are a few different ones to choose from here: http://www.theswamp.org/index.php?topic=37459.msg424991#msg424991 Quote Link to comment Share on other sites More sharing options...
ReMark Posted October 25, 2013 Share Posted October 25, 2013 Once again, it sounds awfully familiar but I just can't recall where I may have come across something like that unless it was one of Lee Mac's custom lisp routines. Maybe his Dynamic Offset routine? Quote Link to comment Share on other sites More sharing options...
tzframpton Posted October 25, 2013 Author Share Posted October 25, 2013 There are a few different ones to choose from here: http://www.theswamp.org/index.php?topic=37459.msg424991#msg424991 Thank you very much for the suggestion, I do sincerely appreciate it; however, I cannot access that site as I am not a member. Quote Link to comment Share on other sites More sharing options...
ReMark Posted October 25, 2013 Share Posted October 25, 2013 Mr. Frampton if you would be so kind as to check your private messages in about 60 seconds. Thanks. Quote Link to comment Share on other sites More sharing options...
tzframpton Posted October 25, 2013 Author Share Posted October 25, 2013 Replied. Quote Link to comment Share on other sites More sharing options...
ReMark Posted October 25, 2013 Share Posted October 25, 2013 Acknowledged. However, there is one slight problem. Return to your messages. Quote Link to comment Share on other sites More sharing options...
rkent Posted October 25, 2013 Share Posted October 25, 2013 I would suggest you work with the array command and get familiar with it. What you want to do is pretty easy with the associative array properties. I like OOTB solutions rather than the add ons, but that is just me. Quote Link to comment Share on other sites More sharing options...
Lee Mac Posted October 26, 2013 Share Posted October 26, 2013 Try the following Tannar: ([color=BLUE]defun[/color] c:myarray ( [color=BLUE]/[/color] a b d i l o p q s v ) ([color=BLUE]if[/color] ([color=BLUE]and[/color] ([color=BLUE]setq[/color] s ([color=BLUE]ssget[/color] [color=MAROON]"_:L"[/color])) ([color=BLUE]setq[/color] p ([color=BLUE]getpoint[/color] [color=MAROON]"\nSpecify start point of array: "[/color])) ([color=BLUE]setq[/color] q ([color=BLUE]getpoint[/color] p [color=MAROON]"\nSpecify ent point of array: "[/color])) ) ([color=BLUE]progn[/color] ([color=BLUE]setq[/color] v ([color=BLUE]mapcar[/color] '[color=BLUE]-[/color] q p)) ([color=BLUE]repeat[/color] ([color=BLUE]setq[/color] i ([color=BLUE]sslength[/color] s)) ([color=BLUE]setq[/color] o ([color=BLUE]vlax-ename->vla-object[/color] ([color=BLUE]ssname[/color] s ([color=BLUE]setq[/color] i ([color=BLUE]1-[/color] i))))) ([color=BLUE]vla-getboundingbox[/color] o 'a 'b) ([color=BLUE]setq[/color] l ([color=BLUE]cons[/color] ([color=BLUE]cons[/color] o ([color=BLUE]mapcar[/color] '([color=BLUE]lambda[/color] ( a b ) ([color=BLUE]/[/color] ([color=BLUE]+[/color] a b) 2.0)) ([color=BLUE]vlax-safearray->list[/color] a) ([color=BLUE]vlax-safearray->list[/color] b) ) ) l ) ) ) ([color=BLUE]setq[/color] l ([color=BLUE]vl-sort[/color] l '([color=BLUE]lambda[/color] ( a b ) ([color=BLUE]<[/color] ([color=BLUE]caddr[/color] ([color=BLUE]trans[/color] ([color=BLUE]cdr[/color] a) 0 v)) ([color=BLUE]caddr[/color] ([color=BLUE]trans[/color] ([color=BLUE]cdr[/color] b) 0 v)) ) ) ) ) ([color=BLUE]setq[/color] n ([color=BLUE]if[/color] ([color=BLUE]cdr[/color] l) ([color=BLUE]1-[/color] ([color=BLUE]length[/color] l)) 1.0) v ([color=BLUE]mapcar[/color] '[color=BLUE]/[/color] v ([color=BLUE]list[/color] n n n)) p ([color=BLUE]mapcar[/color] '[color=BLUE]+[/color] ([color=BLUE]cdar[/color] l) v) ) ([color=BLUE]foreach[/color] x ([color=BLUE]cdr[/color] l) ([color=BLUE]vlax-invoke[/color] ([color=BLUE]car[/color] x) 'move ([color=BLUE]cdr[/color] x) p) ([color=BLUE]setq[/color] p ([color=BLUE]mapcar[/color] '[color=BLUE]+[/color] p v)) ) ) ) ([color=BLUE]princ[/color]) ) ([color=BLUE]vl-load-com[/color]) ([color=BLUE]princ[/color]) Quote Link to comment Share on other sites More sharing options...
tzframpton Posted October 26, 2013 Author Share Posted October 26, 2013 Perfect!! Thanks again Lee. This really helps me out spacing items in my 1-Line Diagrams. Quote Link to comment Share on other sites More sharing options...
Lee Mac Posted October 26, 2013 Share Posted October 26, 2013 You're most welcome Tannar, happy to help Quote Link to comment Share on other sites More sharing options...
ajax30 Posted September 2, 2014 Share Posted September 2, 2014 Try the following Tannar: ([color=BLUE]defun[/color] c:myarray ( [color=BLUE]/[/color] a b d i l o p q s v ) ([color=BLUE]if[/color] ([color=BLUE]and[/color] ([color=BLUE]setq[/color] s ([color=BLUE]ssget[/color] [color=MAROON]"_:L"[/color])) ([color=BLUE]setq[/color] p ([color=BLUE]getpoint[/color] [color=MAROON]"\nSpecify start point of array: "[/color])) ([color=BLUE]setq[/color] q ([color=BLUE]getpoint[/color] p [color=MAROON]"\nSpecify ent point of array: "[/color])) ) ([color=BLUE]progn[/color] ([color=BLUE]setq[/color] v ([color=BLUE]mapcar[/color] '[color=BLUE]-[/color] q p)) ([color=BLUE]repeat[/color] ([color=BLUE]setq[/color] i ([color=BLUE]sslength[/color] s)) ([color=BLUE]setq[/color] o ([color=BLUE]vlax-ename->vla-object[/color] ([color=BLUE]ssname[/color] s ([color=BLUE]setq[/color] i ([color=BLUE]1-[/color] i))))) ([color=BLUE]vla-getboundingbox[/color] o 'a 'b) ([color=BLUE]setq[/color] l ([color=BLUE]cons[/color] ([color=BLUE]cons[/color] o ([color=BLUE]mapcar[/color] '([color=BLUE]lambda[/color] ( a b ) ([color=BLUE]/[/color] ([color=BLUE]+[/color] a b) 2.0)) ([color=BLUE]vlax-safearray->list[/color] a) ([color=BLUE]vlax-safearray->list[/color] b) ) ) l ) ) ) ([color=BLUE]setq[/color] l ([color=BLUE]vl-sort[/color] l '([color=BLUE]lambda[/color] ( a b ) ([color=BLUE]<[/color] ([color=BLUE]caddr[/color] ([color=BLUE]trans[/color] ([color=BLUE]cdr[/color] a) 0 v)) ([color=BLUE]caddr[/color] ([color=BLUE]trans[/color] ([color=BLUE]cdr[/color] b) 0 v)) ) ) ) ) ([color=BLUE]setq[/color] n ([color=BLUE]if[/color] ([color=BLUE]cdr[/color] l) ([color=BLUE]1-[/color] ([color=BLUE]length[/color] l)) 1.0) v ([color=BLUE]mapcar[/color] '[color=BLUE]/[/color] v ([color=BLUE]list[/color] n n n)) p ([color=BLUE]mapcar[/color] '[color=BLUE]+[/color] ([color=BLUE]cdar[/color] l) v) ) ([color=BLUE]foreach[/color] x ([color=BLUE]cdr[/color] l) ([color=BLUE]vlax-invoke[/color] ([color=BLUE]car[/color] x) 'move ([color=BLUE]cdr[/color] x) p) ([color=BLUE]setq[/color] p ([color=BLUE]mapcar[/color] '[color=BLUE]+[/color] p v)) ) ) ) ([color=BLUE]princ[/color]) ) ([color=BLUE]vl-load-com[/color]) ([color=BLUE]princ[/color]) Wow! It works like charm!... It has only one little flaw: in random UCS it does somewhat unexpected results Quote Link to comment Share on other sites More sharing options...
Lee Mac Posted September 2, 2014 Share Posted September 2, 2014 Wow! It works like charm!... It has only one little flaw: in random UCS it does somewhat unexpected results Thanks! The following may solve the UCS issue, but I have not thoroughly tested it: (defun c:myarray ( / a b d i l o p q s v ) (if (and (setq s (ssget "_:L")) (setq p (getpoint "\nSpecify start point of array: ")) (setq q (getpoint p "\nSpecify end point of array: ")) ) (progn (setq v (trans (mapcar '- q p) 1 0 t)) (repeat (setq i (sslength s)) (setq o (vlax-ename->vla-object (ssname s (setq i (1- i))))) (vla-getboundingbox o 'a 'b) (setq l (cons (cons o (mapcar '(lambda ( a b ) (/ (+ a b) 2.0)) (vlax-safearray->list a) (vlax-safearray->list b) ) ) l ) ) ) (setq l (vl-sort l '(lambda ( a b ) (< (caddr (trans (cdr a) 0 v)) (caddr (trans (cdr b) 0 v)) ) ) ) ) (setq n (if (cdr l) (1- (length l)) 1.0) v (mapcar '/ v (list n n n)) p (mapcar '+ (cdar l) v) ) (foreach x (cdr l) (vlax-invoke (car x) 'move (cdr x) p) (setq p (mapcar '+ p v)) ) ) ) (princ) ) (vl-load-com) (princ) Quote Link to comment Share on other sites More sharing options...
ajax30 Posted September 8, 2014 Share Posted September 8, 2014 Amazing! Now it works even under random UCS! Thanks a lot! Quote Link to comment Share on other sites More sharing options...
Lee Mac Posted September 8, 2014 Share Posted September 8, 2014 Amazing! Now it works even under random UCS!Thanks a lot! Excellent to hear - you're most welcome. 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.