Пример #1
0
def mirrorShapeKey(shape):

    # Get Symmetry Map
    mesh = shape.Parent3DObject
    symmetry_map = uti.getSymmetryMap(mesh)
    if not symmetry_map:
        gear.log("There is no symmetry map available on this mesh", gear.sev_warning)
        return

    cls = shape.Parent
    shape_tuple = shape.Elements.Array
    symmetry_array = symmetry_map.Elements.Array

    shape_array = [0] * len(shape_tuple[0])*3

    # Process
    for iPntIndex in cls.Elements:

        iSymIndex = int(symmetry_array[0][iPntIndex])

        shape_array[iSymIndex*3+0] = - shape_tuple[0][iPntIndex]
        shape_array[iSymIndex*3+1] = shape_tuple[1][iPntIndex]
        shape_array[iSymIndex*3+2] = shape_tuple[2][iPntIndex]

    duplicate_shape = xsi.StoreShapeKey(cls, shape.Name+"_Mirror", c.siShapeObjectReferenceMode, 1, None, None, c.siShapeContentSecondaryShape, True)
    duplicate_shape.Elements.Array = shape_array
    xsi.ApplyShapeKey(duplicate_shape, None, None, 100, None, None, None, 2)
    xsi.FreezeObj(duplicate_shape)

    return duplicate_shape
Пример #2
0
def gear_SymmetrizePoints_Execute():

    if not xsi.Selection.Count:
        gear.log("No selection", gear.sev_error)
        return

    pntSubComp = xsi.Selection(0)
    if pntSubComp.Type not in ["pntSubComponent"]:
        gear.log("Invalid Selection, need a pntSubComponent", gear.sev_error)
        return

    obj = pntSubComp.SubComponent.Parent3DObject

    # Get Symmetry Map -------------------
    sym_map = uti.getSymmetryMap(obj)
    if not sym_map:
        gear.log("There is no symmetry map on selected object", gear.sev_error)
        return

    cls = obj.ActivePrimitive.Geometry.AddCluster(
        c.siVertexCluster, "gear_SymmetrizePointsOp_cls",
        pntSubComp.SubComponent.ElementArray)

    # Apply Operator ----------------------
    op = XSIFactory.CreateObject("gear_SymmetrizePointsOp")

    op.AddIOPort(obj.ActivePrimitive)
    op.AddInputPort(sym_map)
    op.AddInputPort(cls)

    op.Connect()

    xsi.InspectObj(op)

    return op
Пример #3
0
def mirrorShapeKey(shape):

    # Get Symmetry Map
    mesh = shape.Parent3DObject
    symmetry_map = uti.getSymmetryMap(mesh)
    if not symmetry_map:
        gear.log("There is no symmetry map available on this mesh", gear.sev_warning)
        return

    cls = shape.Parent
    shape_tuple = shape.Elements.Array
    symmetry_array = symmetry_map.Elements.Array

    shape_array = [0] * len(shape_tuple[0])*3

    # Process
    for iPntIndex in cls.Elements:

        iSymIndex = int(symmetry_array[0][iPntIndex])

        shape_array[iSymIndex*3+0] = - shape_tuple[0][iPntIndex]
        shape_array[iSymIndex*3+1] = shape_tuple[1][iPntIndex]
        shape_array[iSymIndex*3+2] = shape_tuple[2][iPntIndex]

    duplicate_shape = xsi.StoreShapeKey(cls, shape.Name+"_Mirror", c.siShapeObjectReferenceMode, 1, None, None, c.siShapeContentSecondaryShape, True)
    duplicate_shape.Elements.Array = shape_array
    xsi.ApplyShapeKey(duplicate_shape, None, None, 100, None, None, None, 2)
    xsi.FreezeObj(duplicate_shape)

    return duplicate_shape
Пример #4
0
def gear_SymWeightMapPoints_Execute():

  if xsi.Selection.Count < 2:
      gear.log("Select some points and a weight map", gear.sev_error)
      return

  pntSubComp = xsi.Selection(0)
  wmap = xsi.Selection(1)

  # Check  if input doesn't match
  if pntSubComp.Type not in ["pntSubComponent"] or wmap.Type not in ["wtmap"]:
      gear.log("Invalid selection", gear.sev_error)
      return

  # Get Symmetry Map
  symMap = uti.getSymmetryMap(wmap.Parent3DObject)
  if not symMap:
      return

  # Get Arrays
  points = pntSubComp.SubComponent.ElementArray
  weights = [w for w in wmap.Elements.Array[0]]
  sym_array = symMap.Elements.Array

  # Process
  for i in points:
      weights[int(sym_array[0][i])] = weights[i]

  wmap.Elements.Array = weights
Пример #5
0
def gear_SymmetrizePoints_Execute():

    if not xsi.Selection.Count:
        gear.log("No selection", gear.sev_error)
        return

    pntSubComp = xsi.Selection(0)
    if pntSubComp.Type not in ["pntSubComponent"]:
        gear.log("Invalid Selection, need a pntSubComponent", gear.sev_error)
        return

    obj = pntSubComp.SubComponent.Parent3DObject

    # Get Symmetry Map -------------------
    sym_map = uti.getSymmetryMap(obj)
    if not sym_map:
        gear.log("There is no symmetry map on selected object", gear.sev_error)
        return

    cls = obj.ActivePrimitive.Geometry.AddCluster(c.siVertexCluster, "gear_SymmetrizePointsOp_cls", pntSubComp.SubComponent.ElementArray)

    # Apply Operator ----------------------
    op = XSIFactory.CreateObject("gear_SymmetrizePointsOp")

    op.AddIOPort(obj.ActivePrimitive)
    op.AddInputPort(sym_map)
    op.AddInputPort(cls)

    op.Connect()

    xsi.InspectObj(op)

    return op
Пример #6
0
def symmetrizeShapePoints(shape, points):

    # Get Symmetry Map
    mesh = shape.Parent3DObject
    symmetry_map = uti.getSymmetryMap(mesh)
    if not symmetry_map:
        return

    shape_tuple = shape.Elements.Array
    shape_array = [shape_tuple[j][i] for i in range(len(shape_tuple[0])) for j in range(len(shape_tuple)) ]
    symmetry_array = symmetry_map.Elements.Array

    # Process
    for i in points:
        j = int(symmetry_array[0][i])
        shape_array[j*3+0] = - shape_tuple[0][i]
        shape_array[j*3+1] = shape_tuple[1][i]
        shape_array[j*3+2] = shape_tuple[2][i]

    shape.Elements.Array = shape_array
Пример #7
0
def symmetrizeShapePoints(shape, points):

    # Get Symmetry Map
    mesh = shape.Parent3DObject
    symmetry_map = uti.getSymmetryMap(mesh)
    if not symmetry_map:
        return

    shape_tuple = shape.Elements.Array
    shape_array = [shape_tuple[j][i] for i in range(len(shape_tuple[0])) for j in range(len(shape_tuple)) ]
    symmetry_array = symmetry_map.Elements.Array

    # Process
    for i in points:
        j = int(symmetry_array[0][i])
        shape_array[j*3+0] = - shape_tuple[0][i]
        shape_array[j*3+1] = shape_tuple[1][i]
        shape_array[j*3+2] = shape_tuple[2][i]

    shape.Elements.Array = shape_array
Пример #8
0
def getSymSubComponent(indexes, subcomponentType, mesh):

    symmetryMap = uti.getSymmetryMap(mesh)
    if not symmetryMap:
        return False

    symmetryArray = symmetryMap.Elements.Array[0]
    symIndexes = []

    geometry = dynDispatch(mesh.ActivePrimitive.Geometry)

    # Point Cluster ---------------------------
    if subcomponentType == "pntSubComponent":
        for pointIndex in indexes:
            symIndexes.append(symmetryArray[pointIndex])

    # Polygon Cluster -------------------------
    elif subcomponentType == "polySubComponent":

        for polyIndex in indexes:

            # Get Symmetrical Polygon Points
            symPoints = []
            for vertex in geometry.Polygons(polyIndex).Vertices:
                symPoints.append(symmetryArray[vertex.Index])

            # Get symmetrical Polygons (Get too much polygons, we filter them right after)
            aSymPolygons = []
            for pointIndex in symPoints:
                for polygon in geometry.Vertices(pointIndex).NeighborPolygons(
                        1):
                    if polygon.Index not in aSymPolygons:
                        aSymPolygons.append(polygon.Index)

            # Find the good one (the one which all points belongs to the symmetrical array)
            for polyIndex in aSymPolygons:
                polygon = geometry.Polygons(polyIndex)

                b = True
                for vertex in polygon.Vertices:
                    if vertex.Index not in symPoints:
                        b = False
                        break

                if b:
                    symIndexes.append(polyIndex)

    # Edge Cluster ----------------------------
    elif subcomponentType == "edgeSubComponent":

        for edgeIndex in indexes:

            # Get Edge Points
            symPoints = []
            for vertex in geometry.Edges(edgeIndex).Vertices:
                symPoints.append(symmetryArray[vertex.Index])

            # Get symmetrical Edges (Get too much edges, we filter them right after)
            aSymEdges = []
            for pointIndex in symPoints:
                for edge in geometry.Vertices(pointIndex).NeighborEdges(1):
                    if edge.Index not in aSymEdges:
                        aSymEdges.append(edge.Index)

            # Find the good one (the one which all points belongs to the symmetrical array)
            for edgeIndex in aSymEdges:
                edge = geometry.Edges(edgeIndex)

                b = True
                for vertex in edge.Vertices:
                    if vertex.Index not in symPoints:
                        b = False
                        break

                if b:
                    symIndexes.append(edgeIndex)

    return symIndexes
Пример #9
0
def getSymSubComponent(indexes, subcomponentType, mesh):

     symmetryMap = uti.getSymmetryMap(mesh)
     if not symmetryMap:
          return False

     symmetryArray = symmetryMap.Elements.Array[0]
     symIndexes = []

     geometry = dynDispatch(mesh.ActivePrimitive.Geometry)

     # Point Cluster ---------------------------
     if subcomponentType == "pntSubComponent":
          for pointIndex in indexes:
                symIndexes.append(symmetryArray[pointIndex])

     # Polygon Cluster -------------------------
     elif subcomponentType == "polySubComponent":

          for polyIndex in indexes:

                # Get Symmetrical Polygon Points
                symPoints = []
                for vertex in geometry.Polygons(polyIndex).Vertices:
                     symPoints.append(symmetryArray[vertex.Index])

                # Get symmetrical Polygons (Get too much polygons, we filter them right after)
                aSymPolygons = []
                for pointIndex in symPoints:
                     for polygon in geometry.Vertices(pointIndex).NeighborPolygons(1):
                          if polygon.Index not in aSymPolygons:
                                aSymPolygons.append(polygon.Index)

                # Find the good one (the one which all points belongs to the symmetrical array)
                for polyIndex in aSymPolygons:
                     polygon = geometry.Polygons(polyIndex)

                     b = True
                     for vertex in polygon.Vertices:
                          if vertex.Index not in symPoints:
                                b = False
                                break

                     if b:
                          symIndexes.append(polyIndex)

     # Edge Cluster ----------------------------
     elif subcomponentType == "edgeSubComponent":

          for edgeIndex in indexes:

                # Get Edge Points
                symPoints = []
                for vertex in geometry.Edges(edgeIndex).Vertices:
                     symPoints.append(symmetryArray[vertex.Index])

                # Get symmetrical Edges (Get too much edges, we filter them right after)
                aSymEdges = []
                for pointIndex in symPoints:
                     for edge in geometry.Vertices(pointIndex).NeighborEdges(1):
                          if edge.Index not in aSymEdges:
                                aSymEdges.append(edge.Index)

                # Find the good one (the one which all points belongs to the symmetrical array)
                for edgeIndex in aSymEdges:
                     edge = geometry.Edges(edgeIndex)

                     b = True
                     for vertex in edge.Vertices:
                          if vertex.Index not in symPoints:
                                b = False
                                break

                     if b:
                          symIndexes.append(edgeIndex)

     return symIndexes