private static void GenerateItem(ElementItem item, ElementGenerationSettings settings)
        {
            var go = Utils.Instantiate(item.prefab);

            if (go == null)
            {
                return;
            }

            go.transform.parent      = settings.parent;
            go.transform.position    = settings.position;
            go.transform.eulerAngles = settings.angles;
            go.transform.localScale  = settings.scale;
        }
        /// ======================================================================

        private static ElementGenerationSettings CreateSettings(ElementParameters parameters, ElementDraft draft)
        {
            var result = ElementGenerationSettings.Create();

            var position = draft.pivot;
            var angles   = Quaternion.LookRotation(draft.forward, draft.up).eulerAngles;
            var scale    = Vector3.one;

            var isHorizontalMrror = parameters.isHorizontalMrror;

            if (draft.isHorizontalMrror)
            {
                isHorizontalMrror = !isHorizontalMrror;
            }

            var isVerticalMirror = parameters.isVerticalMirror;

            if (draft.isVerticalMirror)
            {
                isVerticalMirror = !isVerticalMirror;
            }

            if (Utils.ApproximatelyZero(parameters.length))
            {
                scale.x = 1f;
            }
            else if (Utils.ApproximatelyZero(draft.length))
            {
                scale.x = 0f;
            }
            else
            {
                scale.x = draft.length / parameters.length;
            }

            if (Utils.ApproximatelyZero(parameters.height))
            {
                scale.y = 1f;
            }
            else if (Utils.ApproximatelyZero(draft.height))
            {
                scale.y = 0f;
            }
            else
            {
                scale.y = draft.height / parameters.height;
            }

            if (Utils.ApproximatelyZero(draft.forwardScale))
            {
                scale.z = 1f;
            }
            else
            {
                scale.z = draft.forwardScale;
            }

            if (isHorizontalMrror)
            {
                scale.x  *= -1f;
                position -= draft.right * parameters.length * scale.x;
            }

            if (isVerticalMirror)
            {
                scale.y  *= -1f;
                position -= draft.up * parameters.height * scale.y;
            }

            result.parent   = draft.parent;
            result.position = position;
            result.angles   = angles;
            result.scale    = scale;

            return(result);
        }