Files
test/ModelPlugin.cs
2025-11-26 13:53:00 +08:00

164 lines
4.6 KiB
C#

using System;
using System.Collections;
using System.Collections.Generic;
using System.Windows.Forms;
using Tekla.Structures.Geometry3d;
using Tekla.Structures.Model;
using Tekla.Structures.Model.UI;
using Tekla.Structures.Plugins;
namespace TeklaModelPlugin1
{
public class PluginData
{
#region Fields
//
// Define the fields specified on the Form.
//
/* Some examples:
[StructuresField("RebarName")]
public string RebarName;
[StructuresField("RebarSize")]
public string RebarSize;
[StructuresField("RebarGrade")]
public string RebarGrade;
[StructuresField("RebarBendingRadius")]
public string RebarBendingRadius;
[StructuresField("RebarClass")]
public int RebarClass;
[StructuresField("RebarSpacing")]
public double RebarSpacing;
*/
#endregion
}
[Plugin("TeklaModelPlugin1")]
[PluginUserInterface("TeklaModelPlugin1.MainForm")]
public class TeklaModelPlugin1 : PluginBase
{
#region Fields
private Model _Model;
private PluginData _Data;
//
// Define variables for the field values.
//
/* Some examples:
private string _RebarName = string.Empty;
private string _RebarSize = string.Empty;
private string _RebarGrade = string.Empty;
private ArrayList _RebarBendingRadius = new ArrayList();
private int _RebarClass = new int();
private double _RebarSpacing;
*/
#endregion
#region Properties
private Model Model
{
get { return this._Model; }
set { this._Model = value; }
}
private PluginData Data
{
get { return this._Data; }
set { this._Data = value; }
}
#endregion
#region Constructor
public TeklaModelPlugin1(PluginData data)
{
Model = new Model();
Data = data;
}
#endregion
#region Overrides
public override List<InputDefinition> DefineInput()
{
//
// This is an example for selecting two points; change this to suit your needs.
//
List<InputDefinition> PointList = new List<InputDefinition>();
Picker Picker = new Picker();
ArrayList PickedPoints = Picker.PickPoints(Picker.PickPointEnum.PICK_TWO_POINTS);
PointList.Add(new InputDefinition(PickedPoints));
return PointList;
}
public override bool Run(List<InputDefinition> Input)
{
try
{
GetValuesFromDialog();
//
// This is an example for selecting two points; change this to suit your needs.
//
ArrayList Points = (ArrayList)Input[0].GetInput();
Point StartPoint = Points[0] as Point;
Point EndPoint = Points[1] as Point;
//
// Write your code here; better yet, create private methods and call them from here.
//
}
catch (Exception Exc)
{
MessageBox.Show(Exc.ToString());
}
return true;
}
#endregion
#region Private methods
/// <summary>
/// Gets the values from the dialog and sets the default values if needed
/// </summary>
private void GetValuesFromDialog()
{
/* Some examples:
_RebarName = Data.RebarName;
_RebarSize = Data.RebarSize;
_RebarGrade = Data.RebarGrade;
char[] Parameters = { ' ' };
string[] Radiuses = Data.RebarBendingRadius.Split(Parameters, StringSplitOptions.RemoveEmptyEntries);
foreach (string Item in Radiuses)
_RebarBendingRadius.Add(Convert.ToDouble(Item));
_RebarClass = Data.RebarClass;
_RebarSpacing = Data.RebarSpacing;
if (IsDefaultValue(_RebarName))
_RebarName = "REBAR";
if (IsDefaultValue(_RebarSize))
_RebarSize = "12";
if (IsDefaultValue(_RebarGrade))
_RebarGrade = "Undefined";
if (_RebarBendingRadius.Count < 1)
_RebarBendingRadius.Add(30.00);
if (IsDefaultValue(_RebarClass) || _RebarClass <= 0)
_RebarClass = 99;
if (IsDefaultValue(_RebarSpacing) || _RebarSpacing <= 0)
_RebarSpacing = 200.0;
*/
}
// Write your private methods here.
#endregion
}
}