Beispiel #1
0
    def __init__(self, pol2D, frames, name='TMP', **kwargs):
        pol = pol2D
        # If it is closed, the first and last points are the same
        close_polyline = False
        if pol.is_closed:
            pol.pop()
            close_polyline = True

        # the number of points of the polyline.
        Npt = len(pol)

        dphys = {}

        if ('mode' in kwargs) and (kwargs['mode'] == 'profile'):
            dphys['extrados'] = {'indices': [0, Npt / 2], 'surfaces': []}
            dphys['intrados'] = {'indices': [Npt / 2, Npt], 'surfaces': []}
        dphys['default'] = {'surfaces': []}

        geom = pg.built_in.Geometry()
        # there is one more quaternion/frame than slices
        Nslices = len(frames) - 1

        if 'close_caps' in kwargs:
            if kwargs['close_caps'] == True:
                cap_ends = True
            else:
                cap_ends = False

        if ('scales' in kwargs) and (len(kwargs['scales']) == len(frames)):
            scales = kwargs['scales']
        else:
            scales = [1. for i in range(len(frames))]

        # get the first polyline
        first = pol.to_frame(frames[0], scale=scales[0])

        l_first = first.pop_to_geom(geom)
        l_second = None
        # l_first contains the GMSH segments of the first polyline
        # the j-th segment's first/second point l_first[j].points[0/1] ...

        # FIRST CAP (IF POLYLINE IS CLOSED)
        if cap_ends and close_polyline:
            loop = []
            for iseg, segment in enumerate(l_first):
                loop.append(segment)
            loop.append(
                geom.add_line(l_first[-1].points[1], l_first[0].points[0]))
            lloop_first = geom.add_line_loop(loop)
            cap_first = geom.add_plane_surface(lloop_first)

            dphys['default']['surfaces'].append(cap_first)

        for i in range(Nslices):
            second = pol.to_frame(frames[i + 1], scale=scales[i + 1])
            l_second = second.pop_to_geom(geom)

            # extrusion of the OPEN polyline
            for j in range(len(l_first)):
                l0 = -l_first[j]
                l1 = geom.add_line(l_first[j].points[0], l_second[j].points[0])
                l2 = l_second[j]
                l3 = geom.add_line(l_second[j].points[1], l_first[j].points[1])

                lloop = geom.add_line_loop([l0, l1, l2, l3])
                sf = geom.add_surface(lloop)

                to_physical = False
                for k in dphys.keys():
                    if ('indices' in dphys[k]) and (len(dphys[k]['indices'])
                                                    == 2):
                        start = min(dphys[k]['indices'])
                        end = max(dphys[k]['indices'])
                        if (j >= start) and (
                                j < end
                        ):  # append the surface to the right physical group...
                            dphys[k]['surfaces'].append(sf)
                            to_physical = True

                if not to_physical:
                    dphys['default']['surfaces'].append(sf)

            if close_polyline:
                # CLOSE THE POLYLINE
                l0 = geom.add_line(l_first[0].points[0], l_first[-1].points[1])
                l1 = geom.add_line(l_first[-1].points[1],
                                   l_second[-1].points[1])
                l2 = geom.add_line(l_second[-1].points[1],
                                   l_second[0].points[0])
                l3 = geom.add_line(l_second[0].points[0], l_first[0].points[0])
                lloop = geom.add_line_loop([l0, l1, l2, l3])
                sf = geom.add_surface(lloop)
                dphys['default']['surfaces'].append(sf)

            first = second
            l_first = l_second

        if cap_ends and close_polyline:
            # LAST CAP (IF POLYLINE IS CLOSED)
            # l_second is now the last polyline :
            loop = []
            for segment in l_second:
                loop.append(-segment)
            loop.append(
                geom.add_line(l_second[0].points[0], l_second[-1].points[1]))
            lloop_last = geom.add_line_loop(loop)
            cap_last = geom.add_plane_surface(lloop_last)
            dphys['default']['surfaces'].append(cap_last)

        for k in dphys.keys():
            geom.add_physical_surface(dphys[k]['surfaces'], label=k)

        write_geo(name, geom)
        import subprocess
        exe_gmsh = '/home/fon/gmsh-3.0.3-git-Linux/bin/gmsh'
        subprocess.call([
            exe_gmsh, name + '.geo', '-2', '-o', name + '.msh', '>',
            name + '.mshlog'
        ])
        tri = read_msh_file(name)
        super(TriangulatedExtrusion, self).__init__(vertices=tri['vertices'],
                                                    faces=tri['faces'])
Beispiel #2
0
ndisc = 20
fa = spline.frame_array(mode=Vector([0., 0., 1.]), n=ndisc)

for f in fa:
    pp = pol.to_frame(f, scale=0.2)
    pp.pop_to_geom(geom)

cpol = spline.control_polyline
pol_gen = spline.discretize(ndisc)

sym = spline.symmetrize()

fasym = sym.frame_array(mode=Vector([0., 0., 1.]), n=ndisc)
sym_pol_gen = sym.discretize(ndisc)
for i, f in enumerate(fa):
    bas = f[1]
    new_bas = [[-bas[0][0], -bas[0][1], -bas[0][1]],
               [bas[1][0], bas[1][1], bas[1][1]],
               [bas[2][0], bas[2][1], bas[2][1]]]

    fmirror = Frame([fasym[i][0], new_bas])
    pp = pol.to_frame(fmirror, scale=0.2)
    pp.pop_to_geom(geom)

cpol.pop_to_geom(geom)
pol_gen.pop_to_geom(geom)
sym.control_polyline.pop_to_geom(geom)
sym_pol_gen.pop_to_geom(geom)

write_geo('toto', geom)
Beispiel #3
0
fin_rot = lambda s: 0.

fin_gen = ParametricCurve3D(finX, finY, finZ)
fin = Extrusion(fin_pol,
                fin_gen,
                mode=Vector([0., 1., 0.]),
                scale=fin_scale,
                rotate=fin_rot,
                n=13)
print fin

medax.pop_to_geom(geom)
aft_wing.pop_to_geom(geom)
fore_wing.pop_to_geom(geom)
fin.pop_to_geom(geom)
write_geo('medax', geom)

import sys
#fore_cad = extrusion_to_ruled_surfaces(fore_wing, cap = True)
#aft_cad = extrusion_to_ruled_surfaces(aft_wing, cap = True)
wing1 = extrusion_to_solid(fore_wing, 'fore')
wing2 = extrusion_to_solid(aft_wing, 'aft')
med_ax = extrusion_to_solid(medax, 'med')
fin_s = extrusion_to_solid(fin, 'fin')


#bb, boundaries = named_cartesian_box(xmin = -10., xmax = 10. , ymin = 0., ymax = 10., zmin=-5., zmax=5.)
def merge_dicts(*largs):
    d = {}
    for dico in largs[0]:
        for key in dico:
Beispiel #4
0
    #display.DisplayShape(wire_extrados.Shape(), update=True)
    #display.DisplayShape(wire_intrados.Shape(), update=True)
    display.DisplayShape(wire.Shape(), update=True)

    generator_extrados.AddWire(wire_extrados.Wire())
    generator_intrados.AddWire(wire_intrados.Wire())
    generator_trailing_edge.AddWire(wire_trailing_edge.Wire())
    generator.AddWire(wire.Wire())

#start_display()
generator_extrados.Build()
extrados_shape = generator_extrados.Shape()
generator_intrados.Build()
intrados_shape = generator_intrados.Shape()
generator_trailing_edge.Build()
trailing_edge_shape = generator_trailing_edge.Shape()
intrados_trailing_edge = generator_trailing_edge.Shape()
display.DisplayShape(extrados_shape)
display.DisplayShape(intrados_shape)
display.DisplayShape(trailing_edge_shape)

generator.Build()
#display.DisplayShape(generator.Shape())
step_writer.Transfer(extrados_shape, STEPControl_AsIs)
step_writer.Transfer(intrados_shape, STEPControl_AsIs)

#step_writer.Transfer(generator.Shape(), STEPControl_AsIs)
status = step_writer.Write("surface.stp")
start_display()
write_geo('foil', geom)
Beispiel #5
0
    for i, pt in enumerate(face[:-1]):
        p0 = geom.add_point((pt[0], pt[1], pt[2]), 1.)
        pts.append(p0)
    for i, p in enumerate(pts[:-1]):
        li = geom.add_line(p, pts[i + 1])
        lloop.append(li)
    li = geom.add_line(pts[-1], pts[0])
    lloop.append(li)
    ll = geom.add_line_loop(lloop)
    sf = geom.add_plane_surface(ll)
    heat_phys.append(sf)

geom.add_physical_surface(heat_phys, label='heats')
name = 'maison'

write_geo(name, geom)
import subprocess
from youbastard.geometry.Triangulation import Triangulation, read_msh_file
exe_gmsh = '/home/fon/gmsh-3.0.3-git-Linux/bin/gmsh'
subprocess.call([
    exe_gmsh, name + '.geo', '-2', '-o', name + '.msh', '>', name + '.mshlog'
])
tri = read_msh_file(name)

print tri['faces']['windows']

tri.write_fms_file(name)

print house.keys()
d = {}
d['faces'] = house['faces']
Beispiel #6
0
]

fore_generator = Spline3D(fore_gen_point)
fore_wing = Extrusion(fore_pol,
                      fore_generator,
                      scale=fore_chordf,
                      rotate=fore_rot_fun)
fore_wing.pop_to_geom(geom)

if aft_pol.is_closed:
    open_pol = aft_pol[:-1]
else:
    open_pol = aft_pol

npt = len(open_pol)

aft_pol = {
    'extrados': Polyline2D(open_pol[:(npt - 1) / 2 + 1]),
    'intrados': Polyline2D(open_pol[(npt - 1) / 2:]),
    'trailing_edge': Polyline2D([open_pol[-1], open_pol[0]])
}

aft_generator = Spline3D(aft_gen_point)
aft_wing = Extrusion(aft_pol,
                     aft_generator,
                     scale=aft_chordf,
                     rotate=aft_rot_fun,
                     n=20)
aft_wing.pop_to_geom(geom)
write_geo('testex', geom)