mirror of
https://github.com/NGSolve/netgen.git
synced 2024-12-25 05:20:34 +05:00
add ellipse as csg2d solid object
This commit is contained in:
parent
f97601bca2
commit
870b147926
@ -1,5 +1,6 @@
|
||||
from .libngpy._geom2d import SplineGeometry, Solid2d, CSG2d, Rectangle, Circle, EdgeInfo, PointInfo
|
||||
from .meshing import meshsize
|
||||
import math as math
|
||||
|
||||
unit_square = SplineGeometry()
|
||||
_pnts = [ (0,0), (1,0), (1,1), (0,1) ]
|
||||
@ -144,3 +145,34 @@ def cp(p_or_px, py_or_none = None):
|
||||
return EdgeInfo(control_point=p)
|
||||
else:
|
||||
return EdgeInfo(control_point=(p_or_px,py_or_none))
|
||||
|
||||
|
||||
def Ellipse(center, a, b, bc="ellipse", mat="ellipse"):
|
||||
"""Creates ellipse centered at point center with principle axis a and b.
|
||||
|
||||
Parameters
|
||||
---------
|
||||
center : Vec2
|
||||
center of ellipse
|
||||
a : Vec2
|
||||
first principle axis, needs to be perpendicular to b
|
||||
b : Vec2
|
||||
second principle axis, needs to be perpendicular to a
|
||||
bc : string
|
||||
boundary name
|
||||
mat : string
|
||||
material name
|
||||
"""
|
||||
if abs(a[0]*b[0] + a[1]*b[1]) > 1e-12:
|
||||
raise Exception("In Ellipse: principle axis a and b are not perpendicular")
|
||||
|
||||
ellipse = Circle( center=(0,0), radius=1.0, mat=mat, bc=bc )
|
||||
|
||||
alpha = math.pi/2-math.atan2(a[0],a[1])
|
||||
r_a = math.sqrt(a[0]**2+a[1]**2)
|
||||
r_b = math.sqrt(b[0]**2+b[1]**2)
|
||||
ellipse.Scale( (r_a,r_b) )
|
||||
ellipse.Rotate( alpha/math.pi*180, center=(0,0) )
|
||||
ellipse.Move( center )
|
||||
|
||||
return ellipse
|
||||
|
Loading…
Reference in New Issue
Block a user