to enhance the code for tekla

using System.Collections.Generic;
using Tekla.Structures.Geometry3d;
using Tekla.Structures.Model;
using Tekla.Structures.Model.UI;

namespace UserMacros
{
    public class CombineToContourPlate
    {
        public static void Run(Tekla.Macros.Runtime.IMacroRuntime runtime)
        {
            Model model = new Model();
            if (!model.GetConnectionStatus())
            {
                Tekla.Structures.Model.Operations.Operation.DisplayPrompt("Model not connected!");
                return;
            }

            // ✅ Use UI selector (avoid namespace conflict)
            var uiSelector = new Tekla.Structures.Model.UI.ModelObjectSelector();
            var selectedObjects = uiSelector.GetSelectedObjects();

            List<Point> contourPoints = new List<Point>();
            List<ModelObject> originals = new List<ModelObject>();

            while (selectedObjects.MoveNext())
            {
                ModelObject obj = selectedObjects.Current as ModelObject;

                if (obj is Beam)
                {
                    Beam beam = obj as Beam;
                    Point start = beam.StartPoint;
                    Point end = beam.EndPoint;

                    double thickness = 0.5;
                    beam.GetReportProperty("PROFILE.PLATE_THICKNESS", ref thickness);

                    contourPoints.Add(start);
                    contourPoints.Add(end);
                    contourPoints.Add(new Point(end.X, end.Y, end.Z - thickness));
                    contourPoints.Add(new Point(start.X, start.Y, start.Z - thickness));

                    originals.Add(beam);
                }
                else if (obj is ContourPlate)
                {
                    ContourPlate pl = obj as ContourPlate;
                    foreach (ContourPoint cp in pl.Contour.ContourPoints)
                    {
                        // ✅ Fix: use cp.GetCoordinate() instead of cp.Position
                        contourPoints.Add(cp.GetCoordinate());
                    }
                    originals.Add(pl);
                }
            }

            if (contourPoints.Count < 3)
            {
                Tekla.Structures.Model.Operations.Operation.DisplayPrompt("Select at least one valid plate or beam.");
                return;
            }

            ContourPlate newPlate = new ContourPlate();
            newPlate.Profile.ProfileString = "PL1";
            newPlate.Material.MaterialString = "A36";
            newPlate.Name = "CombinedPlate";
            newPlate.Class = "6";

            foreach (Point pt in contourPoints)
            {
                newPlate.AddContourPoint(new ContourPoint(pt, null));
            }

            if (newPlate.Insert())
            {
                Tekla.Structures.Model.Operations.Operation.DisplayPrompt("New combined contour plate created.");
            }
            else
            {
                Tekla.Structures.Model.Operations.Operation.DisplayPrompt("Failed to insert contour plate.");
                return;
            }

            // ✅ Correct yes/no dialog
            int response = Tekla.Structures.Model.Operations.Operation.DisplayYesNo("Delete original plates/beams?");
            if (response == Tekla.Structures.Model.Operations.Operation.DisplayYesNoEnum.Yes)
            {
                foreach (var obj in originals)
                {
                    obj.Delete();
                }
                Tekla.Structures.Model.Operations.Operation.DisplayPrompt("Original parts deleted.");
            }
            else
            {
                Tekla.Structures.Model.Operations.Operation.DisplayPrompt("Original parts kept.");
            }

            model.CommitChanges();
        }
    }
}



Comments

Popular posts from this blog

actions events in itext 7

midi_sequence_playing_real_time

GTTERMS_FORMALIZATION_GEOMETRIFYING_TRIGONOMETRY