"""
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)

"""
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)

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 # get Component Type for WhiteBoxMesh # use old White Box entity to hold White Box component if it exists, otherwise use a new one # add whiteBoxMeshComponent to entity and enable # translate append (extrude) a polygon # create face handle from user input (argv[1]) # find the polygon handle that corresponds to the given face # translate append (extrude) the polygon by a distance specified by the user (argv[2]) # recalculate uvs as mesh will have changed # notify the white box component the mesh has changed to force it to rebuild the render mesh