Question

2D Ellipse to 3D Ellipse

  • 14 May 2013
  • 6 replies
  • 12 views

Badge
I'm close to a breakthrough but struggling to find a way to create 3D Ellipses. I have a workbench that exposes a number of parameters that essentially creates a dynamic, user-defined 2D ellipse.

 

 

The 3D bufferer would be great except it only lets me input the radius (which would be fine if I could specify an X, Y, and Z radius.  

 

 

Currently the 2D ellipse bufferer is PERFECT in that it lets me specify a major and minor axis plus the rotation all in one transformer. If only we could input a z axis it would be great. In lieu of this, is there a way to turn this transformer into a 3D version or is there a workflow that I could use to create the "z" axis?

 

 

Thanks

 

 

 

Matt

6 replies

Userlevel 2
Badge +17
Hi Matt,

 

 

The 3DForcer transformer can change 2D geometry to 3D. Is this function what you are looking for?

 

 

Takashi
Badge
Unfortunately no. The 3D Forcer allows me to place the 2D ellipses at the correct sub-surface location (I have already incorporated it into the model elsewhere for this) as the attribute contains a "bottom hole" location.

 

 

However, I am still left with a 2D ellipse/buffer.

 

 

 

Userlevel 4
Badge +13
Hi Matt,

 

 

How about the extruder?

 

 

Cheers,

 

Itay
Badge +21
Hm, if you want the "walls" then you can use the Extruder for the walls and then for the "top of the hole" you can just use the 3DForcer to the "top height".

 

 

I assume you are using FME2013?
Badge
Hey guys,

 

The Extruder gets me closer to the target, but I had abandoned that a bit earlier as it essentially get's me a "walled 3d ellipse."  I need more of a "buffered" ellipse if that makes sense. Something more along the lines of the 3D Bufferer (the custom transformer in the FME store.) 

 

 

I may be pushing the bounds of what FME can do in terms of 3D at the moment so I'm not going to press the issue. I'm going to contact the Safe support team directly on this one as it could be a great addition to the "normal" tranformers.

 

 

Oh and FME 2013 Sig!
Badge +3

 

Hi all,

 

 

Interesting problem.

 

A fine job for goniometry...

 

  1. I created an elipse using the creator transformer. Then use geometrycoercer to line. Then chopper with 1 vertex to get the vertices.
  2. for resolution of the elipse i clone these vertices. Then coordinateextractor with z=0 when u start in the x- plane.
  3. nect create an angle attribute:=360/$(resolutie)*@Value(_copynum) Here resolutie (resolution is number of points in a circle, i started my bench with 30.
  4. create a LinkAll attribute value=1, value is arbitrary its just to merge. (like unconditional merger)
  5. next bit is parallel flow to prior:
  6.  i extracted the axis: the axis wil be the vecor around wich u rotate 3D. Usualy this vector is written as (u,v,w).
  7. next u calculate the length of this axis: L=pow(@Value(u),2)+pow(@Value(v),2)+pow(@Value(w),2)
  8. create again a LinkAll=1 atribute.
  9. Merge objects with axis and L using merge and LinkAll.
  10. directly after merger comes the math. It's preetty big. This works:
  11. attributecreator and enter 3 attributes like this:
  12. attribute x' value=((@Value(CB_X)*(pow(@Value(v),2)+pow(@Value(w),2))-@Value(u)*(@Value(CB_Y)*@Value(v)+@Value(CB_Z)*@Value(w)-@Value(u)*@Value(N_x)-@Value(v)*@Value(N_y)-@Value(w)*@Value(N_z)))*()
  13. attribute y' value=((@Value(CB_Y)*(pow(@Value(u),2)+pow(@Value(w),2))-@Value(v)*(@Value(CB_X)*@Value(u)+@Value(CB_Z)*@Value(w)-@Value(u)*@Value(N_x)-@Value(v)*@Value(N_y)-@Value(w)*@Value(N_z)))*()
  14. attribute z' value=((@Value(CB_Z)*(pow(@Value(u),2)+pow(@Value(v),2))-@Value(w)*(@Value(CB_X)*@Value(u)+@Value(CB_Y)*@Value(v)-@Value(u)*@Value(N_x)-@Value(v)*@Value(N_y)-@Value(w)*@Value(N_z)))*()
  15. now a 3dpointreplacer using x',y' and z'
  16. now u have points neatly rotated around axis of choice in elipse. All you eed to do now is make the surface.
u can do this for all kinds of objects. This set-up starts form the x/y plane and starts with z=0.

 

If u use like a 3d object to rotate around an axis, u need to correctly start your starting coordinates.

 

My function F(N_x,N_Y,N_z,CB_X,CB_Y,CB_Z,u,v,w,0)

 

N_x,N_Y,N_z : object vertices.

 

CB_X,CB_Y,CB: point trough wich your axis goes.

 

u,v,w: axis vector

 

0: bit hard to explain, u need to look up the math. check out this link: http://inside.mines.edu/~gmurray/ArbitraryAxisRotation/

 

 

 

have fun!

 

if there is a adres to mail it to, i can mail the bench.

 

 

Laters all.

 

Reply