def add_extrude(self, data): """Add an extrude feature from a sketch""" if (data is None or "sketch_name" not in data or "profile_id" not in data or "distance" not in data or "operation" not in data): return self.runner.return_failure("add_extrude data not specified") sketch = match.sketch_by_name( data["sketch_name"], sketches=self.design_state.reconstruction.component.sketches) if sketch is None: return self.runner.return_failure("extrude sketch not found") profile = match.sketch_profile_by_id(data["profile_id"], [sketch]) if profile is None: return self.runner.return_failure( "extrude sketch profile not found") operation = self.__get_extrude_operation(data["operation"]) if operation is None: return self.runner.return_failure("extrude operation not found") # Make the extrude extrudes = self.design_state.reconstruction.component.features.extrudeFeatures extrude_input = extrudes.createInput(profile, operation) distance = adsk.core.ValueInput.createByReal(data["distance"]) extent_distance = adsk.fusion.DistanceExtentDefinition.create(distance) extrude_input.setOneSideExtent( extent_distance, adsk.fusion.ExtentDirections.PositiveExtentDirection) extrude = extrudes.add(extrude_input) # Serialize the data and return return self.return_extrude_data(extrude)
def add_circle(self, data): """Add a circle to an existing sketch""" if (data is None or "sketch_name" not in data or "pt" not in data or "radius" not in data): return self.runner.return_failure("add_circle data not specified") sketch = match.sketch_by_name( data["sketch_name"], sketches=self.design_state.reconstruction.component.sketches) if sketch is None: return self.runner.return_failure("sketch not found") sketch_uuid = name.get_uuid(sketch) transform = data["transform"] if "transform" in data else None return self.__add_circle(sketch, sketch_uuid, data["pt"], data["radius"], transform)
def add_point(self, data): """Add a point to create a new sequential line in the given sketch""" if (data is None or "sketch_name" not in data or "pt" not in data): return self.runner.return_failure("add_point data not specified") sketch = match.sketch_by_name( data["sketch_name"], sketches=self.design_state.reconstruction.component.sketches) if sketch is None: return self.runner.return_failure("sketch not found") sketch_uuid = name.get_uuid(sketch) # If this is the first point, store it and return if sketch.name not in self.state: self.__init_sketch_state(sketch.name, data["pt"], data["pt"]) profile_data = serialize.sketch_profiles(sketch.profiles) return self.runner.return_success({ "sketch_id": sketch_uuid, "sketch_name": sketch.name, "profiles": profile_data }) state = self.state[sketch.name] transform = data["transform"] if "transform" in data else None return self.__add_line(sketch, sketch_uuid, state["last_pt"], data["pt"], transform)
def close_profile(self, data): """Close the current set of lines to create one or more profiles by joining the first point to the last""" if data is None or "sketch_name" not in data: return self.runner.return_failure( "close_profile data not specified") sketch = match.sketch_by_name( data["sketch_name"], sketches=self.design_state.reconstruction.component.sketches) if sketch is None: return self.runner.return_failure("sketch not found") sketch_uuid = name.get_uuid(sketch) if sketch.name not in self.state: return self.runner.return_failure("sketch state not found") state = self.state[sketch.name] # We need at least 4 points (2 lines with 2 points each) if state["pt_count"] < 4: return self.runner.return_failure("sketch has too few points") if state["last_pt"] is None or state["first_pt"] is None: return self.runner.return_failure("sketch end points invalid") transform = state["transform"] return self.__add_line(sketch, sketch_uuid, state["last_pt"], state["first_pt"], transform)