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
Post a Comment