// Copyright (c) 2018 RISC Software GmbH
//
// This file was generated by CPACSGen from CPACS XML Schema (c) German Aerospace Center (DLR/SC).
// Do not edit, all changes are lost when files are re-generated.
//
// Licensed under the Apache License, Version 2.0 (the "License")
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

#pragma once

#include <boost/optional.hpp>
#include <boost/utility/in_place_factory.hpp>
#include <string>
#include <tixi.h>
#include "tigl_internal.h"

namespace tigl
{
class CTiglUIDManager;

namespace generated
{
    // This class is used in:
    // CPACSLongFloorBeamPosition

    // generated from /xsd:schema/xsd:complexType[67]
    /// @brief alignmentStructMemberType
    /// 
    /// 
    /// 
    class CPACSAlignmentStructMember
    {
    public:
        TIGL_EXPORT CPACSAlignmentStructMember(CTiglUIDManager* uidMgr);
        TIGL_EXPORT virtual ~CPACSAlignmentStructMember();

        TIGL_EXPORT CTiglUIDManager& GetUIDManager();
        TIGL_EXPORT const CTiglUIDManager& GetUIDManager() const;

        TIGL_EXPORT virtual void ReadCPACS(const TixiDocumentHandle& tixiHandle, const std::string& xpath);
        TIGL_EXPORT virtual void WriteCPACS(const TixiDocumentHandle& tixiHandle, const std::string& xpath) const;

        TIGL_EXPORT virtual const std::string& GetUID() const;
        TIGL_EXPORT virtual void SetUID(const std::string& value);

        TIGL_EXPORT virtual const boost::optional<double>& GetOffsetLocX() const;
        TIGL_EXPORT virtual void SetOffsetLocX(const boost::optional<double>& value);

        TIGL_EXPORT virtual const boost::optional<double>& GetRotationLocX() const;
        TIGL_EXPORT virtual void SetRotationLocX(const boost::optional<double>& value);

        TIGL_EXPORT virtual const boost::optional<double>& GetTranslationLocY() const;
        TIGL_EXPORT virtual void SetTranslationLocY(const boost::optional<double>& value);

        TIGL_EXPORT virtual const boost::optional<double>& GetTranslationLocZ() const;
        TIGL_EXPORT virtual void SetTranslationLocZ(const boost::optional<double>& value);

    protected:
        CTiglUIDManager* m_uidMgr;

        std::string             m_uID;

        /// Offset in direction of extrusion (absolute
        /// value)
        boost::optional<double> m_offsetLocX;

        /// Rotation around local x axis (extrusion axis)
        boost::optional<double> m_rotationLocX;

        /// Translation along local y axis (perpendicular
        /// to extrusion axis)
        boost::optional<double> m_translationLocY;

        /// Translation along local z axis (perpendicular
        /// to x ynd y axes)
        boost::optional<double> m_translationLocZ;

    private:
#ifdef HAVE_CPP11
        CPACSAlignmentStructMember(const CPACSAlignmentStructMember&) = delete;
        CPACSAlignmentStructMember& operator=(const CPACSAlignmentStructMember&) = delete;

        CPACSAlignmentStructMember(CPACSAlignmentStructMember&&) = delete;
        CPACSAlignmentStructMember& operator=(CPACSAlignmentStructMember&&) = delete;
#else
        CPACSAlignmentStructMember(const CPACSAlignmentStructMember&);
        CPACSAlignmentStructMember& operator=(const CPACSAlignmentStructMember&);
#endif
    };
} // namespace generated

// Aliases in tigl namespace
#ifdef HAVE_CPP11
using CCPACSAlignmentStructMember = generated::CPACSAlignmentStructMember;
#else
typedef generated::CPACSAlignmentStructMember CCPACSAlignmentStructMember;
#endif
} // namespace tigl
