Jump to content

Recommended Posts

Posted (edited)

A potentially more viable option, in terms of the plausibility of the resulting curve, would be to obtain a dense list of points from the arcs to be modified, recalculate them using the requested parameters, and create a spline fitted to those points.

Edited by GLAVCVS
  • Like 1
  • Agree 1
Posted
26 minutes ago, GLAVCVS said:

A potentially more viable option, in terms of the plausibility of the resulting curve, would be to obtain a dense list of points from the arcs to be modified, recalculate them using the requested parameters, and create a spline fitted to those points.

 

That was the method I was looking into, bit of a task for me right now. Hopefully time to play with coding today.

 

Splines, Arcs, etc. are fine, I use a closed polyline to ensure no gaps. This goes to a waterjet program and becomes lines eventually anyway.

 

Here is the .dxf ready for waterjet and the same file in a .dwg

Offset at taper WJ.dwg Offset at taper WJ.dxf

Posted

Good stuff, but lacks precision input. I'll look through the information on adapting it though.

 

Lots of good information in that thread. 

  • Like 1
Posted

Hi
ElpanovEvgeniy's idea was inspiring to me, and I decided to adapt it, in my own way, to make it a little more manageable and useful.

I hope so.

Of course, it's open to improvement, but I think that should be left to individual work.

PS: I ask the moderators to modify what they deem necessary in the code references to Elpanov and TheSwamp

 

 

 

;| Adapted from an original idea by ElpanovEvgeniy 26.02.2010        
   https://www.theswamp.org/index.php?topic=30650.msg378483#msg378483
   								     
*******************  p o r d e s í a r g o  ********************     
************************ G L A V C V S *************************     
************************** F E C I T ***************************     
|;
(defun c:offSetea (/ se e pS c? c?c r r1 pu p0 p1 p2 p3 o pt1 pt2 pt3 px1 px2 pa pb ct-r a42 op lgr bd fe *s* para asr dameCentroRadio erroria errores error0)
  (defun erroria ()
    (defun errores (mens)
      (setq *error* error0)
      (entmod fe)
      (prin1)
    )
    (setq error0  *error*
         *error* errores
    )
  )
  (defun asr (p1 p2 p3 / a b)
    (if (> (abs (- (setq a (angle p1 p2)) (setq b (angle p2 p3)))) PI)
      (if (< a b)
        (if (> (+ a PI PI) b) - +)
        (if (> (- a PI PI) b) - +)
      )
      (if (> a b) - +)
    )
  )
  (defun dameCentroRadio (pt1 pt2 a42 / d radio h aP th centro)
    (setq radio (/ (setq d (distance pt1 pt2)) (* 2 (sin (/ (setq th (* 4 (atan a42))) 2)))) ; Radio del arco
	  h  ((if (> (abs th) PI) - +) (sqrt (- (* radio radio) (* (/ d 2) (/ d 2))))); Distancia del centro al punto medio
	  aP (+ (angle pt1 pt2) (* (/ pi 2) (if (> a42 0) 1 -1)))			; Ángulo perpendicular				
	  centro (list (+ (/ (+ (car pt1) (car pt2)) 2) (* h (cos aP))) (+ (/ (+ (cadr pt1) (cadr pt2)) 2) (* h (sin aP))))
    )
    (list centro radio)		; Devuelve centro y radio
  )
  
  (erroria)
  (if (setq se  (entsel "\nSelect LWPOLYLINE..."))
    (if (= (cdr (assoc 0 (entget (setq e (car se))))) "LWPOLYLINE")
      (progn
        (setq c? (= (vla-get-closed (setq o (vlax-ename->vla-object (setq e (car se))))) :vlax-true)
	      c?c (equal (vlax-curve-getPointAtParam o (vlax-curve-getStartParam o)) (vlax-curve-getPointAtParam o (setq pu (vlax-curve-getEndParam o))) 1e-6)	   
	      p1 (fix (vlax-curve-getParamAtPoint o (vlax-curve-getClosestPointTo o (setq pS (cadr se)))))
	      p2 (if (= p1 (1- pu)) (if c? 0 (1+ p1)) (1+ p1))
	      p0 (if (zerop p1) (if c? (1- pu)) (1- p1))
	      p3 (if (= p2 pu) (if (or c? c?c) 1) (1+ p2))
	      pt1 (vlax-curve-getPointAtParam o p1)
	      pt2 (vlax-curve-getPointAtParam o p2)
	      r (vlax-curve-getPointAtParam e (vlax-curve-getParamAtPoint o (vlax-curve-getClosestPointTo o pS)))
	      pt0 (if p0 (vlax-curve-getPointAtParam o p0) (polar pt1 (+ (angle pt1 pt2) (/ PI 2.)) 100))
	      pt3 (if p3 (vlax-curve-getPointAtParam o p3) (polar pt2 (+ (angle pt1 pt2) (/ PI 2.)) 100))
	      a42 (cdr (assoc 42 (member (list 10 (car pt1) (cadr pt1)) (setq fe (entget e)))))
        )
	(while (and (not para) (setq lgr (grread nil 13 0)))
	  (if (or (member (cadr lgr) '(107 75)) (= (car lgr) 25))
	    (if (= (car lgr) 25)
	      (setq para (entmod fe) bd T)
	      (setq *s* (not *s*))
	    )
            (if (zerop a42)
              (setq d (distance
			(setq r1
			       (if *s*
			         (progn
			           (entmod fe)
				   (setq para T)
			           (getpoint r "\nPoint to move to...")
			         )
				 (progn
				   (prompt "\rPress \'k\' to activate keyboard input...")
				   (cond
				     ((= (car lgr) 5) (cadr lgr))
				     ((= (car lgr) 3) (setq para T) (cadr lgr))
				   )
				 )
			       )
		        )
	                (setq r (inters pt1 pt2 (polar r1 (setq a (+ (angle pt1 pt2) (/ PI 2.))) 3) (polar r1 (+ a PI) 3) nil))
	              )
		    px1 (inters pt0 pt1 (setq pa (polar pt1 (setq a ((asr pt1 r r1) (angle pt1 pt2) (/ pi 2.0))) d)) (setq pb (polar pt2 a d)) nil)
		    px2 (inters pt2 pt3 pa pb nil)
              )
;;;    SI LA DIFERENCIA ENTRE EL ANGULO r-r1 Y PT1-PT0 O PT2-PT3 ES MAYOR QUE 1/2PI ENTONCES HAY QUE SUMARLE PI AL ANGULO DE REFERENCIA
              (setq ct-r (dameCentroRadio pt1 pt2 a42)
	            d (- (distance
			   (if *s*
			     (progn
			       (entmod fe)
			       (setq para T)
			       (getpoint r "\nPoint to move to...")
			     )
			     (progn
			       (prompt "\rPress \'k\' to activate keyboard input...")
			       (cond
				 ((= (car lgr) 5) (cadr lgr))
				 ((= (car lgr) 3) (setq para T) (cadr lgr))
			       )
			     )
			   )
			   (setq c (car ct-r))
			 )
			 (abs (cadr ct-r))
		      )
		    px1 (polar pt1 (angle (if (minusp d) pt1 c) (if (minusp d) c pt1)) (abs d))
		    px2 (polar pt2 (angle (if (minusp d) pt2 c) (if (minusp d) c pt2)) (abs d))
              )
	    )
	  )
	  (if (not bd)
	    (foreach l (list (list p1 (list (car px1) (cadr px1))) (list p2 (list (car px2) (cadr px2))))
	      (vla-put-coordinate o (car l) (vlax-make-variant (vlax-safearray-fill (vlax-make-safearray 5 '(0 . 1)) (cadr l))))
	    )
	  )
        )
      )
      (alert "No LWPOLYLINE selected")
    )
    (alert "NOTHING selected")
  )
  (princ)
)

 

  • Thanks 1
Posted

That's very neat, if I have time today I'll look through it. Still perusing that linked thread and other related threads at the swamp.

 

Not sure about inputting distance, but snaps appear to be a problem with grread. 

 

https://www.theswamp.org/index.php?topic=30650.msg379533#msg379533

 

A solution for SNAP... Dynamic drawing and substitution of grread-function though I can't find a recent version.

 

Draw Grid | Lee Mac Programming might be a solution.

I need to be able to do it by entered dimension, so I will work on that.

 

I am terrible at dynamically manipulating polylines, but I might be able to figure out adding a distance input.

 

I guess I needed to change my search terms. I never found that thread at the swamp. Maybe I did and discarded it as not being relevant. 

Posted

@GLAVCVS My apologies, I just noticed K gives the keyboard input option. Works great!

 

Still needs more precision, but that's getting very close.

 

I get this when checking in VLIDE, is that a language issue?

;[CHECKING TEXT OffSetea.lsp loading...]
;
; warning: local variable used as function: ERRORIA
; warning: local variable used as function: ASR
; warning: local variable used as function: DAMECENTRORADIO
; Check done.

 

Posted

No
It's just that I like to use auxiliary functions as local ones. Therefore, a similar message line will always appear for each local function used.

Posted
2 hours ago, SLW210 said:

@GLAVCVS My apologies, I just noticed K gives the keyboard input option. Works great!

 

Still needs more precision, but that's getting very close.

 

I get this when checking in VLIDE, is that a language issue?

;[CHECKING TEXT OffSetea.lsp loading...]
;
; warning: local variable used as function: ERRORIA
; warning: local variable used as function: ASR
; warning: local variable used as function: DAMECENTRORADIO
; Check done.

 

I don't understand: theoretically, if you indicate the distance from the keyboard, it should be exact

Posted

The straight on top does correctly.

 

The bottom I offset 4", I had the mouse at 45, the side was 1" I held the mouse very close. Has to do with mouse position from my reading up on this.

 

Also close in shot of the offset at the straight, shows slight variation.

 

It is very good, but requires knowing how to get it close.

 

If I did this wrong please correct me.

 

Offsetea2.png

Offsetea1.png

Posted

When I have time I'll work on it more, don't get me wrong, it's very nice. I could live with it as is.

Posted (edited)

@SLW210

You're right.
The problem is that only the mouse distance measurement option is enabled, but not keyboard input.
I forgot to add that.
I'll fix it right now.

;| Adapted from an original idea by ElpanovEvgeniy 26.02.2010        
   https://www.theswamp.org/index.php?topic=30650.msg378483#msg378483
   								     
*******************  p o r d e s í a r g o  ********************     
************************ G L A V C V S *************************     
************************** F E C I T ***************************     
|;
(defun c:offSetea (/ se e pS c? c?c d dk r r1 pu p0 p1 p2 p3 o pt1 pt2 pt3 px1 px2 pa pb ct-r a42 op lgr bd fe *s* para asr dameCentroRadio erroria errores error0)
  (defun erroria ()
    (defun errores (mens)
      (setq *error* error0)
      (entmod fe)
      (prin1)
    )
    (setq error0  *error*
         *error* errores
    )
  )
  (defun asr (p1 p2 p3 / a b)
    (if (> (abs (- (setq a (angle p1 p2)) (setq b (angle p2 p3)))) PI)
      (if (< a b)
        (if (> (+ a PI PI) b) - +)
        (if (> (- a PI PI) b) - +)
      )
      (if (> a b) - +)
    )
  )
  (defun dameCentroRadio (pt1 pt2 a42 / d radio h aP th centro)
    (setq radio (/ (setq d (distance pt1 pt2)) (* 2 (sin (/ (setq th (* 4 (atan a42))) 2)))) ; Radio del arco
	  h  ((if (> (abs th) PI) - +) (sqrt (- (* radio radio) (* (/ d 2) (/ d 2))))); Distancia del centro al punto medio
	  aP (+ (angle pt1 pt2) (* (/ pi 2) (if (> a42 0) 1 -1)))			; Ángulo perpendicular				
	  centro (list (+ (/ (+ (car pt1) (car pt2)) 2) (* h (cos aP))) (+ (/ (+ (cadr pt1) (cadr pt2)) 2) (* h (sin aP))))
    )
    (list centro radio)		; Devuelve centro y radio
  )
  
  (erroria)
  (if (setq se  (entsel "\nSelect LWPOLYLINE..."))
    (if (= (cdr (assoc 0 (entget (setq e (car se))))) "LWPOLYLINE")
      (progn
        (setq c? (= (vla-get-closed (setq o (vlax-ename->vla-object (setq e (car se))))) :vlax-true)
	      c?c (equal (vlax-curve-getPointAtParam o (vlax-curve-getStartParam o)) (vlax-curve-getPointAtParam o (setq pu (vlax-curve-getEndParam o))) 1e-6)
	      p1 (fix (vlax-curve-getParamAtPoint o (vlax-curve-getClosestPointTo o (setq pS (cadr se)))))
	      p2 (if (= p1 (1- pu)) (if c? 0 (1+ p1)) (1+ p1))
	      p0 (if (zerop p1) (if c? (1- pu)) (1- p1))
	      p3 (if (= p2 pu) (if (or c? c?c) 1) (1+ p2))
	      pt1 (vlax-curve-getPointAtParam o p1)
	      pt2 (vlax-curve-getPointAtParam o p2)
	      r (vlax-curve-getPointAtParam e (vlax-curve-getParamAtPoint o (vlax-curve-getClosestPointTo o pS)))
	      pt0 (if p0 (vlax-curve-getPointAtParam o p0) (polar pt1 (+ (angle pt1 pt2) (/ PI 2.)) 100))
	      pt3 (if p3 (vlax-curve-getPointAtParam o p3) (polar pt2 (+ (angle pt1 pt2) (/ PI 2.)) 100))
	      a42 (cdr (assoc 42 (member (list 10 (car pt1) (cadr pt1)) (setq fe (entget e)))))
        )
	(while (and (not para) (setq lgr (grread nil 13 0)))
	  (if (or (member (cadr lgr) '(107 75)) (= (car lgr) 25) (not (listp (cadr lgr))))
	    (if (= (car lgr) 25)
	      (setq para (entmod fe) bd T)
	      (if (member (cadr lgr) '(107 75))
		(setq *s* (not *s*))
	      )
	    )
            (if (zerop a42)
              (setq d (distance
			(setq r1
			       (if *s*
			         (progn
			           (entmod fe)
				   (setq para T dk (getreal "\nType the OFFSET distance (ENTER or RIGHT CLICK to indicate point on screen): "))
			           (getpoint r (if dk "\nSide to act on... " "\nPick a point on the screen... "))
			         )
				 (progn
				   (prompt "\rPress \'k\' to activate keyboard input...")
				   (cond
				     ((= (car lgr) 5) (cadr lgr))
				     ((= (car lgr) 3) (setq para T) (cadr lgr))
				   )
				 )
			       )
		        )
	                (setq r (inters pt1 pt2 (polar r1 (setq a (+ (angle pt1 pt2) (/ PI 2.))) 3) (polar r1 (+ a PI) 3) nil))
	              )
		    px1 (inters pt0 pt1 (setq pa (polar pt1 (setq a ((asr pt1 r r1) (angle pt1 pt2) (/ pi 2.0))) (if dk dk d))) (setq pb (polar pt2 a (if dk dk d))) nil)
		    px2 (inters pt2 pt3 pa pb nil)
              )

              (setq ct-r (dameCentroRadio pt1 pt2 a42)
	            d (- (distance
			   (if *s*
			     (progn
			       (entmod fe)
			       (setq para T dk (getreal "\nType the OFFSET distance (ENTER or RIGHT CLICK to indicate point on screen): "))
			       (getpoint r (if dk "\nSide to act on... " "\nPick a point on the screen... "))
			     )
			     (progn
			       (prompt "\rPress \'k\' to activate keyboard input...")
			       (cond
				 ((= (car lgr) 5) (cadr lgr))
				 ((= (car lgr) 3) (setq para T) (cadr lgr))
			       )
			     )
			   )
			   (setq c (car ct-r))
			 )
			 (abs (cadr ct-r))
		      )
		    px1 (polar pt1 (angle (if (minusp d) pt1 c) (if (minusp d) c pt1)) (abs (if dk dk d)))
		    px2 (polar pt2 (angle (if (minusp d) pt2 c) (if (minusp d) c pt2)) (abs (if dk dk d)))
              )
	    )
	  )
	  (if (not bd)
	    (foreach l (list (list p1 (list (car px1) (cadr px1))) (list p2 (list (car px2) (cadr px2))))
	      (vla-put-coordinate o (car l) (vlax-make-variant (vlax-safearray-fill (vlax-make-safearray 5 '(0 . 1)) (cadr l))))
	    )
	  )
        )
      )
      (alert "No LWPOLYLINE selected")
    )
    (alert "NOTHING selected")
  )
  (princ)
)

 

Edited by GLAVCVS
Filter key inputs
  • Like 1
Posted (edited)

P.S.:

I've shielded the rest of the keyboard so it's ignored during the first phase of the command.

When you activate keyboard or screen input, you'll first be given the option to type the distance using the keyboard or, alternatively, with the mouse on the screen (free/snap) 

Be sure to read the instructions in the command line.

Edited by GLAVCVS
Posted

I should learn a lot when I get time to digest this code.

Posted (edited)

 

;| Adapted from an original idea by ElpanovEvgeniy 26.02.2010        
   https://www.theswamp.org/index.php?topic=30650.msg378483#msg378483
   								     
*******************  p o r d e s í a r g o  ********************     
************************ G L A V C V S *************************     
************************** F E C I T ***************************     
|;
(defun c:offSetea (/ se e pS c? c?c d dk r r1 pu p0 p1 p2 p3 o pt1 pt2 pt3 px1 px2 pa pb ct-r a42 op lgr bd fe *s* para asr dameCentroRadio erroria errores error0)
  (defun erroria ()
    (defun errores (mens)
      (setq *error* error0)
      (entmod fe)
      (prin1)
    )
    (setq error0  *error*
         *error* errores
    )
  )
  (defun asr (p1 p2 p3 / a b)
    (if (> (abs (- (setq a (angle p1 p2)) (setq b (angle p2 p3)))) PI)
      (if (< a b)
        (if (> (+ a PI PI) b) - +)
        (if (> (- a PI PI) b) - +)
      )
      (if (> a b) - +)
    )
  )
  (defun dameCentroRadio (pt1 pt2 a42 / d radio h aP th centro)
    (setq radio (/ (setq d (distance pt1 pt2)) (* 2 (sin (/ (setq th (* 4 (atan a42))) 2)))) ; Radio del arco
	  h  ((if (> (abs th) PI) - +) (sqrt (- (* radio radio) (* (/ d 2) (/ d 2))))); Distancia del centro al punto medio
	  aP (+ (angle pt1 pt2) (* (/ pi 2) (if (> a42 0) 1 -1)))			; Ángulo perpendicular				
	  centro (list (+ (/ (+ (car pt1) (car pt2)) 2) (* h (cos aP))) (+ (/ (+ (cadr pt1) (cadr pt2)) 2) (* h (sin aP))))
    )
    (list centro radio)		; Devuelve centro y radio
  )
  
  (erroria)
  (if (setq se  (entsel "\nSelect LWPOLYLINE..."))
    (if (= (cdr (assoc 0 (entget (setq e (car se))))) "LWPOLYLINE")
      (progn
        (setq c? (= (vla-get-closed (setq o (vlax-ename->vla-object (setq e (car se))))) :vlax-true)
	      c?c (equal (vlax-curve-getPointAtParam o (vlax-curve-getStartParam o)) (vlax-curve-getPointAtParam o (setq pu (vlax-curve-getEndParam o))) 1e-6)
	      p1 (fix (vlax-curve-getParamAtPoint o (vlax-curve-getClosestPointTo o (setq pS (cadr se)))))
	      p2 (if (= p1 (1- pu)) (if c? 0 (1+ p1)) (1+ p1))
	      p0 (if (zerop p1) (if c? (1- pu)) (1- p1))
	      p3 (if (= p2 pu) (if (or c? c?c) 1) (1+ p2))
	      pt1 (vlax-curve-getPointAtParam o p1)
	      pt2 (vlax-curve-getPointAtParam o p2)
	      r (vlax-curve-getPointAtParam e (vlax-curve-getParamAtPoint o (vlax-curve-getClosestPointTo o pS)))
	      pt0 (if p0 (vlax-curve-getPointAtParam o p0) (polar pt1 (+ (angle pt1 pt2) (/ PI 2.)) 100))
	      pt3 (if p3 (vlax-curve-getPointAtParam o p3) (polar pt2 (+ (angle pt1 pt2) (/ PI 2.)) 100))
	      a42 (cdr (assoc 42 (member (list 10 (car pt1) (cadr pt1)) (setq fe (entget e)))))
        )
	(while (and (not para) (setq lgr (grread nil 13 0)))
	  (if (or (member (cadr lgr) '(107 75)) (= (car lgr) 25) (not (listp (cadr lgr))))
	    (if (= (car lgr) 25)
	      (setq para (entmod fe) bd T)
	      (if (member (cadr lgr) '(107 75))
		(setq *s* (not *s*))
	      )
	    )
            (if (zerop a42)
              (setq d (distance
			(setq r1
			       (if *s*
			         (progn
			           (entmod fe)
				   (setq para T dk (getreal "\nType the OFFSET distance (ENTER or RIGHT CLICK to indicate point on screen): "))
			           (getpoint r (if dk "\nSide to act on... " "\nPick a point on the screen... "))
			         )
				 (progn
				   (prompt (strcat "\r  " (if d (rtos d 2 3) "0.0") "...Press \'k\' to activate keyboard input..."))
				   (cond
				     ((= (car lgr) 5) (cadr lgr))
				     ((= (car lgr) 3) (setq para T) (cadr lgr))
				   )
				 )
			       )
		        )
	                (setq r (inters pt1 pt2 (polar r1 (setq a (+ (angle pt1 pt2) (/ PI 2.))) 3) (polar r1 (+ a PI) 3) nil))
	              )
		    px1 (inters pt0 pt1 (setq pa (polar pt1 (setq a ((asr pt1 r r1) (angle pt1 pt2) (/ pi 2.0))) (if dk dk d))) (setq pb (polar pt2 a (if dk dk d))) nil)
		    px2 (inters pt2 pt3 pa pb nil)
              )
              (setq ct-r (dameCentroRadio pt1 pt2 a42)
	            d (- (distance
			   (if *s*
			     (progn
			       (entmod fe)
			       (setq para T dk (getreal "\nType the OFFSET distance (ENTER or RIGHT CLICK to indicate point on screen): "))
			       (getpoint r (if dk "\nSide to act on... " "\nPick a point on the screen... "))
			     )
			     (progn
			       (prompt (strcat "\r  " (if d (rtos (abs d) 2 3) "0.0") "...Press \'k\' to activate keyboard input..."))
			       (cond
				 ((= (car lgr) 5) (cadr lgr))
				 ((= (car lgr) 3) (setq para T) (cadr lgr))
			       )
			     )
			   )
			   (setq c (car ct-r))
			 )
			 (abs (cadr ct-r))
		      )
		    px1 (polar pt1 (angle (if (minusp d) pt1 c) (if (minusp d) c pt1)) (abs (if dk dk d)))
		    px2 (polar pt2 (angle (if (minusp d) pt2 c) (if (minusp d) c pt2)) (abs (if dk dk d)))
              )
	    )
	  )
	  (if (not bd)
	    (foreach l (list (list p1 (list (car px1) (cadr px1))) (list p2 (list (car px2) (cadr px2))))
	      (vla-put-coordinate o (car l) (vlax-make-variant (vlax-safearray-fill (vlax-make-safearray 5 '(0 . 1)) (cadr l))))
	    )
	  )
        )
      )
      (alert "No LWPOLYLINE selected")
    )
    (alert "NOTHING selected")
  )
  (princ)
)

One last small improvement that displays the cursor offset in real time (command line) during the first phase of the command.
A very useful little feature, I think.

Edited by GLAVCVS
Filter key inputs
  • Like 2
  • Thanks 1
Posted (edited)
21 hours ago, SLW210 said:

...

 

Not sure about inputting distance, but snaps appear to be a problem with grread. 

 

..... 

 

Yes.
The object reference cannot be enabled while 'GRREAD' is active.
'GRREAD' is like the corner where the Keymaker, the Merovingian, or the Oracle dwell: the rules here are different.

To have an object snap available, it would be necessary to write or implement one (such as Lee Mac's GrSnap, for example).
But this would considerably increase the code, and I think it's unnecessary because, in the second part of the command, object snap is enabled.

 

PS: I modified the code at the last minute yesterday.
You might want to make sure it matches the version you have.

 

Edited by GLAVCVS
  • Thanks 1
Posted

@GLAVCVS Once again thanks for all the work.

 

I will still be reading more on all of this.

 

 

  • Like 1
Posted

@GLAVCVS Nicely done! I'm still trying to get my head completely around this. I am trying to figure out how you are getting real-time coordinates when grread is not in tracking mode? i.e. (grread nil...) vs. (grread T...). I thought tracking mode had to be on to get real-time coordinates from the cursor.

I guess you learn something every new every day, even old AutoLISP programmers like me that started back in the mid 90's.

Also al trying to figure out the significance of flipping the *s* variable back and forth within the loop.

 

Yours does react a little bit differently to ElpanovEvgeniy's original code, in the fact that his original code somehow keeps the tangency of segments adjacent to an arc segment if it exists. 

  • Like 1
Posted

I have mentioned several times, for some reason I struggle with manipulating polylines like this.

 

When work slacks up, I am going to work at getting the hang of this.

 

As of now it seems like witchcraft to me. 😆

  • Like 1

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