Use Blender's angle snap setting in wall.py and profile.py

Replace hardcoded 5-degree angle snapping with Blender's
snap_angle_increment setting in create_wall_from_2_points()
and create_profile_from_2_points().

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
José Aliste
2026-02-10 18:20:18 -03:00
committed by Bruno Perdigão
parent 067e04b564
commit 740fcf7768
3 changed files with 10 additions and 6 deletions
@@ -17,7 +17,7 @@
# along with Bonsai. If not, see <http://www.gnu.org/licenses/>. # along with Bonsai. If not, see <http://www.gnu.org/licenses/>.
import copy import copy
from math import atan2, degrees, pi from math import atan2, degrees, pi, radians
from typing import Any, Literal, Optional, Union from typing import Any, Literal, Optional, Union
import bmesh import bmesh
@@ -195,8 +195,8 @@ class DumbProfileGenerator:
if should_round: if should_round:
# Round to nearest 50mm (yes, metric for now) # Round to nearest 50mm (yes, metric for now)
self.length = 0.05 * round(length / 0.05) self.length = 0.05 * round(length / 0.05)
# Round to nearest 5 degrees angle_snap = tool.Snap.get_angle_snap_value(bpy.context)
nearest_degree = (pi / 180) * 5 nearest_degree = radians(angle_snap)
self.rotation = nearest_degree * round(self.rotation / nearest_degree) self.rotation = nearest_degree * round(self.rotation / nearest_degree)
self.location = coords[0] self.location = coords[0]
data["obj"] = self.create_profile() data["obj"] = self.create_profile()
+2 -2
View File
@@ -916,8 +916,8 @@ class DumbWallGenerator:
if should_round: if should_round:
# Round to nearest 50mm (yes, metric for now) # Round to nearest 50mm (yes, metric for now)
self.length = 0.05 * round(length / 0.05) self.length = 0.05 * round(length / 0.05)
# Round to nearest 5 degrees angle_snap = tool.Snap.get_angle_snap_value(bpy.context)
nearest_degree = (math.pi / 180) * 5 nearest_degree = math.radians(angle_snap)
self.rotation = nearest_degree * round(self.rotation / nearest_degree) self.rotation = nearest_degree * round(self.rotation / nearest_degree)
self.location = coords[0] self.location = coords[0]
data["obj"] = self.create_wall() data["obj"] = self.create_wall()
+5 -1
View File
@@ -118,10 +118,14 @@ class Snap(bonsai.core.tool.Snap):
def get_angle_snap_value(cls, context: bpy.types.Context) -> float: def get_angle_snap_value(cls, context: bpy.types.Context) -> float:
"""Get the angle snap increment from Blender's tool settings. """Get the angle snap increment from Blender's tool settings.
Uses snap_angle_increment_3d (Blender 5.0+) or snap_angle_increment (Blender 4.x).
:param context: Blender context :param context: Blender context
:return: Angle snap increment in degrees :return: Angle snap increment in degrees
""" """
return context.scene.tool_settings.snap_angle_increment if bpy.app.version >= (5, 0, 0):
return math.degrees(context.scene.tool_settings.snap_angle_increment_3d)
return math.degrees(context.scene.tool_settings.snap_angle_increment)
@classmethod @classmethod
def get_snap_points_on_raycasted_face(cls, context, event, obj, face_index): def get_snap_points_on_raycasted_face(cls, context, event, obj, face_index):