Author Topic: 3d eccentric reducing pipe  (Read 5590 times)

0 Members and 1 Guest are viewing this topic.

Barry Clark

  • Guest
3d eccentric reducing pipe
« on: January 16, 2006, 10:43:15 AM »
OK, this is an interesting one that I cannot find a good answer for.

I am trying to make a reducing pipe. It is very short. It reduces from 6" to 3" and the one side of the 3" opening is flush to the same quadrant of the 6" opening. However, when I draw a line through the quadrant points and slice a cone through the points, I end up with a very slight ellipse and I need it to be a circle with a 6" and 3" diameter.

Not entirely sure if that made sense.


  • Automatic Duh Generator
  • King Gator
  • Posts: 4039
Re: 3d eccentric reducing pipe
« Reply #1 on: January 16, 2006, 11:10:59 AM »
it made sense, now just how do we draw that....
Everyone has a photographic memory, Some just don't have film.
They say money can't buy happiness, but it can buy Bacon and that's a close second

Kate M

  • Guest
Re: 3d eccentric reducing pipe
« Reply #2 on: January 16, 2006, 12:26:43 PM »
From what I've heard, you can't draw these types of reducers with vanilla AutoCAD. Some routines come close, but Inventor or similar programs are the only ones that can do it for real.

Barry Clark

  • Guest
Re: 3d eccentric reducing pipe
« Reply #3 on: January 16, 2006, 12:39:19 PM »
I got a way. This is not the easiest thing in the world but it works.

It was posted on the CADTutor forum here.

Code: [Select]
for making the frustum of the eccentric cone start drawing the circles of the diameters required- for base circle

and top circle.

then keep them at a distance which is equal to the height of the frustum.

offset the centers equal to the required eccentricity.

Join the top quad points of the circle.

Similarly join the bottom quad points.

the lines joining the top and bottom quad points respectively of the circles will lie in the periphery of the

cone. Now the task starts.

Fillet these two lines to get them joined at a point.

This point is the apex of the required elliptical cone.

Make a circle with this apex as the center and radius equals the larger line.

Extend the shorter line to intersect with this circle.

Now join the end of these lines to get a triangle which is the shape of the eccentric cone in plan view.

Join the apex and the mid poinl t of the base of this triangle.

This bisector line will pass through the vertical diameter line of the first base circles – intersect the vertical

diameter lines at some points.

Make a line from this intersection point horizontal and cuts the periphery of the base circle. This line is

obviously shorter than the radius of the base circles.

Consider only the larger base circle for the time being.

Rotate this latest line in 3d at an angle of (–90degree). Now we have a line in the z direction.

Go to SW isometric view for better clarity.

Draw a line from apex point to the top end of this line in z-direction.

Copy the vertical line to the end of the bisector line.

Fillet the copied line  with the line joining the apex and the original vertical line in z direction.

This filleted point is the end of the minor axis of the ellipse of the cone.

And base of the first triangle is the major axis of the ellipse.

Use UCS 3point for making the required UCS. Origin is the mid point of the baseline.

Then point on x axis is the top end of the baseline.

Point on y axis U   is the top end of the second vertical line in z-direction.

Now with this ucs we have to make an elliptical cone. Now we have the major axis, minor axis and apex point to

make the required elliptical cone.

After finishing this elliptical cone go back to UCS world and plan view.

Now make some solid boxes to subtract the unwanted portion of the cone to get the frustum or slicing can be done.

Same method can be used for making a full eccentric cone also if frustum is not required. Note that all regular

cones are subsets of eccentric cones.

After subtraction rotate the original base circles also in 3d to see that they exactly match the 3d solid bases.

Or explode the cone to see that the ends are circles or very close to circle-ratio of radii.
The description is lengthy. But follow it line by line. I can’t think of shorter description. I am unable to

attach sample cad file. If some body require give your email id.
Is somebody there to make a lisp program for this to make the job simpler!!!

or.... you can just load this lisp routine.

Code: [Select]
defun c:econe()
  (command "ucs" "w")
  (setq circle_1 (car (entsel "Click on the bottom circle"))) (terpri)
  (setq circle_1_info (entget circle_1))
  (setq circle_1_centre (cdr (assoc 10 circle_1_info)))
  (setq circle_1_radius (cdr (assoc 40 circle_1_info)))

  (setq circle_2 (car (entsel "Click on the top circle"))) (terpri)
  (setq circle_2_info (entget circle_2))
  (setq circle_2_centre (cdr (assoc 10 circle_2_info)))
  (setq circle_2_radius (cdr (assoc 40 circle_2_info)))

  (setq delta_x (- (car circle_2_centre) (car circle_1_centre)))
  (setq delta_y (- (cadr circle_2_centre) (cadr circle_1_centre)))
  (setq delta_z (- (caddr circle_2_centre) (caddr circle_1_centre)))

  (if (= delta_z 0)
    (princ "Z values of each are the same - no cone possible") (terpri)

  (if (/= delta_z 0)
    (if (and (= delta_x 0) (= delta_y 0))
      (setq point_1 circle_1_centre)
      (setq point_2 circle_2_centre)
      (setq point_3 (list (+ (car circle_2_centre) circle_2_radius)
                          (cadr circle_2_centre)
                          (caddr circle_2_centre)))
      (setq point_4 (list (+ (car circle_1_centre) circle_1_radius)
                          (cadr circle_1_centre)
                          (caddr circle_1_centre)))
      (command "ucs" "x" 90)
      (setq p1t (trans point_1 0 1))
      (setq p2t (trans point_2 0 1))
      (setq p3t (trans point_3 0 1))
      (setq p4t (trans point_4 0 1))
      (command "pline" p1t p2t p3t p4t "c")
      (setq entity_a (entlast))
      (command "revolve" entity_a "" p1t p2t "")
    (if (or (/= delta_x 0) (/= delta_y 0))
      (setq point_1 circle_1_centre)
      (setq point_2 circle_2_centre)
      (setq point_3 (list (car point_2)
                          (cadr point_2)
                          (caddr point_1)))
      (setq centreline_angle (angle point_3 point_1))
      (setq point_4 (list (+ (car point_1) (* circle_1_radius (cos centreline_angle)))
                          (+ (cadr point_1) (* circle_1_radius (sin centreline_angle)))
                          (caddr point_1)))
      (setq point_5 (list (+ (car point_1) (* circle_1_radius (cos (- centreline_angle pi))))
                          (+ (cadr point_1) (* circle_1_radius (sin (- centreline_angle pi))))
                          (caddr point_1)))
      (setq point_6 (list (+ (car point_2) (* circle_2_radius (cos centreline_angle)))
                          (+ (cadr point_2) (* circle_2_radius (sin centreline_angle)))
                          (caddr point_2)))
      (setq point_7 (list (+ (car point_2) (* circle_2_radius (cos (- centreline_angle pi))))
                          (+ (cadr point_2) (* circle_2_radius (sin (- centreline_angle pi))))
                          (caddr point_2)))
      (setq apex (inters point_4 point_6 point_5 point_7 nil))
      (setq length_1 (distance point_4 apex))
      (setq length_2 (distance point_5 apex))
      (command "line" apex point_5 "")
      (setq entity_b (entlast))
      (setq entity_b_name (cdr (car (entget entity_b))))
      (command "scale" entity_b "" apex (/ length_1 length_2))
      (setq entity_b_info (entget entity_b))
      (setq point_8 (cdr (assoc 11 entity_b_info)))
      (setq point_9 (list (/ (+ (car point_4) (car point_8)) 2.0)
                          (/ (+ (cadr point_4) (cadr point_8)) 2.0)
                          (/ (+ (caddr point_4) (caddr point_8)) 2.0)))
      (setq point_10 (inters point_4 point_5 point_9 apex nil))""
      (command "line" point_10 apex "")
      (setq entity_b2 (entlast))
      (setq point_11 (list (/ (+ (car point_4) (car point_5)) 2.0)
                           (/ (+ (cadr point_4) (cadr point_5)) 2.0)
                           (/ (+ (caddr point_4) (caddr point_5)) 2.0)))
      (setq centre_dist (distance point_10 point_11))
      (setq d2 (sqrt (- (* circle_1_radius circle_1_radius) (* centre_dist centre_dist))))
      (command "osnap" "off")
      (command "ucs" "3p" point_4 point_5 "")
      (setq point_10t (trans point_10 0 1))
      (setq point_12t (list (car point_10t)
                            (+ (cadr point_10t) d2)
                            (caddr point_10t)))
      (setq point_12 (trans point_12t 1 0))
      (command "ucs" "w")
      (command "line" point_12 apex "")
      (setq entity_b3 (entlast))
      (command "ucs" "3p" point_9 point_8 apex)
      (command "ucs" "x" -90)
      (setq point_13t (list 0 50 0))
      (setq point_12t2 (trans point_12 0 1))
      (setq apext (trans apex 0 1))
      (setq origin_t (list 0 0 0))
      (setq e1 (trans point_8 0 1))
      (setq e2 (inters origin_t point_13t point_12t2 apext nil))
      (command "cone" "e" "c" origin_t e1 e2 "a" apext)
      (command "rotate" "l" "" origin_t 90)
      (setq entity_d (entlast))
      (command "ucs" "w")
      (command "erase" entity_b "")
      (command "erase" entity_b2 "")
      (command "erase" entity_b3 "")
      (command "circle" circle_1_centre (* 1000 circle_1_radius))
      (setq entity_e (entlast))
      (command "extrude" entity_e "" -10000 "")
      (setq entity_f (entlast))
      (command "circle" circle_2_centre (* 1000 circle_2_radius))
      (setq entity_g (entlast))
      (command "extrude" entity_g "" 10000 "")
      (setq entity_h (entlast))
      (command "subtract" entity_d "" entity_f entity_h "")

Both of the above methods worked for me.

Barry Clark

  • Guest
Re: 3d eccentric reducing pipe
« Reply #4 on: January 16, 2006, 02:52:49 PM »
I have a fairly quick method of doing this now. If anyone knows of a free screen recorder, I will put it up.


Barry Clark

  • Guest
Re: 3d eccentric reducing pipe
« Reply #5 on: January 16, 2006, 03:14:14 PM »
I got one. I will post it when I get home.


  • Guest
Re: 3d eccentric reducing pipe
« Reply #6 on: January 19, 2006, 07:47:50 AM »
In the Swamp parts library there are a whole group of 3D eccentric reduceres created in Inventor and saved to Autocad .dwg format.  I got these from a gentleman using Inventor.  These are great 3D eccentrics...not just tapered cones.  Check them out.

Jürg Menzi

  • Swamp Rat
  • Posts: 598
  • Oberegg, Switzerland
Re: 3d eccentric reducing pipe
« Reply #7 on: January 19, 2006, 10:30:28 AM »
Can be done with 5 commands:
- draw both circles
- draw a line between both center points
- get the angle of the line
- extrude > path > taper angle (line angle)
because of a precision problem of AutoCAD, the angle maybe must be adjust a little bit... :roll:

A computer's human touch is its unscrupulousness!
Current A2k16... A2k21 - Start R2.18

Barry Clark

  • Guest
Re: 3d eccentric reducing pipe
« Reply #8 on: January 20, 2006, 07:36:25 AM »
Thanks! I have actually already gotten a solution to this. I posted a method in another thread. Thanks again!


  • Newt
  • Posts: 28
Re: 3d eccentric reducing pipe
« Reply #9 on: January 21, 2006, 03:55:49 AM »
Try out this DEMO to make eccentric round-to-round or square-to-round transitions.
(Remove the .txt extension first)