Skip to content

Commit

Permalink
disabled detection mode in Parametric - right angles only
Browse files Browse the repository at this point in the history
  • Loading branch information
pludikar committed Sep 16, 2023
1 parent 1b1a357 commit 7f832a9
Show file tree
Hide file tree
Showing 5 changed files with 35 additions and 9 deletions.
2 changes: 1 addition & 1 deletion .env
Original file line number Diff line number Diff line change
@@ -1 +1 @@
PYTHONPATH=C:/Users/Dad/AppData/Local/Autodesk/webdeploy/pre-production/667886b5bd1fbed11f1df54fcca6c9f012ec1514/Api/Python/packages
PYTHONPATH=C:/Users/Dad/AppData/Local/Autodesk/webdeploy/pre-production/31689d2b23113e4bc5f3fe869b3e5bb8c191c9b8/Api/Python/packages
2 changes: 1 addition & 1 deletion .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"python.autoComplete.extraPaths": ["C:/Users/Dad/AppData/Roaming/Autodesk/Autodesk Fusion 360/API/Python/defs", "C:/Users/User/AppData/Roaming/Autodesk/Autodesk Fusion 360/API/Python/defs"],
"python.analysis.extraPaths": ["C:/Users/Dad/AppData/Roaming/Autodesk/Autodesk Fusion 360/API/Python/defs", "C:/Users/User/AppData/Roaming/Autodesk/Autodesk Fusion 360/API/Python/defs", "./py_packages"],
"python.defaultInterpreterPath": "C:/Users/Dad/AppData/Local/Autodesk/webdeploy/pre-production/667886b5bd1fbed11f1df54fcca6c9f012ec1514/Python/python.exe"
"python.defaultInterpreterPath": "C:/Users/Dad/AppData/Local/Autodesk/webdeploy/pre-production/31689d2b23113e4bc5f3fe869b3e5bb8c191c9b8/Python/python.exe"
}
9 changes: 6 additions & 3 deletions DbClasses.py
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ def __init__(self, parent, face:adsk.fusion.BRepFace, params, commandInputsEdgeS
try:
if edge.geometry.curveType != adsk.core.Curve3DTypes.Line3DCurveType:
continue
vector:adsk.core.Vector3D = dbUtils.getEdgeVector(edge, refFace = face) #edge.startVertex.geometry.vectorTo(edge.endVertex.geometry)
vector:adsk.core.Vector3D = dbUtils.getEdgeVector(edge, refFace = face)
vector.normalize()
if not vector.isParallelTo(faceNormal):
continue
Expand All @@ -76,13 +76,16 @@ def __init__(self, parent, face:adsk.fusion.BRepFace, params, commandInputsEdgeS
continue

angle = dbUtils.getAngleBetweenFaces(edge)*180/pi
if (abs(angle - 90) > 0.001 ) and not(params.acuteAngle or params.obtuseAngle) \
if (abs(angle - 90) > 0.001 ) and not(params.acuteAngle or params.obtuseAngle ) \
or (not (params.minAngleLimit < angle <= 90) and params.acuteAngle and not params.obtuseAngle) \
or (not(90 <= angle < params.maxAngleLimit) and not params.acuteAngle and params.obtuseAngle) \
or (not (params.minAngleLimit < angle < params.maxAngleLimit) and params.acuteAngle and params.obtuseAngle):
continue

edgeId = hash(edge.entityToken) #str(edge.tempId)+':'+ activeEdgeName
if ((abs(angle-90) > 0.001) and params.parametric):
continue

edgeId = hash(edge.entityToken)
parent.selectedEdges[edgeId] = self._associatedEdgesDict[edgeId] = DbEdge(edge = edge, parentFace = self)
processedEdges.append(edge)
parent.addingEdges = True
Expand Down
17 changes: 13 additions & 4 deletions Dogbone.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@

import time
from . import dbutils as dbUtils
from .decorators import eventHandler
from .decorators import eventHandler, parseDecorator
from math import sqrt as sqrt
from .DbClasses import DbFace, DbEdge
from .DbData import DbParams
Expand Down Expand Up @@ -335,6 +335,8 @@ def onCreate(self, args:adsk.core.CommandCreatedEventArgs):
angleDetectionGroupInputs:adsk.core.GroupCommandInput = inputs.addGroupCommandInput('angleDetectionGroup', 'Detection Mode')
angleDetectionGroupInputs.isExpanded = self.param.angleDetectionGroup

angleDetectionGroupInputs.isVisible = not self.param.parametric #disables angle selection if in parametric mode

enableAcuteAngleInput:adsk.core.BoolValueCommandInput = angleDetectionGroupInputs.children.addBoolValueInput('acuteAngle','Acute Angle', True, '', self.param.acuteAngle)
enableAcuteAngleInput.tooltip = "Enables detection of corner angles less than 90"
minAngleSliderInput:adsk.core.FloatSliderCommandInput = angleDetectionGroupInputs.children.addFloatSliderCommandInput('minSlider', 'Min Limit', '', 10.0, 89.0)
Expand Down Expand Up @@ -391,6 +393,7 @@ def onExecutePreview(self, args:adsk.core.CommandEventArgs):
# also where eligible edges are determined
#==============================================================================
@eventHandler(handler_cls = adsk.core.InputChangedEventHandler)
@parseDecorator
def onChange(self, args:adsk.core.InputChangedEventArgs):

changedInput:adsk.core.CommandInput = args.input
Expand All @@ -406,6 +409,10 @@ def onChange(self, args:adsk.core.InputChangedEventArgs):
self.param.toolDiaStr = changedInput.expression
return

if changedInput.id == 'modeRow':
changedInput.parentCommand.commandInputs.itemById('angleDetectionGroup').isVisible = changedInput.selectedItem.name == 'Static'
self.param.parametric = changedInput.selectedItem.name == 'Parametric' #


if changedInput.id == 'acuteAngle':
changedInput.commandInputs.itemById('minSlider').isVisible = changedInput.value
Expand All @@ -421,10 +428,12 @@ def onChange(self, args:adsk.core.InputChangedEventArgs):
if changedInput.id == 'maxSlider':
self.param.maxAngleLimit = changedInput.commandInputs.itemById('maxSlider').valueOne

#
if changedInput.id == 'acuteAngle' \
or changedInput.id == 'obtuseAngle' \
or changedInput.id == 'minSlider' \
or changedInput.id == 'maxSlider' :
or changedInput.id == 'obtuseAngle' \
or changedInput.id == 'minSlider' \
or changedInput.id == 'maxSlider'\
or changedInput.id == 'modeRow': # refresh edges after specific input changes
edgeSelectCommand = changedInput.parentCommand.commandInputs.itemById('edgeSelect')
if not edgeSelectCommand.isVisible:
return
Expand Down
14 changes: 14 additions & 0 deletions decorators.py
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,20 @@ def __str__(self):
return handlerWrapper
return decoratorWrapper

# Decorator to trigger parser
def parseDecorator(func):
@wraps(func) #spoofs wrapped method so that __name__, __doc__ (ie docstring) etc. behaves like it came from the method that is being wrapped.
def wrapper( *_args, **_kwargs):
'''
'''
rtn = func(*_args, **_kwargs)
cmdInputs = _args[1].inputs.command.commandInputs
_args[0].parseInputs(cmdInputs) #calls self.parseInputs - needs to be better
logger.debug(f'notify method created: {func.__name__}')
return rtn
return wrapper


class Button(adsk.core.ButtonControlDefinition):
def __init__():
super().__init__()
Expand Down

0 comments on commit 7f832a9

Please sign in to comment.