[Blender] Отладка результата ретопологии #93

Closed
opened 2023-06-26 22:06:38 +03:00 by brothermechanic · 5 comments
brothermechanic commented 2023-06-26 22:06:38 +03:00 (Migrated from gitlab.com)

Решить проблему торчащих острых "пиков" отдельных точек мешей сложных мест геометрии

Решить проблему торчащих острых "пиков" отдельных точек мешей сложных мест геометрии
brothermechanic commented 2023-06-26 22:06:40 +03:00 (Migrated from gitlab.com)

assigned to @brothermechanic

assigned to @brothermechanic
brothermechanic commented 2023-06-26 22:07:05 +03:00 (Migrated from gitlab.com)

добавить модификатор Weld

        weld = lowpoly_obj.modifiers.new('weld', type='WELD')
        weld.mode = 'CONNECTED'
        weld.merge_threshold = 0.001
добавить модификатор Weld ```python weld = lowpoly_obj.modifiers.new('weld', type='WELD') weld.mode = 'CONNECTED' weld.merge_threshold = 0.001 ```
brothermechanic commented 2023-06-26 22:07:39 +03:00 (Migrated from gitlab.com)

добавить проверку на пиковые вершины

import bpy

import bpy
import bmesh
from math import pi, radians, degrees


me = bpy.context.object.data
bm = bmesh.from_edit_mesh(me)

def is_inline(vert, eps=radians(50)):
    sharps = []
    angle = 0.0
    for face in vert.link_faces:
        if abs(angle - vert.normal.angle(face.normal)) > radians(1):
            angle = vert.normal.angle(face.normal)
            print('1', degrees(angle))
            if angle > eps:
                sharps.append(degrees(angle))
                print('2', degrees(angle))
                print(sharps)
    return len(sharps) == len(vert.link_faces)

def deselect(vert):
    for edge in vert.link_edges:
        if edge.other_vert(vert).select:
            return False
    return True

for v in bm.verts:
    v.select_set(
        is_inline(v)
        #True
    )

for v in bm.verts:
    if v.select:
        v.select_set(
            deselect(v)
            #True
        )

            
bmesh.update_edit_mesh(me)
добавить проверку на пиковые вершины ```python import bpy import bpy import bmesh from math import pi, radians, degrees me = bpy.context.object.data bm = bmesh.from_edit_mesh(me) def is_inline(vert, eps=radians(50)): sharps = [] angle = 0.0 for face in vert.link_faces: if abs(angle - vert.normal.angle(face.normal)) > radians(1): angle = vert.normal.angle(face.normal) print('1', degrees(angle)) if angle > eps: sharps.append(degrees(angle)) print('2', degrees(angle)) print(sharps) return len(sharps) == len(vert.link_faces) def deselect(vert): for edge in vert.link_edges: if edge.other_vert(vert).select: return False return True for v in bm.verts: v.select_set( is_inline(v) #True ) for v in bm.verts: if v.select: v.select_set( deselect(v) #True ) bmesh.update_edit_mesh(me) ```
brothermechanic commented 2023-06-29 18:59:36 +03:00 (Migrated from gitlab.com)

marked this issue as related to #90

marked this issue as related to #90
brothermechanic commented 2023-06-29 19:00:35 +03:00 (Migrated from gitlab.com)

changed the description

changed the description
brothermechanic (Migrated from gitlab.com) closed this issue 2023-06-29 19:01:05 +03:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: robossembler/framework#93
No description provided.