Beispiel #1
0
def setup_func():
    sc = pgl.Scene()
    sc += pgl.Shape(pgl.Box(1, 1, 1), red, id=1)
    sc += pgl.Shape(pgl.Translated(4, 4, 6, pgl.Sphere(1)), blue, id=2)
    sc += pgl.Shape(pgl.Translated(2, 3, -3, pgl.Cone(1, 2)), green, id=3)
    sc += pgl.Shape(pgl.Translated(-8, 3, -2, pgl.Box(4, 2, 0.5)), blue, id=4)
    sc += pgl.Shape(pgl.Translated(
        -4, -2, 5, pgl.EulerRotated(3.14, 2.7, 0, pgl.Cone(2, 5))),
                    green,
                    id=5)
    sc += pgl.Shape(pgl.Translated(4, -3, -3, pgl.Sphere(2)), red, id=6)
    return sc
Beispiel #2
0
def cones(obj, **kwds):
    X_attr = kwds.get('X_attr', 'X')
    Y_attr = kwds.get('Y_attr', 'Y')
    pos_dist = kwds.get('dist', 'Distance')
    pos_az = kwds.get('az', 'Azimuth')
    circ_attr = kwds.get('circ_attr', 'Circonference')
    height_attr = kwds.get('height_attr', 'Haut')
    botHoup_attr = kwds.get('botHoup', 'BaseHoup')
    radiusHoup_prefix = kwds.get('radiusHoup_prefix', 'r_houp')
    radiusHoup = kwds.get('radiusHoup', None)
    wood = kwds.get('wood', True)
    rgb = kwds.get('rgb', None)
    spec_name = kwds.get('spec_name', 'houppier_mat')

    if not obj.__dict__.has_key("posX") and not obj.__dict__.has_key("posY"):
        try:
            r = obj.__dict__[pos_dist]
            a = obj.__dict__[pos_az]
            obj.posX = r * cos(radians(forest2geomAZ(a)))
            obj.posY = r * sin(radians(forest2geomAZ(a)))
        except KeyError:
            obj.posX = obj.__dict__[X_attr]
            obj.posY = obj.__dict__[Y_attr]

    ht = 100 * (obj.__dict__[height_attr] - obj.__dict__[botHoup_attr])

    rd_kz = [k for k in obj.__dict__.keys() if radiusHoup_prefix in k]
    radii = [obj.__dict__[k] for k in rd_kz]

    if radiusHoup:
        if radiusHoup == 'Max':
            cone_radius = 1.0 * max(radii)
        else:
            cone_radius = obj.__dict__[radiusHoup]
    else:
        cone_radius = 1.0 * sum(radii) / len(radii)
        #cone_radius = ht/2.
    h = pgl.Translated(
        pgl.Vector3(obj.posX, obj.posY, obj.__dict__[botHoup_attr] * 100),
        pgl.Cone(cone_radius, ht, 1, 12))
    tr = pgl.Translated(
        pgl.Vector3(obj.posX, obj.posY, 0),
        pgl.Cylinder(obj.__dict__[circ_attr] / (2 * pi),
                     obj.__dict__[botHoup_attr] * 100 + ht * 0.1))

    if rgb == None:
        s_h = pgl.Shape(h, stand_material(spec_name=spec_name))
    else:
        r, g, b = rgb
        s_h = pgl.Shape(h, stand_material(r, g, b, spec_name))

    s_tr = pgl.Shape(
        tr,
        stand_material(spec_name="trunk_mat"),
    )  # s_h.id*10 )

    if wood:
        return (s_h, s_tr)
    else:
        return (s_h, )
Beispiel #3
0
def arrow(x,y,z,length,az=0, el=0, radius=None, color=color(255,255,255),id=0):
  if radius==None:
    radius=length*0.05
  rad_az = math.radians(az)
  rad_el = math.pi/2 - math.radians(el)
  v = pgl.Vector3( x, y, z )
  c = pgl.Cylinder(radius, length*0.8, 10)
  con =pgl.Translated(pgl.Vector3(0,0,length*0.7), pgl.Cone(2*radius, length*0.3))
  arr = pgl.Group([c,con])
  dir_arr = pgl.EulerRotated(rad_az,rad_el,0,arr)
  tr_dir_arr = pgl.Translated(v,dir_arr)
  return pgl.Shape(tr_dir_arr, color, id)
Beispiel #4
0
def cone( x,y,z, color=color( 30,10,140 ) ):
  v = pgl.Vector3( x, y, z )
  d = pgl.Cone( 0.4, 0.4 )
  tr = pgl.Translated( v,d )
  return pgl.Shape( tr, color )
Beispiel #5
0
 def Cone(self, radius=1., height=1., bottom_open=False, **kwds):
     # TODO: Implement bottom_open (bool)
     radius, height = float(radius), float(height)
     solid = not bottom_open
     return (pgl.Cone(radius=radius, height=height, solid=solid),
             pgl.Matrix4.translation(Vector3(0, 0, height)))
Beispiel #6
0
ACYLINDER_PRIMITIVE.name = "ACylinderPrimitive"
ACYLINDER_STANDARD_RADIUS = 1.
ACYLINDER_STANDARD_HEIGHT = 1.
ACYLINDER_STANDARD_AXIS = ASHAPE3D_STANDARD_AXIS

ASPHERE_PRIMITIVE = pgl.Sphere()
ASPHERE_PRIMITIVE.name = "ASpherePrimitive"
ASPHERE_STANDARD_RADIUS = 1.

AARROW_STANDARD_AXIS = ASHAPE3D_STANDARD_AXIS
AARROW_STANDARD_RADIUS = 1.
AARROW_STANDARD_HEIGHT = 1.
AARROW_SHAFT_PROPORTION = 0.7
AARROW_HEAD_PROPORTION = 1.5

ACONE_PRIMITIVE = pgl.Cone()
ACONE_PRIMITIVE.name = "AConePrimitive"


class AShape3D(object):
    """Basic shape used to wrap all <2 axis objects.
    
    Internally all the visual object are characterised by 3 transformation components:
    
        * scaling,
        * rotation,
        * translation.
        
    The order of applying these operations:  scaling, rotation, translation. This component is enough to express the position
    of many one-axis symetry objects. For more complex objects, the manual ingeration into component might be required
    (or different strategy should be developed).