Lưu trữ và thay thế lưới

Oct 09 2020

Tôi cần tạo một vỏ lồi trên các đối tượng của mình, hiển thị hình ảnh và sau đó xóa vỏ đó một lần nữa. Ý tưởng của tôi là lưu trữ đối tượng, dữ liệu đối tượng hoặc chính lưới sau đó tạo vỏ và hiển thị hình ảnh và sau đó chỉ cần thay thế đối tượng / dữ liệu / lưới bằng dữ liệu được lưu trữ.

Ví dụ đầu tiên tôi muốn làm

self.backup[obj.name] = obj.data

và sau khi kết xuất đầy đủ và tôi muốn làm điều gì đó như

orig_data= self.backup[obj.name]
obj.data = orig_data
obj.data.update()

Nhưng đây không phải là khôi phục dữ liệu trước đó, thân tàu vẫn còn. Tôi đoán ngay bây giờ tôi chỉ lưu trữ các liên kết thay vì dữ liệu thực nhưng tôi không biết cách khắc phục điều này vì tôi không thực sự biết nhiều về các loại dữ liệu máy xay sinh tố khác nhau, v.v.

Sau khi cố gắng thay thế lưới đối tượng, dữ liệu và bản thân đối tượng và không cái nào hoạt động, tôi sắp hết ý tưởng. Tôi rất vui về bất kỳ đầu vào nào =)

Tái bút: Tôi đang sử dụng 2.8. trong trường hợp tạo ra bất kỳ sự khác biệt nào.

Trả lời

3 batFINGER Oct 09 2020 at 19:14

Tạo một bản sao

câu trả lời đơn giản là

self.backup[obj.name] = obj.data.copy()

mà không cần tạo một bản sao, bạn đã có một tham chiếu đến cùng một lưới. Nếu bạn đang sử dụng bpy.ops.mesh.convex_hullđề xuất thay vì sử dụng bmesh, hãy xem

Có cách nào để làm cho nhiều vật thể lồi lên?

Convex Hull làm lưới

Dữ liệu đã được lưu trữ cho chúng tôi trong dữ liệu tệp kết hợp,

me = context.object.data

mà không có bất kỳ sự đổi tên nào của các mắt lưới ở giữa vẫn là

bpy.data.objects[me.name]

Do đó, có thể chỉ cần giữ lại tên, tạo một lưới mới với tên khác cho thân tàu lồi và hoán đổi bằng cách sử dụng các mắt lưới được truy xuất thông qua tên.

Nếu sau khi tạo lưới thân lồi và muốn có nó vĩnh viễn, một cách tiếp cận cần xem xét sẽ là cung cấp cho đối tượng lưới một thuộc tính con trỏ đến lưới của vỏ lồi.

bpy.props.Object.convex_hull_mesh = PointerProperty(type=bpy.types.Mesh)

tạo lưới vỏ lồi và gán nó vào thuộc tính này để lưu nó. Một thuộc tính boolean khác có thể được sử dụng làm cờ để hoán đổi giữa lưới vỏ lồi và lưới gốc.