12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- """
- Copyright (c) Contributors to the Open 3D Engine Project.
- For complete copyright and license terms please see the LICENSE at the root of this distribution.
- SPDX-License-Identifier: Apache-2.0 OR MIT
- """
- # setup path
- import azlmbr.legacy.general as general
- import azlmbr.bus as bus
- import azlmbr.editor as editor
- import azlmbr.entity
- import azlmbr.object
- import azlmbr.math
- import azlmbr.whitebox.api as api
- from azlmbr.entity import EntityId
- # get Component Type for WhiteBoxMesh
- whiteBoxMeshComponentTypeId = get_white_box_component_type()
- # use old White Box entity to hold White Box component if it exists, otherwise use a new one
- newEntityId = None
- oldEntityId = general.find_editor_entity('WhiteBox')
- if oldEntityId.IsValid():
- whiteBoxMeshComponentExists = editor.EditorComponentAPIBus(bus.Broadcast, 'HasComponentOfType', oldEntityId, whiteBoxMeshComponentTypeId)
- if (whiteBoxMeshComponentExists):
- oldwhiteBoxMeshComponent = editor.EditorComponentAPIBus(bus.Broadcast, 'GetComponentOfType', oldEntityId, whiteBoxMeshComponentTypeId)
- editor.EditorComponentAPIBus(bus.Broadcast, 'RemoveComponents', [oldwhiteBoxMeshComponent.GetValue()])
- newEntityId = oldEntityId
- else:
- newEntityId = editor.ToolsApplicationRequestBus(bus.Broadcast, 'CreateNewEntity', EntityId())
- editor.EditorEntityAPIBus(bus.Event, 'SetName', newEntityId, "WhiteBox")
- # add whiteBoxMeshComponent to entity and enable
- whiteBoxMeshComponentOutcome = editor.EditorComponentAPIBus(bus.Broadcast, 'AddComponentsOfType', newEntityId, [whiteBoxMeshComponentTypeId])
- if (whiteBoxMeshComponentOutcome.IsSuccess()):
- print("White Box Component added to entity.")
- whiteBoxMeshComponents = whiteBoxMeshComponentOutcome.GetValue()
- whiteBoxMeshComponent = whiteBoxMeshComponents[0]
- editor.EditorComponentAPIBus(bus.Broadcast, 'EnableComponents', whiteBoxMeshComponents)
- isComponentEnabled = editor.EditorComponentAPIBus(bus.Broadcast, 'IsComponentEnabled', whiteBoxMeshComponent)
- if (isComponentEnabled):
- print("Enabled Mesh component.")
- whiteBoxMesh = azlmbr.whitebox.request.bus.EditorWhiteBoxComponentRequestBus(bus.Event, 'GetWhiteBoxMeshHandle', whiteBoxMeshComponent)
- # translate append (extrude) a polygon
- if (len(sys.argv) >= 2 and float(sys.argv[2]) != 0.0):
- # create face handle from user input (argv[1])
- faceHandle = azlmbr.object.construct('FaceHandle', int(sys.argv[1]))
- # find the polygon handle that corresponds to the given face
- facePolygonHandle = whiteBoxMesh.FacePolygonHandle(faceHandle)
- # translate append (extrude) the polygon by a distance specified by the user (argv[2])
- whiteBoxMesh.TranslatePolygonAppend(facePolygonHandle, float(sys.argv[2]))
- # recalculate uvs as mesh will have changed
- whiteBoxMesh.CalculatePlanarUVs()
- # notify the white box component the mesh has changed to force it to rebuild the render mesh
- azlmbr.whitebox.notification.bus.EditorWhiteBoxComponentNotificationBus(bus.Event, 'OnWhiteBoxMeshModified', whiteBoxMeshComponent)
|