@iphone.cesbron a écrit :
Tu peux définir un plan de construction avec <Plane Along Path> en sélectionnant ta coube
Voir aussi "Point Along Path" tout en bas du même menu. Le problème de cette méthode est que le point n'existera pas dans l'esquisse (sketch) d'origine car celui-ci a été créé avant.
Pour ma part, je me méfie de ces points calculés avec un précision donnée. Le mieux est quand même de créer les points de façon géométrique en utilisant des lignes de construction et des intersections.
Voici quand même deux scripts Python qui permettent de placer un point sur une ligne dans l'esquisse en cours.
Dans le premier script, le point est ajouté à l'endroit du clic de la souris :
import adsk.core, traceback
def run(context):
ui = None
try:
app = adsk.core.Application.get()
ui = app.userInterface
currentSketch = app.activeEditObject
if currentSketch.objectType != 'adsk::fusion::Sketch':
ui.messageBox('Edit an existing sketch first.')
return
selection = ui.selectEntity('Select a sketch curve', 'SketchCurves,SketchLines,SketchCircles,ConstructionLines')
if selection:
selectedCurve = selection.entity
pointInModelCoordinate = selection.point
pointInSkecthCoordinate = currentSketch.modelToSketchSpace(pointInModelCoordinate)
newPoint = currentSketch.sketchPoints.add(pointInSkecthCoordinate)
if newPoint:
currentSketch.geometricConstraints.addCoincident(newPoint, selectedCurve)
except:
if ui:
ui.messageBox('Failed:\n{}'.format(traceback.format_exc()))
Dans le deuxième, on demande un paramètre compris entre 0 et 1 pour créer le point sur la courbe paramétrée :
import adsk.core, traceback
def run(context):
ui = None
try:
app = adsk.core.Application.get()
ui = app.userInterface
currentSketch = app.activeEditObject
if currentSketch.objectType != 'adsk::fusion::Sketch':
ui.messageBox('Edit an existing sketch first.')
return
p, isCancelled = ui.inputBox('Enter a value between 0.0 and 1.0', 'Value', '0.5')
if isCancelled:
return
p = float(p)
selection = ui.selectEntity('Select a sketch curve', 'SketchCurves,SketchLines,SketchCircles,ConstructionLines')
selectedCurve = selection.entity
returnValue, startParameter, endParameter = selectedCurve.geometry.evaluator.getParameterExtents()
if not returnValue:
return
rng = endParameter-startParameter
parameter = rng * p + startParameter
returnValue, pointInSkecthCoordinate = selectedCurve.geometry.evaluator.getPointAtParameter(parameter)
if not returnValue:
return
newPoint = currentSketch.sketchPoints.add(pointInSkecthCoordinate)
if newPoint:
currentSketch.geometricConstraints.addCoincident(newPoint, selectedCurve)
except:
if ui:
ui.messageBox('Failed:\n{}'.format(traceback.format_exc()))
Pour le deuxième script, dans le cas qui nous intéresse ici, le paramètre sera 0,9147130225 (671.06/733.629) ou 0,085286977 car le sens de la courbe n'est pas pris en compte.
Voir les fichiers ci-joints.
C'est vite fait mais je pense que c'est un bon début.