gmmdinesh Posted November 28, 2016 Share Posted November 28, 2016 Hi all... I need help again. i want lisp to make double offset in same side but various distance. one line distance is 1.70mm and another one is 1.75mm from source line. Thanks in advance. Quote Link to comment Share on other sites More sharing options...
mwade93 Posted November 28, 2016 Share Posted November 28, 2016 How about this? You have to select the line to offset then pick the side to offset to. ^C^C^C(Setq OSL (Entsel "Select line to offset: "));\offset;1.70;!OSL;\;offset;1.75;!OSL;\; Don't forget you can always use multilines to do this as well. Depending on the use, it may be helpful. Quote Link to comment Share on other sites More sharing options...
gmmdinesh Posted November 28, 2016 Author Share Posted November 28, 2016 Hi mwade93.. Thanks for your Macro string....This string works perfect. this string needs to click the tool button for each action. but i want this string is repeated up-to user end. Quote Link to comment Share on other sites More sharing options...
mwade93 Posted November 28, 2016 Share Posted November 28, 2016 You want to be able to make it repeat over and over? If so, you just have to add in a * character. User will have to use the escape key to cancel it, but it will repeat until that point. *^C^C^C(Setq OSL (Entsel "Select line to offset: "));\offset;1.70;!OSL;\;offset;1.75;!OSL;\; Quote Link to comment Share on other sites More sharing options...
Tharwat Posted November 28, 2016 Share Posted November 28, 2016 One way. (defun c:test (/ s p) (while (and (setq s (car (entsel "\nSelect line to offset :"))) (= (cdr (assoc 0 (entget s))) "LINE") (setq p (getpoint "\nSpecify offset side :")) ) (foreach x '(1.7 1.75) (command "_.offset" x (ssadd s) "_non" p "") ) ) (princ) ) Quote Link to comment Share on other sites More sharing options...
Grrr Posted November 28, 2016 Share Posted November 28, 2016 Although this is of my all time favorites, I could suggest something like: (defun C:test ( / *error* acDoc sUndo Svars R n oLst o ) (defun *error* (m) (and sUndo (vla-EndUndoMark acDoc)) (redraw) (and Svars (mapcar 'setvar (mapcar 'car Svars) (mapcar 'cdr Svars))) (and m (print m)) (princ) ); defun *error* (setq acDoc (vla-get-ActiveDocument (vlax-get-acad-object))) (vla-EndUndoMark acDoc) (setq sUndo (not (vla-StartUndoMark acDoc))) (setq Svars (mapcar (function (lambda (x) (cons x (getvar x)))) '("CLIPROMPTLINES" "PICKBOX" "CMDECHO"))) (and Svars (mapcar 'setvar (mapcar 'car Svars) '(0 12 0))) (setvar 'errno 0) (redraw) (while (/= 52 (getvar 'errno)) (initget 128 "Distance") (setq R (entsel (strcat "\nSpecify side to offset or [D]istance " (if oLst (vl-princ-to-string (reverse oLst)) "") " <exit>: "))) (cond ((= 7 (getvar 'errno)) (princ "\nNothing selected.") (setvar 'errno 0)) ( (= 'STR (type R)) (while (setq n (getreal (strcat "\nSpecify offset value from the curve " (if oLst (vl-princ-to-string (reverse oLst)) "") " <enter>: "))) (princ (strcat "\nOffset values: " (vl-princ-to-string (reverse (setq oLst (cons n oLst)))))) ) (setq oLst (reverse oLst)) ) ((and (vl-consp R) (eq 'ENAME (type (car R))) (setq o (vlax-ename->vla-object (car R))) (not (vlax-method-applicable-p o 'Offset))) (princ "\nThis object can not be offseted.") (setq o nil) ) ((and o (eq (vla-get-Lock (vla-item (vla-get-Layers acDoc) (vla-get-Layer o))) :vlax-true)) (princ "\nThis object is on a locked layer.") (setq o nil) ) ((and o (not oLst)) (grdraw (cadr R) (vlax-curve-getClosestPointTo o (cadr R)) 1 7) (while (setq n (getreal (strcat "\nSpecify offset value from the curve " (if oLst (vl-princ-to-string (reverse oLst)) "") " <enter>: "))) (princ (strcat "\nOffset values: " (vl-princ-to-string (reverse (setq oLst (cons n oLst)))))) ) (and (vl-consp oLst) (apply 'and (mapcar 'numberp oLst)) (setvar 'errno 52)) ) ( (and o (vl-consp oLst) (apply 'and (mapcar 'numberp oLst))) (setvar 'errno 52) ) (T nil) ); cond ); while (foreach x oLst (command "_.OFFSET" x (car R) "_non" (cadr R) "E") ); (vla-Offset o x) (and sUndo (vla-EndUndoMark acDoc)) (and Svars (mapcar 'setvar (mapcar 'car Svars) (mapcar 'cdr Svars))) (redraw) (princ) );| defun |; (vl-load-com) (princ) Quote Link to comment Share on other sites More sharing options...
BIGAL Posted November 29, 2016 Share Posted November 29, 2016 This was done as you can see in 2014 as a easy way to make multiple offsets via a command line see for image http://www.cadtutor.net/forum/showthread.php?84919-Draw-double-polyline/page2 ; multiple pline including width & col function ; single entry is offset only use +ve or -ve numbers for left and right ; two values 3,1 means offset 3 with width 1 ; three values 3,2,1 means offset 3 with start width 2 end 1 ; by Alan H March 2014 ; thanks to Lee-mac for this defun (defun _csv->lst ( str / pos ) (if (setq pos (vl-string-position 44 str)) (cons (substr str 1 pos) (_csv->lst (substr str (+ pos 2)))) (list str) ) ) (defun aH:multpl ( / pt1 pt2 pt3 obj1 obj2 dist1 pwidst plcol lst howmany) (setvar "PLINEWID" 0) ;set PL width to 0 (command "_pline") (while (= (getvar "cmdactive") 1 ) (command pause) ) (setq pt1 nil) (setq obj1 (entlast)) ; grab pline (setq pt1 (getvar "lastpoint")) ; last pt (command "circle" pt1 100.0) ; do something smart here like screen scale for circle (setq obj2 (entlast)) ;grab circle (setq pt2 (vlax-invoke (vlax-ename->vla-object obj1) 'intersectWith (vlax-ename->vla-object obj2) acextendnone)); find int point (setq ang (angle pt1 pt2)) ;angle of pline now know left right (command "erase" "last" "") ; remove circle (while (/= (setq offval (getstring "Enter offset distance -ve for left")) "") (setq lst (cons (_csv->lst offval) lst)) (setq howmany (length (nth 0 lst))) ;determines single or multi answer (if (= howmany 1)(setq dist1 (atof (nth 0 (nth 0 lst)))) ) (if (= howmany 2) (progn (setq dist1 (atof (nth 0 (nth 0 lst)))) (setq pwidst (atof (nth 1 (nth 0 lst)))) ) ; progn ); if (if (= howmany 3) (progn (setq dist1 (atof (nth 0 (nth 0 lst)))) (setq pwidst (atof (nth 1 (nth 0 lst)))) (setq pLcol (atof (nth 2 (nth 0 lst)))) ) ; progn ); if (if (> dist1 0.0) (setq pt3 (polar pt2 (+ ang (/ pi 2.0)) (abs dist1))) (setq pt3 (polar pt2 (- ang (/ pi 2.0)) (abs dist1))) ) (command "offset" (abs dist1) obj1 pt3 "") (if (>= howmany 2) (vla-put-ConstantWidth (vlax-ename->vla-object (entlast)) pwidst) ) (if (= howmany 3) (vla-put-color (vlax-ename->vla-object (entlast)) plcol) ; note color as a number ) ) ; end while (command "erase" obj1 "") ) ; end defun (AH:multpl) (princ) Quote Link to comment Share on other sites More sharing options...
martinle Posted November 29, 2016 Share Posted November 29, 2016 Hello Grrr, This Lisp unfortunately does not work in Acad 2017. I believe the command move is executed differently. Could they possibly check this again? Thank you. Quote Link to comment Share on other sites More sharing options...
Grrr Posted November 29, 2016 Share Posted November 29, 2016 This was done as you can see in 2014 as a easy way to make multiple offsets via a command line see for image http://www.cadtutor.net/forum/showthread.php?84919-Draw-double-polyline/page2 Woops, sorry I didn't knew about that. Sounds like I'm trying to reinvent the wheel, but whats important for me is the coding practice/experience. Hello Grrr,This Lisp unfortunately does not work in Acad 2017. I believe the command move is executed differently. Could they possibly check this again? Thank you. Hi, martinle I would suggest to call the offset command and check the steps it follows: (setq e (car (entsel))) (setq p (getpoint)) (command "_.OFFSET" 500 e "_non" p "E") ; offset the entity "e" on 500 units distance, oriented on the "p" side This works in ACAD2015. Quote Link to comment Share on other sites More sharing options...
martinle Posted November 29, 2016 Share Posted November 29, 2016 Hi, Grrr Command: (setq e (car (entsel))) Select object: Command: (setq p (getpoint)) (1443.23 2158.93 0.0) Command: (command "_.OFFSET" 500 e "_non" p "E") _.OFFSET Current settings: Delete source = No Layer = Source OFFSETGAPTYPE = 0 Specify distance or [Through point / Delete / Layer] : 500 Select object to move, or [Exit / Undo] : Specify the point on the page to which you want to move, or [Exit / Repeat / Undo] : _non Select object to move or [Exit / Undo] : E *Invalid selection* Expects a point or exit ; Error: Function aborted Quote Link to comment Share on other sites More sharing options...
Grrr Posted November 29, 2016 Share Posted November 29, 2016 Hmm, I'm not sure whats the issue, but try writing this first: (initcommandversion 1) and then invoke the OFFSET command Try with values like 0 1 2 3, Untill you see: Specify offset distance or [Through/[color="red"]Erase[/color]/Layer] <500.0000>: Then use this simple check to comfirm its working: (and (setq e (car (entsel))) (setq p (getpoint)) (initcommandversion [color="red"]x[/color])[color="darkgreen"]; adjust x with the value[/color] (command "_.OFFSET" 500 e "_non" p "E") [color="darkgreen"]; offset the entity "e" on 500 units distance, oriented on the "p" side[/color] ) Quote Link to comment Share on other sites More sharing options...
martinle Posted November 29, 2016 Share Posted November 29, 2016 Hello Grrr Unfortunately no effect. Still the error message. Quote Link to comment Share on other sites More sharing options...
gmmdinesh Posted November 29, 2016 Author Share Posted November 29, 2016 Hi all.. Thanks for your code guys.. and Tharwat your code is working Just as I thought. But its not offset polyline..I need offset Line as well as Polyline. Quote Link to comment Share on other sites More sharing options...
Grrr Posted November 29, 2016 Share Posted November 29, 2016 Hello Grrr Unfortunately no effect. Still the error message. Try this then: [b][color=BLACK]([/color][/b]defun C:test [b][color=FUCHSIA]([/color][/b] / *error* acDoc sUndo Svars R n oLst o ang[b][color=FUCHSIA])[/color][/b] [b][color=FUCHSIA]([/color][/b]defun *error* [b][color=NAVY]([/color][/b]m[b][color=NAVY])[/color][/b] [b][color=NAVY]([/color][/b]and sUndo [b][color=MAROON]([/color][/b]vla-EndUndoMark acDoc[b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b] [b][color=NAVY]([/color][/b]redraw[b][color=NAVY])[/color][/b] [b][color=NAVY]([/color][/b]and Svars [b][color=MAROON]([/color][/b]mapcar 'setvar [b][color=GREEN]([/color][/b]mapcar 'car Svars[b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]mapcar 'cdr Svars[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b] [b][color=NAVY]([/color][/b]and m [b][color=MAROON]([/color][/b]print m[b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b] [b][color=NAVY]([/color][/b]princ[b][color=NAVY])[/color][/b] [b][color=FUCHSIA])[/color][/b][color=#8b4513]; defun *error*[/color] [b][color=FUCHSIA]([/color][/b]setq acDoc [b][color=NAVY]([/color][/b]vla-get-ActiveDocument [b][color=MAROON]([/color][/b]vlax-get-acad-object[b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b] [b][color=FUCHSIA]([/color][/b]vla-EndUndoMark acDoc[b][color=FUCHSIA])[/color][/b] [b][color=FUCHSIA]([/color][/b]setq sUndo [b][color=NAVY]([/color][/b]not [b][color=MAROON]([/color][/b]vla-StartUndoMark acDoc[b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b] [b][color=FUCHSIA]([/color][/b]setq Svars [b][color=NAVY]([/color][/b]mapcar [b][color=MAROON]([/color][/b]function [b][color=GREEN]([/color][/b]lambda [b][color=BLUE]([/color][/b]x[b][color=BLUE])[/color][/b] [b][color=BLUE]([/color][/b]cons x [b][color=RED]([/color][/b]getvar x[b][color=RED])[/color][/b][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b] '[b][color=MAROON]([/color][/b][color=#2f4f4f]"CLIPROMPTLINES"[/color] [color=#2f4f4f]"PICKBOX"[/color] [color=#2f4f4f]"CMDECHO"[/color][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b] [b][color=FUCHSIA]([/color][/b]and Svars [b][color=NAVY]([/color][/b]mapcar 'setvar [b][color=MAROON]([/color][/b]mapcar 'car Svars[b][color=MAROON])[/color][/b] '[b][color=MAROON]([/color][/b]0 12 0[b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b] [b][color=FUCHSIA]([/color][/b]setvar 'errno 0[b][color=FUCHSIA])[/color][/b] [b][color=FUCHSIA]([/color][/b]redraw[b][color=FUCHSIA])[/color][/b] [b][color=FUCHSIA]([/color][/b]while [b][color=NAVY]([/color][/b]/= 52 [b][color=MAROON]([/color][/b]getvar 'errno[b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b] [b][color=NAVY]([/color][/b]initget 128 [color=#2f4f4f]"Distance"[/color][b][color=NAVY])[/color][/b] [b][color=NAVY]([/color][/b]setq R [b][color=MAROON]([/color][/b]entsel [b][color=GREEN]([/color][/b]strcat [color=#2f4f4f]"\nSpecify side to offset or [D]istance "[/color] [b][color=BLUE]([/color][/b]if oLst [b][color=RED]([/color][/b]vl-princ-to-string [b][color=PURPLE]([/color][/b]reverse oLst[b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b] [color=#2f4f4f]""[/color][b][color=BLUE])[/color][/b] [color=#2f4f4f]" <exit>: "[/color][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b] [b][color=NAVY]([/color][/b]cond [b][color=MAROON]([/color][/b][b][color=GREEN]([/color][/b]= 7 [b][color=BLUE]([/color][/b]getvar 'errno[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]princ [color=#2f4f4f]"\nNothing selected."[/color][b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]setvar 'errno 0[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b] [b][color=MAROON]([/color][/b] [b][color=GREEN]([/color][/b]= 'STR [b][color=BLUE]([/color][/b]type R[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]while [b][color=BLUE]([/color][/b]setq n [b][color=RED]([/color][/b]getreal [b][color=PURPLE]([/color][/b]strcat [color=#2f4f4f]"\nSpecify offset value from the curve "[/color] [b][color=TEAL]([/color][/b]if oLst [b][color=OLIVE]([/color][/b]vl-princ-to-string [b][color=GRAY]([/color][/b]reverse oLst[b][color=GRAY])[/color][/b][b][color=OLIVE])[/color][/b] [color=#2f4f4f]""[/color][b][color=TEAL])[/color][/b] [color=#2f4f4f]" <enter>: "[/color][b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b][b][color=BLUE])[/color][/b] [b][color=BLUE]([/color][/b]princ [b][color=RED]([/color][/b]strcat [color=#2f4f4f]"\nOffset values: "[/color] [b][color=PURPLE]([/color][/b]vl-princ-to-string [b][color=TEAL]([/color][/b]reverse [b][color=OLIVE]([/color][/b]setq oLst [b][color=GRAY]([/color][/b]cons n oLst[b][color=GRAY])[/color][/b][b][color=OLIVE])[/color][/b][b][color=TEAL])[/color][/b][b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b][b][color=BLUE])[/color][/b] [b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]setq oLst [b][color=BLUE]([/color][/b]reverse oLst[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b] [b][color=MAROON])[/color][/b] [b][color=MAROON]([/color][/b][b][color=GREEN]([/color][/b]and [b][color=BLUE]([/color][/b]vl-consp R[b][color=BLUE])[/color][/b] [b][color=BLUE]([/color][/b]eq 'ENAME [b][color=RED]([/color][/b]type [b][color=PURPLE]([/color][/b]car R[b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b][b][color=BLUE])[/color][/b] [b][color=BLUE]([/color][/b]setq o [b][color=RED]([/color][/b]vlax-ename->vla-object [b][color=PURPLE]([/color][/b]car R[b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b][b][color=BLUE])[/color][/b] [b][color=BLUE]([/color][/b]not [b][color=RED]([/color][/b]vlax-method-applicable-p o 'Offset[b][color=RED])[/color][/b][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]princ [color=#2f4f4f]"\nThis object can not be offseted."[/color][b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]setq o nil[b][color=GREEN])[/color][/b] [b][color=MAROON])[/color][/b] [b][color=MAROON]([/color][/b][b][color=GREEN]([/color][/b]and o [b][color=BLUE]([/color][/b]eq [b][color=RED]([/color][/b]vla-get-Lock [b][color=PURPLE]([/color][/b]vla-item [b][color=TEAL]([/color][/b]vla-get-Layers acDoc[b][color=TEAL])[/color][/b] [b][color=TEAL]([/color][/b]vla-get-Layer o[b][color=TEAL])[/color][/b][b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b] :vlax-true[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]princ [color=#2f4f4f]"\nThis object is on a locked layer."[/color][b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]setq o nil[b][color=GREEN])[/color][/b] [b][color=MAROON])[/color][/b] [b][color=MAROON]([/color][/b][b][color=GREEN]([/color][/b]and o [b][color=BLUE]([/color][/b]not oLst[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]grdraw [b][color=BLUE]([/color][/b]cadr R[b][color=BLUE])[/color][/b] [b][color=BLUE]([/color][/b]vlax-curve-getClosestPointTo o [b][color=RED]([/color][/b]cadr R[b][color=RED])[/color][/b][b][color=BLUE])[/color][/b] 1 7[b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]setq ang [b][color=BLUE]([/color][/b]angle [b][color=RED]([/color][/b]vlax-curve-getClosestPointTo o [b][color=PURPLE]([/color][/b]cadr R[b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b]cadr R[b][color=RED])[/color][/b][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]while [b][color=BLUE]([/color][/b]setq n [b][color=RED]([/color][/b]getreal [b][color=PURPLE]([/color][/b]strcat [color=#2f4f4f]"\nSpecify offset value from the curve "[/color] [b][color=TEAL]([/color][/b]if oLst [b][color=OLIVE]([/color][/b]vl-princ-to-string [b][color=GRAY]([/color][/b]reverse oLst[b][color=GRAY])[/color][/b][b][color=OLIVE])[/color][/b] [color=#2f4f4f]""[/color][b][color=TEAL])[/color][/b] [color=#2f4f4f]" <enter>: "[/color][b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b][b][color=BLUE])[/color][/b] [b][color=BLUE]([/color][/b]princ [b][color=RED]([/color][/b]strcat [color=#2f4f4f]"\nOffset values: "[/color] [b][color=PURPLE]([/color][/b]vl-princ-to-string [b][color=TEAL]([/color][/b]reverse [b][color=OLIVE]([/color][/b]setq oLst [b][color=GRAY]([/color][/b]cons n oLst[b][color=GRAY])[/color][/b][b][color=OLIVE])[/color][/b][b][color=TEAL])[/color][/b][b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b][b][color=BLUE])[/color][/b] [b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]and [b][color=BLUE]([/color][/b]vl-consp oLst[b][color=BLUE])[/color][/b] [b][color=BLUE]([/color][/b]apply 'and [b][color=RED]([/color][/b]mapcar 'numberp oLst[b][color=RED])[/color][/b][b][color=BLUE])[/color][/b] [b][color=BLUE]([/color][/b]setvar 'errno 52[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b] [b][color=MAROON])[/color][/b] [b][color=MAROON]([/color][/b] [b][color=GREEN]([/color][/b]and o [b][color=BLUE]([/color][/b]vl-consp oLst[b][color=BLUE])[/color][/b] [b][color=BLUE]([/color][/b]apply 'and [b][color=RED]([/color][/b]mapcar 'numberp oLst[b][color=RED])[/color][/b][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]setvar 'errno 52[b][color=GREEN])[/color][/b] [b][color=MAROON])[/color][/b] [b][color=MAROON]([/color][/b]T nil[b][color=MAROON])[/color][/b] [b][color=NAVY])[/color][/b][color=#8b4513]; cond [/color] [b][color=FUCHSIA])[/color][/b][color=#8b4513]; while[/color] [b][color=FUCHSIA]([/color][/b]and o ang oLst [b][color=NAVY]([/color][/b]foreach x oLst [b][color=MAROON]([/color][/b]vla-Offset o [b][color=GREEN]([/color][/b]cond [b][color=BLUE]([/color][/b] [b][color=RED]([/color][/b]= ang 0[b][color=RED])[/color][/b] x[b][color=BLUE])[/color][/b] [color=#8b4513]; Right [Direction][/color] [b][color=BLUE]([/color][/b] [b][color=RED]([/color][/b]equal ang [b][color=PURPLE]([/color][/b]/ PI 2.[b][color=PURPLE])[/color][/b] 1e-2[b][color=RED])[/color][/b] [b][color=RED]([/color][/b]- x[b][color=RED])[/color][/b][b][color=BLUE])[/color][/b] [color=#8b4513]; UP[/color] [b][color=BLUE]([/color][/b] [b][color=RED]([/color][/b]equal ang PI 1e-2[b][color=RED])[/color][/b] x[b][color=BLUE])[/color][/b] [color=#8b4513]; Left[/color] [b][color=BLUE]([/color][/b] [b][color=RED]([/color][/b]equal ang [b][color=PURPLE]([/color][/b]* 1.5 PI[b][color=PURPLE])[/color][/b] 1e-2[b][color=RED])[/color][/b] x[b][color=BLUE])[/color][/b] [color=#8b4513]; Down[/color] [b][color=BLUE]([/color][/b] [b][color=RED]([/color][/b]< 0 ang [b][color=PURPLE]([/color][/b]/ PI 2.[b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b]- x[b][color=RED])[/color][/b][b][color=BLUE])[/color][/b] [color=#8b4513]; Right Up [Quadrant][/color] [b][color=BLUE]([/color][/b] [b][color=RED]([/color][/b]< [b][color=PURPLE]([/color][/b]/ PI 2.[b][color=PURPLE])[/color][/b] ang PI[b][color=RED])[/color][/b] x[b][color=BLUE])[/color][/b] [color=#8b4513]; Left Up[/color] [b][color=BLUE]([/color][/b] [b][color=RED]([/color][/b]< PI ang [b][color=PURPLE]([/color][/b]* PI 1.5[b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b] x[b][color=BLUE])[/color][/b] [color=#8b4513]; Left Down[/color] [b][color=BLUE]([/color][/b] [b][color=RED]([/color][/b]< [b][color=PURPLE]([/color][/b]* PI 1.5[b][color=PURPLE])[/color][/b] ang [b][color=PURPLE]([/color][/b]* PI 2[b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b]- x[b][color=RED])[/color][/b][b][color=BLUE])[/color][/b] [color=#8b4513]; Right Down[/color] [b][color=GREEN])[/color][/b][color=#8b4513]; cond[/color] [b][color=MAROON])[/color][/b][color=#8b4513]; vla-Offset[/color] [b][color=NAVY])[/color][/b][color=#8b4513]; foreach ; [b][color=NAVY]([/color][/b]command [color=#2f4f4f]"_.OFFSET"[/color] x [b][color=MAROON]([/color][/b]car R[b][color=MAROON])[/color][/b] [color=#2f4f4f]"_non"[/color] [b][color=MAROON]([/color][/b]cadr R[b][color=MAROON])[/color][/b] [color=#2f4f4f]"E"[/color][b][color=NAVY])[/color][/b] [/color] [b][color=FUCHSIA])[/color][/b][color=#8b4513]; and[/color] [b][color=FUCHSIA]([/color][/b]and sUndo [b][color=NAVY]([/color][/b]vla-EndUndoMark acDoc[b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b] [b][color=FUCHSIA]([/color][/b]and Svars [b][color=NAVY]([/color][/b]mapcar 'setvar [b][color=MAROON]([/color][/b]mapcar 'car Svars[b][color=MAROON])[/color][/b] [b][color=MAROON]([/color][/b]mapcar 'cdr Svars[b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b] [b][color=FUCHSIA]([/color][/b]redraw[b][color=FUCHSIA])[/color][/b] [b][color=FUCHSIA]([/color][/b]princ[b][color=FUCHSIA])[/color][/b] [b][color=BLACK])[/color][/b][color=#8b4513];| defun |; [b][color=BLACK]([/color][/b]vl-load-com[b][color=BLACK])[/color][/b] [b][color=BLACK]([/color][/b]princ[b][color=BLACK])[/color][/b][/color] I really tried to avoid vla-Offset, due the orientation issue. Quote Link to comment Share on other sites More sharing options...
Tharwat Posted November 29, 2016 Share Posted November 29, 2016 and Tharwat your code is working Just as I thought. But its not offset polyline..I need offset Line as well as Polyline. Simply like this. (defun c:test (/ s p) (while (and (setq s (car (entsel "\nSelect line to offset :"))) (wcmatch (cdr (assoc 0 (entget s))) "LINE,*POLYLINE") (setq p (getpoint "\nSpecify offset side :")) ) (foreach x '(1.7 1.75) (command "_.offset" x (ssadd s) "_non" p "") ) ) (princ) ) Quote Link to comment Share on other sites More sharing options...
martinle Posted November 29, 2016 Share Posted November 29, 2016 Try this then: [b][color=BLACK]([/color][/b]defun C:test [b][color=FUCHSIA]([/color][/b] / *error* acDoc sUndo Svars R n oLst o ang[b][color=FUCHSIA])[/color][/b] [b][color=FUCHSIA]([/color][/b]defun *error* [b][color=NAVY]([/color][/b]m[b][color=NAVY])[/color][/b] [b][color=NAVY]([/color][/b]and sUndo [b][color=MAROON]([/color][/b]vla-EndUndoMark acDoc[b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b] [b][color=NAVY]([/color][/b]redraw[b][color=NAVY])[/color][/b] [b][color=NAVY]([/color][/b]and Svars [b][color=MAROON]([/color][/b]mapcar 'setvar [b][color=GREEN]([/color][/b]mapcar 'car Svars[b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]mapcar 'cdr Svars[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b] [b][color=NAVY]([/color][/b]and m [b][color=MAROON]([/color][/b]print m[b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b] [b][color=NAVY]([/color][/b]princ[b][color=NAVY])[/color][/b] [b][color=FUCHSIA])[/color][/b][color=#8b4513]; defun *error*[/color] [b][color=FUCHSIA]([/color][/b]setq acDoc [b][color=NAVY]([/color][/b]vla-get-ActiveDocument [b][color=MAROON]([/color][/b]vlax-get-acad-object[b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b] [b][color=FUCHSIA]([/color][/b]vla-EndUndoMark acDoc[b][color=FUCHSIA])[/color][/b] [b][color=FUCHSIA]([/color][/b]setq sUndo [b][color=NAVY]([/color][/b]not [b][color=MAROON]([/color][/b]vla-StartUndoMark acDoc[b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b] [b][color=FUCHSIA]([/color][/b]setq Svars [b][color=NAVY]([/color][/b]mapcar [b][color=MAROON]([/color][/b]function [b][color=GREEN]([/color][/b]lambda [b][color=BLUE]([/color][/b]x[b][color=BLUE])[/color][/b] [b][color=BLUE]([/color][/b]cons x [b][color=RED]([/color][/b]getvar x[b][color=RED])[/color][/b][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b] '[b][color=MAROON]([/color][/b][color=#2f4f4f]"CLIPROMPTLINES"[/color] [color=#2f4f4f]"PICKBOX"[/color] [color=#2f4f4f]"CMDECHO"[/color][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b] [b][color=FUCHSIA]([/color][/b]and Svars [b][color=NAVY]([/color][/b]mapcar 'setvar [b][color=MAROON]([/color][/b]mapcar 'car Svars[b][color=MAROON])[/color][/b] '[b][color=MAROON]([/color][/b]0 12 0[b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b] [b][color=FUCHSIA]([/color][/b]setvar 'errno 0[b][color=FUCHSIA])[/color][/b] [b][color=FUCHSIA]([/color][/b]redraw[b][color=FUCHSIA])[/color][/b] [b][color=FUCHSIA]([/color][/b]while [b][color=NAVY]([/color][/b]/= 52 [b][color=MAROON]([/color][/b]getvar 'errno[b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b] [b][color=NAVY]([/color][/b]initget 128 [color=#2f4f4f]"Distance"[/color][b][color=NAVY])[/color][/b] [b][color=NAVY]([/color][/b]setq R [b][color=MAROON]([/color][/b]entsel [b][color=GREEN]([/color][/b]strcat [color=#2f4f4f]"\nSpecify side to offset or [D]istance "[/color] [b][color=BLUE]([/color][/b]if oLst [b][color=RED]([/color][/b]vl-princ-to-string [b][color=PURPLE]([/color][/b]reverse oLst[b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b] [color=#2f4f4f]""[/color][b][color=BLUE])[/color][/b] [color=#2f4f4f]" <exit>: "[/color][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b] [b][color=NAVY]([/color][/b]cond [b][color=MAROON]([/color][/b][b][color=GREEN]([/color][/b]= 7 [b][color=BLUE]([/color][/b]getvar 'errno[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]princ [color=#2f4f4f]"\nNothing selected."[/color][b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]setvar 'errno 0[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b] [b][color=MAROON]([/color][/b] [b][color=GREEN]([/color][/b]= 'STR [b][color=BLUE]([/color][/b]type R[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]while [b][color=BLUE]([/color][/b]setq n [b][color=RED]([/color][/b]getreal [b][color=PURPLE]([/color][/b]strcat [color=#2f4f4f]"\nSpecify offset value from the curve "[/color] [b][color=TEAL]([/color][/b]if oLst [b][color=OLIVE]([/color][/b]vl-princ-to-string [b][color=GRAY]([/color][/b]reverse oLst[b][color=GRAY])[/color][/b][b][color=OLIVE])[/color][/b] [color=#2f4f4f]""[/color][b][color=TEAL])[/color][/b] [color=#2f4f4f]" <enter>: "[/color][b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b][b][color=BLUE])[/color][/b] [b][color=BLUE]([/color][/b]princ [b][color=RED]([/color][/b]strcat [color=#2f4f4f]"\nOffset values: "[/color] [b][color=PURPLE]([/color][/b]vl-princ-to-string [b][color=TEAL]([/color][/b]reverse [b][color=OLIVE]([/color][/b]setq oLst [b][color=GRAY]([/color][/b]cons n oLst[b][color=GRAY])[/color][/b][b][color=OLIVE])[/color][/b][b][color=TEAL])[/color][/b][b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b][b][color=BLUE])[/color][/b] [b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]setq oLst [b][color=BLUE]([/color][/b]reverse oLst[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b] [b][color=MAROON])[/color][/b] [b][color=MAROON]([/color][/b][b][color=GREEN]([/color][/b]and [b][color=BLUE]([/color][/b]vl-consp R[b][color=BLUE])[/color][/b] [b][color=BLUE]([/color][/b]eq 'ENAME [b][color=RED]([/color][/b]type [b][color=PURPLE]([/color][/b]car R[b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b][b][color=BLUE])[/color][/b] [b][color=BLUE]([/color][/b]setq o [b][color=RED]([/color][/b]vlax-ename->vla-object [b][color=PURPLE]([/color][/b]car R[b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b][b][color=BLUE])[/color][/b] [b][color=BLUE]([/color][/b]not [b][color=RED]([/color][/b]vlax-method-applicable-p o 'Offset[b][color=RED])[/color][/b][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]princ [color=#2f4f4f]"\nThis object can not be offseted."[/color][b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]setq o nil[b][color=GREEN])[/color][/b] [b][color=MAROON])[/color][/b] [b][color=MAROON]([/color][/b][b][color=GREEN]([/color][/b]and o [b][color=BLUE]([/color][/b]eq [b][color=RED]([/color][/b]vla-get-Lock [b][color=PURPLE]([/color][/b]vla-item [b][color=TEAL]([/color][/b]vla-get-Layers acDoc[b][color=TEAL])[/color][/b] [b][color=TEAL]([/color][/b]vla-get-Layer o[b][color=TEAL])[/color][/b][b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b] :vlax-true[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]princ [color=#2f4f4f]"\nThis object is on a locked layer."[/color][b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]setq o nil[b][color=GREEN])[/color][/b] [b][color=MAROON])[/color][/b] [b][color=MAROON]([/color][/b][b][color=GREEN]([/color][/b]and o [b][color=BLUE]([/color][/b]not oLst[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]grdraw [b][color=BLUE]([/color][/b]cadr R[b][color=BLUE])[/color][/b] [b][color=BLUE]([/color][/b]vlax-curve-getClosestPointTo o [b][color=RED]([/color][/b]cadr R[b][color=RED])[/color][/b][b][color=BLUE])[/color][/b] 1 7[b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]setq ang [b][color=BLUE]([/color][/b]angle [b][color=RED]([/color][/b]vlax-curve-getClosestPointTo o [b][color=PURPLE]([/color][/b]cadr R[b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b]cadr R[b][color=RED])[/color][/b][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]while [b][color=BLUE]([/color][/b]setq n [b][color=RED]([/color][/b]getreal [b][color=PURPLE]([/color][/b]strcat [color=#2f4f4f]"\nSpecify offset value from the curve "[/color] [b][color=TEAL]([/color][/b]if oLst [b][color=OLIVE]([/color][/b]vl-princ-to-string [b][color=GRAY]([/color][/b]reverse oLst[b][color=GRAY])[/color][/b][b][color=OLIVE])[/color][/b] [color=#2f4f4f]""[/color][b][color=TEAL])[/color][/b] [color=#2f4f4f]" <enter>: "[/color][b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b][b][color=BLUE])[/color][/b] [b][color=BLUE]([/color][/b]princ [b][color=RED]([/color][/b]strcat [color=#2f4f4f]"\nOffset values: "[/color] [b][color=PURPLE]([/color][/b]vl-princ-to-string [b][color=TEAL]([/color][/b]reverse [b][color=OLIVE]([/color][/b]setq oLst [b][color=GRAY]([/color][/b]cons n oLst[b][color=GRAY])[/color][/b][b][color=OLIVE])[/color][/b][b][color=TEAL])[/color][/b][b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b][b][color=BLUE])[/color][/b] [b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]and [b][color=BLUE]([/color][/b]vl-consp oLst[b][color=BLUE])[/color][/b] [b][color=BLUE]([/color][/b]apply 'and [b][color=RED]([/color][/b]mapcar 'numberp oLst[b][color=RED])[/color][/b][b][color=BLUE])[/color][/b] [b][color=BLUE]([/color][/b]setvar 'errno 52[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b] [b][color=MAROON])[/color][/b] [b][color=MAROON]([/color][/b] [b][color=GREEN]([/color][/b]and o [b][color=BLUE]([/color][/b]vl-consp oLst[b][color=BLUE])[/color][/b] [b][color=BLUE]([/color][/b]apply 'and [b][color=RED]([/color][/b]mapcar 'numberp oLst[b][color=RED])[/color][/b][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]setvar 'errno 52[b][color=GREEN])[/color][/b] [b][color=MAROON])[/color][/b] [b][color=MAROON]([/color][/b]T nil[b][color=MAROON])[/color][/b] [b][color=NAVY])[/color][/b][color=#8b4513]; cond [/color] [b][color=FUCHSIA])[/color][/b][color=#8b4513]; while[/color] [b][color=FUCHSIA]([/color][/b]and o ang oLst [b][color=NAVY]([/color][/b]foreach x oLst [b][color=MAROON]([/color][/b]vla-Offset o [b][color=GREEN]([/color][/b]cond [b][color=BLUE]([/color][/b] [b][color=RED]([/color][/b]= ang 0[b][color=RED])[/color][/b] x[b][color=BLUE])[/color][/b] [color=#8b4513]; Right [Direction][/color] [b][color=BLUE]([/color][/b] [b][color=RED]([/color][/b]equal ang [b][color=PURPLE]([/color][/b]/ PI 2.[b][color=PURPLE])[/color][/b] 1e-2[b][color=RED])[/color][/b] [b][color=RED]([/color][/b]- x[b][color=RED])[/color][/b][b][color=BLUE])[/color][/b] [color=#8b4513]; UP[/color] [b][color=BLUE]([/color][/b] [b][color=RED]([/color][/b]equal ang PI 1e-2[b][color=RED])[/color][/b] x[b][color=BLUE])[/color][/b] [color=#8b4513]; Left[/color] [b][color=BLUE]([/color][/b] [b][color=RED]([/color][/b]equal ang [b][color=PURPLE]([/color][/b]* 1.5 PI[b][color=PURPLE])[/color][/b] 1e-2[b][color=RED])[/color][/b] x[b][color=BLUE])[/color][/b] [color=#8b4513]; Down[/color] [b][color=BLUE]([/color][/b] [b][color=RED]([/color][/b]< 0 ang [b][color=PURPLE]([/color][/b]/ PI 2.[b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b]- x[b][color=RED])[/color][/b][b][color=BLUE])[/color][/b] [color=#8b4513]; Right Up [Quadrant][/color] [b][color=BLUE]([/color][/b] [b][color=RED]([/color][/b]< [b][color=PURPLE]([/color][/b]/ PI 2.[b][color=PURPLE])[/color][/b] ang PI[b][color=RED])[/color][/b] x[b][color=BLUE])[/color][/b] [color=#8b4513]; Left Up[/color] [b][color=BLUE]([/color][/b] [b][color=RED]([/color][/b]< PI ang [b][color=PURPLE]([/color][/b]* PI 1.5[b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b] x[b][color=BLUE])[/color][/b] [color=#8b4513]; Left Down[/color] [b][color=BLUE]([/color][/b] [b][color=RED]([/color][/b]< [b][color=PURPLE]([/color][/b]* PI 1.5[b][color=PURPLE])[/color][/b] ang [b][color=PURPLE]([/color][/b]* PI 2[b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b]- x[b][color=RED])[/color][/b][b][color=BLUE])[/color][/b] [color=#8b4513]; Right Down[/color] [b][color=GREEN])[/color][/b][color=#8b4513]; cond[/color] [b][color=MAROON])[/color][/b][color=#8b4513]; vla-Offset[/color] [b][color=NAVY])[/color][/b][color=#8b4513]; foreach ; [b][color=NAVY]([/color][/b]command [color=#2f4f4f]"_.OFFSET"[/color] x [b][color=MAROON]([/color][/b]car R[b][color=MAROON])[/color][/b] [color=#2f4f4f]"_non"[/color] [b][color=MAROON]([/color][/b]cadr R[b][color=MAROON])[/color][/b] [color=#2f4f4f]"E"[/color][b][color=NAVY])[/color][/b] [/color] [b][color=FUCHSIA])[/color][/b][color=#8b4513]; and[/color] [b][color=FUCHSIA]([/color][/b]and sUndo [b][color=NAVY]([/color][/b]vla-EndUndoMark acDoc[b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b] [b][color=FUCHSIA]([/color][/b]and Svars [b][color=NAVY]([/color][/b]mapcar 'setvar [b][color=MAROON]([/color][/b]mapcar 'car Svars[b][color=MAROON])[/color][/b] [b][color=MAROON]([/color][/b]mapcar 'cdr Svars[b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b] [b][color=FUCHSIA]([/color][/b]redraw[b][color=FUCHSIA])[/color][/b] [b][color=FUCHSIA]([/color][/b]princ[b][color=FUCHSIA])[/color][/b] [b][color=BLACK])[/color][/b][color=#8b4513];| defun |; [b][color=BLACK]([/color][/b]vl-load-com[b][color=BLACK])[/color][/b] [b][color=BLACK]([/color][/b]princ[b][color=BLACK])[/color][/b][/color] I really tried to avoid vla-Offset, due the orientation issue. Hello Grrr perfect Is working! thank you Quote Link to comment Share on other sites More sharing options...
gmmdinesh Posted November 29, 2016 Author Share Posted November 29, 2016 Thank you so much Tharwat. Now its working good. Quote Link to comment Share on other sites More sharing options...
Tharwat Posted November 29, 2016 Share Posted November 29, 2016 Thank you so much Tharwat.Now its working good. You're welcome. Quote Link to comment Share on other sites More sharing options...
Grrr Posted November 29, 2016 Share Posted November 29, 2016 Hello Grrr perfect Is working! thank you Still the offset orientation is an issue, although I tried to solve that problem with (cond). Maybe someone else could contribute about this. Quote Link to comment Share on other sites More sharing options...
Lee Mac Posted November 29, 2016 Share Posted November 29, 2016 Still the offset orientation is an issue, although I tried to solve that problem with (cond). Maybe someone else could contribute about this. You will need to test the polyline orientation - see this example. 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.