Exemple #1
0
    def dart_display(self, radius=0.1, coef=0.8, add=False):
        import openalea.plantgl.all as pgl

        sphere = pgl.Sphere(radius,slices=16,stacks=16)
        coal = pgl.Material(ambient=(8,10,13),diffuse=3.,specular=(89,89,89),shininess=0.3)
        purple = pgl.Material(ambient=(72,28,72),diffuse=2.,specular=(89,89,89),shininess=0.3)
        green = pgl.Material(ambient=(0,88,9),diffuse=2.,specular=(89,89,89),shininess=0.3)
        blue = pgl.Material(ambient=(9,0,88),diffuse=2.,specular=(89,89,89),shininess=0.3)

        font = pgl.Font(size=10)

        s = pgl.Scene()

        dart_points = {}

        for dart in self.darts():
            dart_point = self.get_position(dart)
            dart_face_center = self.element_center(dart,2)
            dart_edge_center = self.element_center(dart,1)

            dart_face_point = dart_face_center + coef*(dart_point-dart_face_center)
            dart_face_edge_center = dart_face_center + coef*(dart_edge_center-dart_face_center)

            dart_edge_point = dart_face_edge_center + coef*(dart_face_point-dart_face_edge_center)
            dart_middle_edge_point = dart_face_edge_center + 0.33*(dart_edge_point-dart_face_edge_center)

            dart_points[dart] = [dart_edge_point,dart_middle_edge_point]

            s += pgl.Shape(pgl.Translated(dart_points[dart][0],sphere),coal)
            # s += pgl.Shape(pgl.Translated(np.mean(dart_points[dart],axis=0), pgl.Text(str(dart),fontstyle=font)), coal, id=dart)
            s += pgl.Shape(pgl.Polyline(dart_points[dart],width=2),coal)

        for dart in self.darts():
            alpha_0_points = []
            alpha_0_points += [dart_points[dart][1]]
            alpha_0_points += [dart_points[self.alpha(0,dart)][1]]
            s += pgl.Shape(pgl.Polyline(alpha_0_points,width=5),purple)

            alpha_1_points = []
            alpha_1_points += [0.66*dart_points[dart][0] + 0.33*dart_points[dart][1]]
            alpha_1_points += [0.66*dart_points[self.alpha(1,dart)][0] + 0.33*dart_points[self.alpha(1,dart)][1]]
            s += pgl.Shape(pgl.Polyline(alpha_1_points,width=5),green)

            alpha_2_points = []
            alpha_2_points += [0.33*dart_points[dart][0] + 0.66*dart_points[dart][1]]
            alpha_2_points += [0.33*dart_points[self.alpha(2,dart)][0] + 0.66*dart_points[self.alpha(2,dart)][1]]
            s += pgl.Shape(pgl.Polyline(alpha_2_points,width=5),blue)

        if add : 
            pgl.Viewer.add(s)
        else : 
            pgl.Viewer.display(s)
Exemple #2
0
def view_kdtree(kdtree, bbox=[[-1., 1.], [-1., 1.], [-1., 1.]], radius=0.05):
    import numpy as np

    scene = pgl.Scene()

    sphere = pgl.Sphere(radius, slices=16, stacks=16)

    silver = pgl.Material(ambient=(49, 49, 49),
                          diffuse=3.,
                          specular=(129, 129, 129),
                          shininess=0.4)
    gold = pgl.Material(ambient=(63, 50, 18),
                        diffuse=3.,
                        specular=(160, 141, 93),
                        shininess=0.4)

    if isinstance(kdtree, KDNode):
        dim = kdtree.axis
        plane_bbox = [b for i, b in enumerate(bbox) if i != dim]
        plane_points = []
        plane_points += [
            np.insert([plane_bbox[0][0], plane_bbox[1][0]], dim,
                      kdtree.pivot[dim])
        ]
        plane_points += [
            np.insert([plane_bbox[0][0], plane_bbox[1][1]], dim,
                      kdtree.pivot[dim])
        ]
        plane_points += [
            np.insert([plane_bbox[0][1], plane_bbox[1][1]], dim,
                      kdtree.pivot[dim])
        ]
        plane_points += [
            np.insert([plane_bbox[0][1], plane_bbox[1][0]], dim,
                      kdtree.pivot[dim])
        ]

        left_bbox = np.copy(bbox).astype(float)
        right_bbox = np.copy(bbox).astype(float)
        left_bbox[dim, 1] = kdtree.pivot[dim]
        right_bbox[dim, 0] = kdtree.pivot[dim]

        scene += pgl.Shape(pgl.Translated(kdtree.pivot, sphere), gold)
        scene += view_kdtree(kdtree.left_child, bbox=left_bbox, radius=radius)
        scene += view_kdtree(kdtree.right_child,
                             bbox=right_bbox,
                             radius=radius)
        # scene += pgl.Shape(pgl.Polyline(plane_points+[plane_points[0]],width=2),pgl.Material(ambient=(0,0,0)))
        scene += pgl.Shape(
            pgl.Polyline(plane_points + [plane_points[0]], width=2),
            pgl.Material(ambient=tuple(list(np.insert([0, 0], dim, 255)))))
        scene += pgl.Shape(pgl.FaceSet(plane_points, [range(4)]),
                           pgl.Material(ambient=(0, 0, 0), transparency=0.6))

    else:
        assert (type(kdtree) == list) or (isinstance(kdtree, np.ndarray))
        for p in kdtree:
            scene += pgl.Shape(pgl.Translated(p, sphere), silver)

    return scene
Exemple #3
0
def oneScHullScene(scgroup,pointsbyshape):#aka hullscene
  """cree les cvxHull des groupes de scgroup"""
  sc = pgl.Scene()
  m = color(20,150,20, trans=True)
  for ids in scgroup:
    pts = ptUnion(pointsbyshape,ids)
    sc += pgl.Shape(pgl.fit('convexhull',pgl.Polyline(pts)),m)
  return sc
def plot_spline_surface(ctrl_net, points):
    """
    Parameters
    ==========
      - ctrl_net : the net of control points (list of list)
      - points : a set of evaluated points (list of list)
    """
    scene = pgl.Scene()
    n = len(points)
    m = len(points[0])

    # Compute a mesh (i.e. TriangleSet) for the set of points
    pointList = [pt for rank in points for pt in rank]
    indexList = []

    for i in range(n - 1):
        for j in range(m - 1):
            ii = i * m + j
            i1 = (ii, ii + 1, ii + m)
            i2 = (ii + 1, ii + m + 1, ii + m)
            indexList.append(i1)
            indexList.append(i2)

    surf = pgl.Shape(pgl.TriangleSet(pointList, indexList),
                     appearance=pgl.Material((12, 125, 12)))
    scene.add(surf)

    # plot the control net
    n = len(ctrl_net)
    m = len(ctrl_net[0])
    for pts in ctrl_net:
        crv = pgl.Shape(geometry=pgl.Polyline(pts),
                        appearance=pgl.Material((125, 12, 12)))
        scene.add(crv)
        for pt in pts:
            scene.add(
                pgl.Shape(
                    pgl.Translated(pgl.Vector3(pt), pgl.Sphere(radius=0.1))))

    for i in range(m):
        pts = [ctrl_net[j][i] for j in range(n)]
        crv = pgl.Shape(geometry=pgl.Polyline(pts),
                        appearance=pgl.Material((12, 12, 125)))
        scene.add(crv)

    pgl.Viewer.display(scene)
def plot_spline_crv(ctrls, pts):
    """ 
    Parameters
    ==========
      - ctrl: control points
      - pts : evaluated points on the curve
    """

    scene = pgl.Scene()
    crvContols = pgl.Shape(geometry=pgl.Polyline(ctrls),
                           appearance=pgl.Material((12, 125, 12)))
    scene.add(crvContols)
    crv = pgl.Shape(geometry=pgl.Polyline(pts),
                    appearance=pgl.Material((125, 12, 12)))
    scene.add(crv)

    # To complete: Draw the control points and the line between each ones.

    pgl.Viewer.display(scene)
    def sweep(vid):
        _color = pgl.Material(color(vid))
        if diams and (vid in diams):
            diameters = diams[vid]
            if isinstance(diameters, (list, tuple)):
                _geom = pgl.Extrusion(
                    pgl.Polyline(map(pgl.Vector3, geoms[vid])), section,
                    pgl.Point2Array(zip(diams[vid], diams[vid])))
            else:
                _geom = pgl.Extrusion(
                    pgl.Polyline(map(pgl.Vector3, geoms[vid])), section,
                    pgl.Point2Array([(diameters, diameters)
                                     for i in range(len(geoms))]))

        else:
            _geom = pgl.Extrusion(pgl.Polyline(map(pgl.Vector3, geoms[vid])),
                                  section)

        return pgl.Shape(_geom, _color)
Exemple #7
0
def normal(set):
    pts = set.pointList
    indices = set.indexList
    geoms = []
    for index in indices:
        i1, i2, i3 = index
        p1, p2, p3 = pts[i1], pts[i2], pts[i3]
        pt_bary = (p1 + p2 + p3) / 3.
        n = (p2 - p1) ^ (p3 - p1)
        geoms.append(pgl.TriangleSet([p1, p2, p3], [(0, 1, 2)]))
        geoms.append(pgl.Polyline([pt_bary, pt_bary + n]))
    return geoms
Exemple #8
0
def skeleton(scene, threshold=0.01):
    result = []
    for shape in scene:
        position = pgl.Vector3(0, 0, 0)
        heading = pgl.Vector3(0, 0, 1)
        geometry = shape.geometry
        while isinstance(geometry, pgl.Transformed):
            if isinstance(geometry, pgl.Translated):
                position = geometry.translation
            if isinstance(geometry, pgl.Oriented):
                heading = cross(geometry.primary, geometry.secondary)
            geometry = geometry.geometry
        if isinstance(geometry, pgl.Cylinder) or isinstance(
                geometry, pgl.Cone):
            line = pgl.Polyline(
                [position, position + heading * geometry.height])
            splits = max(1, line.getLength() / threshold)
            for i in linspace(0, 1, splits):
                subline = line.split(i)[0]
                result.append(subline.pointList[1])
        elif isinstance(geometry, pgl.Extrusion):
            result.append(geometry.axis)
    result = pgl.PointSet(result)
    return result
Exemple #9
0
def ptsHull( ptsList, id = 0 ):
  m = color( 20,150,20,trans=True )
  shape = pgl.Shape(pgl.fit('convexhull',pgl.Polyline(ptsList)),m)
  shape.id = id
  return shape