Jump to content

Lisp for Double offset in same side but various distance


gmmdinesh

Recommended Posts

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.

aa.jpg

 

 

Thanks in advance.

Link to comment
Share on other sites

  • Replies 28
  • Created
  • Last Reply

Top Posters In This Topic

  • gmmdinesh

    8

  • Grrr

    6

  • Tharwat

    5

  • martinle

    4

Top Posters In This Topic

Posted Images

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.

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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;\;

Link to comment
Share on other sites

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)
)

Link to comment
Share on other sites

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)

SomeOffset.gif

Link to comment
Share on other sites

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)

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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]
)

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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)
)

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...