def derivedExecute(self,obj): self.assureProperties(obj) # cache stuff objectShape = screen(obj.Object).Shape placements = lattice2BaseFeature.getPlacementsList(screen(obj.PlacementsTo), obj) outputIsLattice = lattice2BaseFeature.isObjectLattice(screen(obj.Object)) # Pre-collect base placement list, if base is a lattice. For speed. if outputIsLattice: objectPlms = lattice2BaseFeature.getPlacementsList(screen(obj.Object),obj) placements = DereferenceArray(obj, placements, screen(obj.PlacementsFrom), obj.Referencing) # initialize output containers and loop variables outputShapes = [] #output list of shapes outputPlms = [] #list of placements copy_method_index = ShapeCopy.getCopyTypeIndex(obj.Copying) # the essence for plm in placements: if outputIsLattice: for objectPlm in objectPlms: outputPlms.append(plm.multiply(objectPlm)) else: outputShape = ShapeCopy.copyShape(objectShape, copy_method_index, plm) #outputShape.Placement = plm.multiply(outputShape.Placement) # now handled by copyShape outputShapes.append(outputShape) if outputIsLattice: return outputPlms else: # Output shape or compound (complex logic involving OutputCompounding property) #first, autosettle the OutputCompounding. if obj.OutputCompounding == "(autosettle)": if hasattr(screen(obj.PlacementsTo),"ExposePlacement") and screen(obj.PlacementsTo).ExposePlacement == False: obj.OutputCompounding = "always" else: obj.OutputCompounding = "only if many" #now, set the result shape if len(outputShapes) == 1 and obj.OutputCompounding == "only if many": sh = outputShapes[0] sh = ShapeCopy.transformCopy(sh) obj.Shape = sh else: obj.Shape = Part.makeCompound(outputShapes) return None
def derivedExecute(self,obj): self.assureProperties(obj) # cache stuff objectShape = obj.Object.Shape placements = lattice2BaseFeature.getPlacementsList(obj.PlacementsTo, obj) outputIsLattice = lattice2BaseFeature.isObjectLattice(obj.Object) # Pre-collect base placement list, if base is a lattice. For speed. if outputIsLattice: objectPlms = lattice2BaseFeature.getPlacementsList(obj.Object,obj) placements = DereferenceArray(obj, placements, obj.PlacementsFrom, obj.Referencing) # initialize output containers and loop variables outputShapes = [] #output list of shapes outputPlms = [] #list of placements copy_method_index = ShapeCopy.getCopyTypeIndex(obj.Copying) # the essence for plm in placements: if outputIsLattice: for objectPlm in objectPlms: outputPlms.append(plm.multiply(objectPlm)) else: outputShape = ShapeCopy.copyShape(objectShape, copy_method_index, plm) #outputShape.Placement = plm.multiply(outputShape.Placement) # now handled by copyShape outputShapes.append(outputShape) if outputIsLattice: return outputPlms else: # Output shape or compound (complex logic involving OutputCompounding property) #first, autosettle the OutputCompounding. if obj.OutputCompounding == "(autosettle)": if hasattr(obj.PlacementsTo,"ExposePlacement") and obj.PlacementsTo.ExposePlacement == False: obj.OutputCompounding = "always" else: obj.OutputCompounding = "only if many" #now, set the result shape if len(outputShapes) == 1 and obj.OutputCompounding == "only if many": sh = outputShapes[0] sh = ShapeCopy.transformCopy(sh) obj.Shape = sh else: obj.Shape = Part.makeCompound(outputShapes) return None
def derivedExecute(self,obj): self.initNewProperties(obj) outputIsLattice = lattice2BaseFeature.isObjectLattice(screen(obj.Object)) if not lattice2BaseFeature.isObjectLattice(screen(obj.Object)): if obj.ObjectTraversal == "Direct children only": objectShapes = screen(obj.Object).Shape.childShapes() if screen(obj.Object).Shape.ShapeType != "Compound": lattice2Executer.warning(obj,"shape supplied as object is not a compound. It is going to be downgraded one level down (e.g, if it is a wire, the edges are going to be enumerated as children).") elif obj.ObjectTraversal == "Recursive": objectShapes = LCE.AllLeaves(screen(obj.Object).Shape) else: raise ValueError("Traversal mode not implemented: "+obj.ObjectTraversal) else: objectPlms = lattice2BaseFeature.getPlacementsList(screen(obj.Object), obj) placements = lattice2BaseFeature.getPlacementsList(screen(obj.PlacementsTo), obj) # Precompute referencing placements = DereferenceArray(obj, placements, screen(obj.PlacementsFrom), obj.Referencing) # initialize output containers and loop variables outputShapes = [] #output list of shapes outputPlms = [] #list of placements iChild = 0 numChildren = len(objectPlms) if outputIsLattice else len(objectShapes) copy_method_index = ShapeCopy.getCopyTypeIndex(obj.Copying) # the essence for iPlm in range(len(placements)): if iChild == numChildren: if obj.LoopObjectSequence: iChild = 0 else: break plm = placements[iPlm] if outputIsLattice: objectPlm = objectPlms[iChild] outputPlms.append(plm.multiply(objectPlm)) else: outputShape = ShapeCopy.copyShape(objectShapes[iChild], copy_method_index, plm) # outputShape.Placement = plm.multiply(outputShape.Placement) #now done by shape copy routine outputShapes.append(outputShape) iChild += 1 if len(placements) > numChildren and not obj.LoopObjectSequence: lattice2Executer.warning(obj,"There are fewer children to populate, than placements to be populated (%1, %2). Extra placements will be dropped.".replace("%1", str(numChildren)).replace("%2",str(len(placements)))) if len(placements) < numChildren: lattice2Executer.warning(obj,"There are more children to populate, than placements to be populated (%1, %2). Extra children will be dropped.".replace("%1", str(numChildren)).replace("%2",str(len(placements)))) if outputIsLattice: return outputPlms else: obj.Shape = Part.makeCompound(outputShapes) return None
def derivedExecute(self,obj): self.initNewProperties(obj) outputIsLattice = lattice2BaseFeature.isObjectLattice(obj.Object) if not lattice2BaseFeature.isObjectLattice(obj.Object): if obj.ObjectTraversal == "Direct children only": objectShapes = obj.Object.Shape.childShapes() if obj.Object.Shape.ShapeType != "Compound": lattice2Executer.warning(obj,"shape supplied as object is not a compound. It is going to be downgraded one level down (e.g, if it is a wire, the edges are going to be enumerated as children).") elif obj.ObjectTraversal == "Recursive": objectShapes = LCE.AllLeaves(obj.Object.Shape) else: raise ValueError("Traversal mode not implemented: "+obj.ObjectTraversal) else: objectPlms = lattice2BaseFeature.getPlacementsList(obj.Object, obj) placements = lattice2BaseFeature.getPlacementsList(obj.PlacementsTo, obj) # Precompute referencing placements = DereferenceArray(obj, placements, obj.PlacementsFrom, obj.Referencing) # initialize output containers and loop variables outputShapes = [] #output list of shapes outputPlms = [] #list of placements iChild = 0 numChildren = len(objectPlms) if outputIsLattice else len(objectShapes) copy_method_index = ShapeCopy.getCopyTypeIndex(obj.Copying) # the essence for iPlm in range(len(placements)): if iChild == numChildren: if obj.LoopObjectSequence: iChild = 0 else: break plm = placements[iPlm] if outputIsLattice: objectPlm = objectPlms[iChild] outputPlms.append(plm.multiply(objectPlm)) else: outputShape = ShapeCopy.copyShape(objectShapes[iChild], copy_method_index, plm) # outputShape.Placement = plm.multiply(outputShape.Placement) #now done by shape copy routine outputShapes.append(outputShape) iChild += 1 if len(placements) > numChildren and not obj.LoopObjectSequence: lattice2Executer.warning(obj,"There are fewer children to populate, than placements to be populated (%1, %2). Extra placements will be dropped.".replace("%1", str(numChildren)).replace("%2",str(len(placements)))) if len(placements) < numChildren: lattice2Executer.warning(obj,"There are more children to populate, than placements to be populated (%1, %2). Extra children will be dropped.".replace("%1", str(numChildren)).replace("%2",str(len(placements)))) if outputIsLattice: return outputPlms else: obj.Shape = Part.makeCompound(outputShapes) return None