Community
Fusion API and Scripts
Got a new add-in to share? Need something specialized to be scripted? Ask questions or share what you’ve discovered with the community.
cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

Select faces and move

0 REPLIES 0
Reply
Message 1 of 1
meister_mischler
83 Views, 0 Replies

Select faces and move

Hi

I need some support with a script, which hopefully should generate a lasercutable shell of a low poly object.

The start is done with some help of ChatGPT. Sorry I'm not a coder. 😉 

The script generates all faces. I'm stuck a the point, where I want to alter these faces: As a first step the outline of the generated faces should get a bit smaller. At the moment I'm fine with a fixed value like the thickness of the shell (2mm). Later this should be replace with a value, which respects the angle between two faces (see the images below)

Can somebody provide hints how I can select and move the faces a bit inwards?

Very helpful would be, if I somehow can see the list of commands while I do the editing of the model by hand. Is there something like this available? 

Sample Body: https://a360.co/41N9DbY
Expencted Result: https://a360.co/4iY5M1K

 

import adsk.core, adsk.fusion, adsk.cam, traceback
import math

def duplicate_and_extrude_faces():
    try:
        # Die Fusion-App-Instanz abrufen
        app = adsk.core.Application.get()
        ui = app.userInterface

        # Die aktive Design-Umgebung abrufen
        design = app.activeProduct
        if not design:
            ui.messageBox('Kein aktives Design gefunden.')
            return

        # Benutzer auffordern, einen Körper auszuwählen
        ui.messageBox('Bitte einen Körper auswählen, den Sie bearbeiten möchten.')
        selection = ui.selectEntity('Körper auswählen', 'Bodies')

        if not selection:
            ui.messageBox('Es wurde kein Körper ausgewählt.')
            return
        
        body = selection.entity

        if not isinstance(body, adsk.fusion.BRepBody):
            ui.messageBox('Das ausgewählte Objekt ist kein gültiger Körper.')
            return

        # Benutzer nach dem Offset-Wert fragen
        input_box = ui.inputBox('Bitte den Offset-Wert eingeben (negativ für innen):', 'Offset-Wert', '-1.0')
        if input_box is None:  # Wenn der Benutzer "Abbrechen" drückt
            return

        # Falls die Eingabe eine Liste ist, den ersten Eintrag verwenden
        if isinstance(input_box, list):
            input_box = input_box[0]

        try:
            offset_value = float(input_box)
        except ValueError:
            ui.messageBox('Der eingegebene Wert ist keine gültige Zahl.')
            return

        if offset_value >= 0:
            ui.messageBox('Bitte geben Sie einen negativen Wert ein, um nach innen zu extrudieren.')
            return

        # Korrektur für die Einheiten (wenn der Fehler mit Faktor 10 zu tun hat)
        offset_value = offset_value / 10  # Hier teilen wir durch 10, um den Faktor zu korrigieren

        # Körper duplizieren
        body_collection = adsk.core.ObjectCollection.create()
        body_collection.add(body)
        copy_feature = body.parentComponent.features.copyPasteBodies.add(body_collection)
        copied_body = copy_feature.bodies[0]

        # Ursprungskörper umbenennen und ausblenden
        body.name = 'Original'
        body.isVisible = False  # Der Körper wird ausgeblendet

        # Kopie des Körpers löschen
        copied_body.deleteMe()

        # Alle Flächen des Originalkörpers extrudieren
        face_collection = adsk.core.ObjectCollection.create()
        for face in body.faces:
            face_collection.add(face)

        # Flächen extrudieren und benennen
        extrude_features = body.parentComponent.features.extrudeFeatures
        shell_counter = 1
        original_face = None  # Variable zum Speichern der ursprünglichen Fläche
        for face in face_collection:
            # Extrusionseingabe erstellen
            extrude_input = extrude_features.createInput(
                face, adsk.fusion.FeatureOperations.NewBodyFeatureOperation
            )
            extrude_input.setDistanceExtent(False, adsk.core.ValueInput.createByReal(offset_value))
            extrude_feature = extrude_features.add(extrude_input)

            # Den extrudierten Körper benennen
            extrude_feature.bodies[0].name = f'Shell_{shell_counter}'

            # Wenn es Shell_1 ist, speichern wir die ursprüngliche Fläche
            if shell_counter == 1:
                original_face = face
            
            shell_counter += 1

        # Ursprüngliche Fläche selektieren
        if original_face:
            ui.activeSelections.clear()  # Auswahl leeren
            ui.activeSelections.add(original_face)  # Ursprüngliche Fläche zur Auswahl hinzufügen
            ui.messageBox(f'Die ursprüngliche Fläche wurde erfolgreich selektiert.')
        else:
            ui.messageBox('Konnte die ursprüngliche Fläche nicht finden.')

    except Exception as e:
        if ui:
            ui.messageBox(f'Fehler:\n{traceback.format_exc()}')

# Funktion aufrufen
duplicate_and_extrude_faces()

 

 



angle2.jpgangle1.jpg

 

0 REPLIES 0

Can't find what you're looking for? Ask the community or share your knowledge.

Post to forums  

Autodesk Design & Make Report