Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
self.logger.debug('extentToEntity - {}'.format(extentToEntity.isValid))
if not extentToEntity.isValid:
self.logger.debug('To face invalid')
try:
(edge1, edge2) = dbUtils.getCornerEdgesAtFace(face, edge)
except:
self.logger.exception('Failed at findAdjecentFaceEdges')
dbUtils.messageBox('Failed at findAdjecentFaceEdges:\n{}'.format(traceback.format_exc()))
centrePoint = makeNative(startVertex).geometry.copy()
selectedEdgeFaces = makeNative(selectedEdge.edge).faces
dirVect = adsk.core.Vector3D.cast(dbUtils.getFaceNormal(selectedEdgeFaces[0]).copy())
dirVect.add(dbUtils.getFaceNormal(selectedEdgeFaces[1]))
dirVect.normalize()
dirVect.scaleBy(centreDistance) #ideally radius should be linked to parameters,
if self.dbType == 'Mortise Dogbone':
direction0 = dbUtils.correctedEdgeVector(edge1,startVertex)
direction1 = dbUtils.correctedEdgeVector(edge2,startVertex)
if self.longside:
if (edge1.length > edge2.length):
dirVect = direction0
edge1OffsetByStr = adsk.core.ValueInput.createByReal(0)
edge2OffsetByStr = offsetByStr
else:
dirVect = direction1
edge2OffsetByStr = adsk.core.ValueInput.createByReal(0)
edge1OffsetByStr = offsetByStr
if activeOccurrenceName not in self.selectedOccurrences: #check if mouse is over a face that is not already selected
eventArgs.isSelectable = False
return
try:
faces = self.selectedOccurrences[activeOccurrenceName]
for face in faces:
if face.selected:
primaryFace = face
break
else:
eventArgs.isSelectable = True
return
except KeyError:
return
primaryFaceNormal = dbUtils.getFaceNormal(primaryFace.face)
if primaryFaceNormal.isParallelTo(dbUtils.getFaceNormal(eventArgs.selection.entity)):
eventArgs.isSelectable = True
return
eventArgs.isSelectable = False
return
# end selecting faces
else:
#==============================================================================
# processing edges associated with face - edges selection has focus
#==============================================================================
if self.addingEdges:
return
selected = eventArgs.selection
currentEdge = adsk.fusion.BRepEdge.cast(selected.entity)
activeOccurrence = eventArgs.selection.entity.assemblyContext
if self.dbType == 'Mortise Dogbone':
(edge0, edge1) = dbUtils.getCornerEdgesAtFace(face, edge)
direction0 = dbUtils.correctedEdgeVector(edge0,startVertex)
direction1 = dbUtils.correctedEdgeVector(edge1,startVertex)
if self.longside:
if (edge0.length > edge1.length):
dirVect = direction0
else:
dirVect = direction1
else:
if (edge0.length > edge1.length):
dirVect = direction1
else:
dirVect = direction0
else:
dirVect = adsk.core.Vector3D.cast(dbUtils.getFaceNormal(makeNative(selectedEdgeFaces[0])).copy())
dirVect.add(dbUtils.getFaceNormal(makeNative(selectedEdgeFaces[1])))
dirVect.normalize()
dirVect.scaleBy(centreDistance) #ideally radius should be linked to parameters,
# but hole start point still is the right quadrant
centrePoint.translateBy(dirVect)
if self.fromTop:
centrePoint.translateBy(transformVector)
centrePoint = sketch.modelToSketchSpace(centrePoint)
sketchPoint = sketch.sketchPoints.add(centrePoint) #as the centre is placed on midline endPoint, it automatically gets constrained
length = (selectedEdge.edge.length + transformVector.length) if self.fromTop else makeNative(selectedEdge.edge).length
holeList.append([length, sketchPoint])
self.logger.info('hole added to list - length {}, {}'.format(length, sketchPoint.geometry.asArray()))
depthList = set(map(lambda x: x[0], holeList)) #create a unique set of depths - using this in the filter will automatically group depths
extentToEntity = makeNative(extentToEntity)
self.logger.debug('extentToEntity - {}'.format(extentToEntity.isValid))
if not extentToEntity.isValid:
self.logger.debug('To face invalid')
try:
(edge1, edge2) = dbUtils.getCornerEdgesAtFace(face, edge)
except:
self.logger.exception('Failed at findAdjecentFaceEdges')
dbUtils.messageBox('Failed at findAdjecentFaceEdges:\n{}'.format(traceback.format_exc()))
centrePoint = makeNative(startVertex).geometry.copy()
selectedEdgeFaces = makeNative(selectedEdge.edge).faces
dirVect = adsk.core.Vector3D.cast(dbUtils.getFaceNormal(selectedEdgeFaces[0]).copy())
dirVect.add(dbUtils.getFaceNormal(selectedEdgeFaces[1]))
dirVect.normalize()
dirVect.scaleBy(centreDistance) #ideally radius should be linked to parameters,
if self.dbType == 'Mortise Dogbone':
direction0 = dbUtils.correctedEdgeVector(edge1,startVertex)
direction1 = dbUtils.correctedEdgeVector(edge2,startVertex)
if self.longside:
if (edge1.length > edge2.length):
dirVect = direction0
edge1OffsetByStr = adsk.core.ValueInput.createByReal(0)
edge2OffsetByStr = offsetByStr
else:
dirVect = direction1
edge2OffsetByStr = adsk.core.ValueInput.createByReal(0)
eventArgs.isSelectable = False
return
try:
faces = self.selectedOccurrences[activeOccurrenceName]
for face in faces:
if face.selected:
primaryFace = face
break
else:
eventArgs.isSelectable = True
return
except KeyError:
return
primaryFaceNormal = dbUtils.getFaceNormal(primaryFace.face)
if primaryFaceNormal.isParallelTo(dbUtils.getFaceNormal(eventArgs.selection.entity)):
eventArgs.isSelectable = True
return
eventArgs.isSelectable = False
return
# end selecting faces
else:
#==============================================================================
# processing edges associated with face - edges selection has focus
#==============================================================================
if self.addingEdges:
return
selected = eventArgs.selection
currentEdge = adsk.fusion.BRepEdge.cast(selected.entity)
activeOccurrence = eventArgs.selection.entity.assemblyContext
if eventArgs.selection.entity.assemblyContext:
edge2OffsetByStr = offsetByStr
else:
dirVect = direction1
edge2OffsetByStr = adsk.core.ValueInput.createByReal(0)
edge1OffsetByStr = offsetByStr
else:
if (edge1.length > edge2.length):
dirVect = direction1
edge2OffsetByStr = adsk.core.ValueInput.createByReal(0)
edge1OffsetByStr = offsetByStr
else:
dirVect = direction0
edge1OffsetByStr = adsk.core.ValueInput.createByReal(0)
edge2OffsetByStr = offsetByStr
else:
dirVect = adsk.core.Vector3D.cast(dbUtils.getFaceNormal(makeNative(selectedEdgeFaces[0])).copy())
dirVect.add(dbUtils.getFaceNormal(makeNative(selectedEdgeFaces[1])))
edge1OffsetByStr = offsetByStr
edge2OffsetByStr = offsetByStr
centrePoint.translateBy(dirVect)
self.logger.debug('centrePoint = ({},{},{})'.format(centrePoint.x, centrePoint.y, centrePoint.z))
if self.fromTop:
centrePoint.translateBy(transformVector)
self.logger.debug('centrePoint at topFace = {}'.format(centrePoint.asArray()))
holePlane = topFace if self.fromTop else face
if not holePlane.isValid:
holePlane = reValidateFace(comp, topFaceRefPoint)
else:
holePlane = makeNative(face)
else:
dirVect = direction1
edge2OffsetByStr = adsk.core.ValueInput.createByReal(0)
edge1OffsetByStr = offsetByStr
else:
if (edge1.length > edge2.length):
dirVect = direction1
edge2OffsetByStr = adsk.core.ValueInput.createByReal(0)
edge1OffsetByStr = offsetByStr
else:
dirVect = direction0
edge1OffsetByStr = adsk.core.ValueInput.createByReal(0)
edge2OffsetByStr = offsetByStr
else:
dirVect = adsk.core.Vector3D.cast(dbUtils.getFaceNormal(makeNative(selectedEdgeFaces[0])).copy())
dirVect.add(dbUtils.getFaceNormal(makeNative(selectedEdgeFaces[1])))
edge1OffsetByStr = offsetByStr
edge2OffsetByStr = offsetByStr
centrePoint.translateBy(dirVect)
self.logger.debug('centrePoint = ({},{},{})'.format(centrePoint.x, centrePoint.y, centrePoint.z))
if self.fromTop:
centrePoint.translateBy(transformVector)
self.logger.debug('centrePoint at topFace = {}'.format(centrePoint.asArray()))
holePlane = topFace if self.fromTop else face
if not holePlane.isValid:
holePlane = reValidateFace(comp, topFaceRefPoint)
else:
holePlane = makeNative(face)
holes = comp.features.holeFeatures
(edge0, edge1) = dbUtils.getCornerEdgesAtFace(face, edge)
direction0 = dbUtils.correctedEdgeVector(edge0,startVertex)
direction1 = dbUtils.correctedEdgeVector(edge1,startVertex)
if self.longside:
if (edge0.length > edge1.length):
dirVect = direction0
else:
dirVect = direction1
else:
if (edge0.length > edge1.length):
dirVect = direction1
else:
dirVect = direction0
else:
dirVect = adsk.core.Vector3D.cast(dbUtils.getFaceNormal(makeNative(selectedEdgeFaces[0])).copy())
dirVect.add(dbUtils.getFaceNormal(makeNative(selectedEdgeFaces[1])))
dirVect.normalize()
dirVect.scaleBy(centreDistance) #ideally radius should be linked to parameters,
# but hole start point still is the right quadrant
centrePoint.translateBy(dirVect)
if self.fromTop:
centrePoint.translateBy(transformVector)
centrePoint = sketch.modelToSketchSpace(centrePoint)
sketchPoint = sketch.sketchPoints.add(centrePoint) #as the centre is placed on midline endPoint, it automatically gets constrained
length = (selectedEdge.edge.length + transformVector.length) if self.fromTop else makeNative(selectedEdge.edge).length
holeList.append([length, sketchPoint])
self.logger.info('hole added to list - length {}, {}'.format(length, sketchPoint.geometry.asArray()))
depthList = set(map(lambda x: x[0], holeList)) #create a unique set of depths - using this in the filter will automatically group depths