private static void GenerateItems(List <LineItem> list, LineGenerationSettings settings)
        {
            var totalLength = Utils.CalculateLengthSum(list);
            var lengthScale = settings.length / totalLength;

            var columnDraft = CreateColumnDraft(settings);

            foreach (var item in list)
            {
                columnDraft.isHorizontalMrror = item.isHorizontalMirror;
                columnDraft.length            = item.builder.length * lengthScale;

                item.builder.Build(columnDraft);
                columnDraft.pivot += columnDraft.right * columnDraft.length;
            }
        }
        private static ColumnDraft CreateColumnDraft(LineGenerationSettings settings)
        {
            var result = ColumnDraft.Create();

            result.length = settings.length;
            result.height = settings.height;

            result.isHorizontalMrror = false;
            result.forwardScale      = settings.forwardScale;

            result.parent = settings.parent;
            result.pivot  = settings.pivot;

            result.up    = settings.up;
            result.right = settings.right;

            return(result);
        }
        /// ======================================================================

        private static LineGenerationSettings CreateSettings(StandardLine builder, LineDraft draft)
        {
            var result = LineGenerationSettings.Create();

            result.length = draft.length;
            result.height = draft.height;

            result.forwardScale = draft.forwardScale;

            result.parent = draft.parent;
            result.pivot  = draft.pivot;

            result.up      = draft.up;
            result.right   = draft.right;
            result.forward = draft.forward;

            return(result);
        }