SaveText.Ru

WriteAndRead
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Collections;
  4. using System.ComponentModel;
  5. using System.Data;
  6. using System.Drawing;
  7. using System.Linq;
  8. using System.Text;
  9. using System.IO;
  10. using System.Windows.Forms;
  11. using System.Threading.Tasks;
  12.  
  13. using Tekla.Structures;
  14. using Tekla.Structures.Filtering;
  15. using Tekla.Structures.Filtering.Categories;
  16. using Tekla.Structures.Model;
  17. using TSMUI = Tekla.Structures.Model.UI;
  18. using Tekla.Technology.Akit.UserScript;
  19. using Tekla.Technology.Scripting;
  20. using System.Diagnostics;
  21. using TSM = Tekla.Structures.Model;
  22. using T3D = Tekla.Structures.Geometry3d;
  23.  
  24. namespace Tekla.Technology.Akit.UserScript
  25. {
  26.  
  27.         public class Form1 : Form
  28.         {
  29.                 TSM.Model model = new TSM.Model();
  30.                 private void InitializeComponent()
  31.                 {
  32.                         this.button_Save = new System.Windows.Forms.Button();
  33.                         this.button_Load = new System.Windows.Forms.Button();
  34.                         this.SuspendLayout();
  35.                         //
  36.                         // button_Save
  37.                         //
  38.                         this.button_Save.Location = new System.Drawing.Point(50, 15);
  39.                         this.button_Save.Name = "button_Save";
  40.                         this.button_Save.Size = new System.Drawing.Size(100, 23);
  41.                         this.button_Save.TabIndex = 1;
  42.                         this.button_Save.Text = "Сохранить";
  43.                         this.button_Save.UseVisualStyleBackColor = true;
  44.                         this.button_Save.Click += new System.EventHandler(this.button_Save_Click);
  45.                         //
  46.                         // button_Load
  47.                         //
  48.                         this.button_Load.Location = new System.Drawing.Point(50, 40);
  49.                         this.button_Load.Name = "button_Load";
  50.                         this.button_Load.Size = new System.Drawing.Size(100, 23);
  51.                         this.button_Load.TabIndex = 2;
  52.                         this.button_Load.Text = "Загрузить";
  53.                         this.button_Load.UseVisualStyleBackColor = true;
  54.                         this.button_Load.Click += new System.EventHandler(this.button_Load_Click);
  55.                         //
  56.                         // Form1
  57.                         //
  58.                         this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
  59.                         this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
  60.                         this.ClientSize = new System.Drawing.Size(200, 80);
  61.                         this.Controls.Add(this.button_Save);
  62.                         this.Controls.Add(this.button_Load);
  63.                         this.Name = "Form1";
  64.                         this.Text = "Запрос";
  65.                         this.TopMost = true;
  66.                         this.ResumeLayout(false);
  67.                         this.PerformLayout();
  68.  
  69.                 }
  70.  
  71.                 private System.Windows.Forms.Button button_Save;
  72.                 private System.Windows.Forms.Button button_Load;
  73.  
  74.  
  75.  
  76.                 public Form1()
  77.                 {
  78.                         InitializeComponent();
  79.                 }
  80.  
  81.  
  82.                 private void button_Save_Click(object sender, EventArgs e)//Событие      при  нажатии  на кнопку
  83.                 {
  84.                         WriteBeamToFile(false);
  85.                 }
  86.                 private void button_Load_Click(object sender, EventArgs e)//Событие      при  нажатии  на кнопку
  87.                 {
  88.                         ReadBeamFromFile();
  89.                 }
  90.                 private void WriteBeamToFile(bool AllObjects)//Метод записывает данные в файл (если передан аргумент true  -WriteBeamToFile(true) то сохраняются все балки иначе  - только выбранные)
  91.                 {
  92.                         ModelObjectEnumerator ModelObjectsToWriteOut = null;
  93.                         if (AllObjects)
  94.                         {
  95.                                 ModelObjectsToWriteOut = model.GetModelObjectSelector().GetAllObjectsWithType(ModelObject.ModelObjectEnum.BEAM);
  96.                         }
  97.                         else
  98.                         {
  99.                                 TSMUI.ModelObjectSelector GetSelectedObjects = new TSMUI.ModelObjectSelector();
  100.                                 ModelObjectsToWriteOut = GetSelectedObjects.GetSelectedObjects();
  101.                         }
  102.  
  103.                         string FileName = "BeamsOut.txt";//Название файла в который записываем (будет лежать в папке модели)
  104.                         string FinalFileName = Path.Combine(model.GetInfo().ModelPath, FileName);//Полный путь к файлу....объединяем путь к папке модели с именем файла с помощью метода "Combine"
  105.                         using (StreamWriter FileWriter = new StreamWriter(FinalFileName)) //Создаём поток использования операторов для записи нашего файла и передаём в него путь к файлу
  106.                         {
  107.                                 string TitleLineForFile = "Identifier" + "t" + "Class" + "t" + "Name" + "t" + "UDAcomment" + "t" + "PART_PREFIX" + "t" + "ASSEMBLY_PREFIX" + "t" + "SMkat" + "t" + "Profile" + "t" + "Material" + "t" + "CodeEnd1" + "t" + "CodeEnd2" + "t" + "Start.X" + "t" + "Start.Y" + "t" + "Start.Z" + "t" + "End.X" + "t" + "End.Y" + "t" + "End.Z" + "t" + "Label";
  108.                                 FileWriter.WriteLine(TitleLineForFile);//Сама запись строки в фай
  109.                                 while (ModelObjectsToWriteOut.MoveNext())//проходим по всей коллекции объектов Балка, собираем параметры и записываем в файл каждую строку Цикл идёт до тех пор пока не пройдёт по всей коллекции
  110.                                 {
  111.                                         Beam ThisBeam = ModelObjectsToWriteOut.Current as Beam;
  112.                                         if (ThisBeam != null)
  113.                                         {
  114.                                                 string UDAcomment = "";
  115.                                                 ThisBeam.GetUserProperty("comment", ref UDAcomment);
  116.                                                 int SMkat = -1;
  117.                                                 ThisBeam.GetUserProperty("cm_kat", ref SMkat);
  118.                                                 string CodeEnd1 = "";
  119.                                                 ThisBeam.GetUserProperty("CONN_CODE_END1", ref CodeEnd1);
  120.                                                 string CodeEnd2 = "";
  121.                                                 ThisBeam.GetUserProperty("CONN_CODE_END2", ref CodeEnd2);
  122.                                                 string Label = "";
  123.                                                 ThisBeam.GetUserProperty("fabricator", ref Label);
  124.                                                 //////////////////////атрибуты NPG/////////////////// objects_npg_list_of_elements.inp
  125.  
  126.  
  127.  
  128.                                                 //Создаём строку с любым набором параметров_разделённых_TAB_ по конкретному объекту "ThisBeam" активному в данный момент в цикле
  129.  
  130.                                                 string DataLineForFile = model.GetGUIDByIdentifier(ThisBeam.Identifier) + "t" +
  131.                                                         ThisBeam.Class + "t" +
  132.                                                         ThisBeam.Name + "t" +
  133.                                                         UDAcomment + "t" +
  134.                                                         ThisBeam.PartNumber.Prefix + "t" +
  135.                                                         ThisBeam.AssemblyNumber.Prefix + "t" +
  136.                                                          SMkat + "t" +
  137.                                                         ThisBeam.Profile.ProfileString + "t" +
  138.                                                         ThisBeam.Material.MaterialString + "t" +
  139.                                                         CodeEnd1 + "t" +
  140.                                                         CodeEnd2 + "t" +
  141.                                                         ThisBeam.StartPoint.X + "t" +
  142.                                                         ThisBeam.StartPoint.Y + "t" +
  143.                                                         ThisBeam.StartPoint.Z + "t" +
  144.                                                         ThisBeam.EndPoint.X + "t" +
  145.                                                         ThisBeam.EndPoint.Y + "t" +
  146.                                                         ThisBeam.EndPoint.Z + "t" +
  147.                                                          Label;
  148.  
  149.                                                 //Записываем строку в сам файл
  150.                                                 FileWriter.WriteLine(DataLineForFile);//Сама запись строки в файл
  151.  
  152.                                                 // Раскрашиваем выбранные объекты в чёрный цвет
  153.                                                 var redObjects = new List<ModelObject> { ThisBeam };
  154.                                                 TSMUI.ModelObjectVisualization.SetTemporaryState(redObjects, new TSM.UI.Color());
  155.                                         }
  156.                                 }
  157.                         }
  158.  
  159.  
  160.                         MessageBox.Show("Файл записан. Объекты выделены чёрным");//Сообщение системное Windows.
  161.                         Tekla.Structures.Model.Operations.Operation.DisplayPrompt("Файл записан");//Сообщение в строке состояния Теклы
  162.                 }
  163.                 private void ReadBeamFromFile()//Метод считывает данные     из файла
  164.                 {
  165.                         string FileName = "BeamsIn.txt";//Название файла из которого читаем (будет лежать в папке модели)
  166.                         string FinalFileName = Path.Combine(model.GetInfo().ModelPath, FileName);//Полный путь к файлу....объединяем путь к папке модели с именем файла с помощью метода "Combine"
  167.                         using (StreamReader FileReader = new StreamReader(FinalFileName)) //Создаём поток использования операторов для чтения нашего файла и передаём в него путь к файлу
  168.                         {
  169.  
  170.                                 while (!FileReader.EndOfStream)//Цикл считывающий строки из файла, пока они не кончатся (пока файл ридер не равен конец потока)
  171.                                 {
  172.                                         string DataLine = FileReader.ReadLine();//Считываем одну строку из файла
  173.                                         string[] DataArray = DataLine.Split('   ');//Разделяем строку по TAB в массив - это парамеры одной балки
  174.  
  175.                                         string FromFileGUID = DataArray[0];
  176.                                         if (FromFileGUID == "Identifier")
  177.                                                 continue;
  178.                                         else
  179.                                         {
  180.                                                 string FromFileClass = DataArray[1];
  181.                                                 string FromFileName = DataArray[2];
  182.                                                 string FromFileUDAcomment = DataArray[3];
  183.                                                 string FromFilePartPrefix = DataArray[4];
  184.                                                 string FromFileAssemblyPrefix = DataArray[5];
  185.                                                 int FromFileSMkat = int.Parse(DataArray[6]);
  186.                                                 string FromFileProfile = DataArray[7];
  187.                                                 string FromFileMaterial = DataArray[8];
  188.                                                 string FromFileCodeEnd1 = DataArray[9];
  189.                                                 string FromFileCodeEnd2 = DataArray[10];
  190.                                                 double FromFileSX = double.Parse(DataArray[11]);//Координата Х точки начала, переведённая из стринг в дабл
  191.                                                 double FromFileSY = double.Parse(DataArray[12]);
  192.                                                 double FromFileSZ = double.Parse(DataArray[13]);
  193.                                                 double FromFileEX = double.Parse(DataArray[14]);
  194.                                                 double FromFileEY = double.Parse(DataArray[15]);
  195.                                                 double FromFileEZ = double.Parse(DataArray[16]);
  196.                                                 string FromFileLabel = DataArray[17];
  197.                                                 //////////////////////атрибуты NPG/////////////////// objects_npg_list_of_elements.inp
  198.  
  199.                                                
  200.                                                
  201.                                                 //Ищем объект в моделе по его GUID и выделяем его
  202.                                                 Beam ThisBeam = model.SelectModelObject(model.GetIdentifierByGUID(FromFileGUID)) as Beam;
  203.                                                 if (ThisBeam != null)
  204.                                                 {
  205.                                                         //если объект с указанным GUID существует  меняем его свойства на свойства из файла
  206.                                                         ThisBeam.Class = FromFileClass;
  207.                                                         ThisBeam.Name = FromFileName;
  208.                                                         ThisBeam.SetUserProperty("comment", FromFileUDAcomment);
  209.                                                         ThisBeam.PartNumber.Prefix = FromFilePartPrefix;
  210.                                                         ThisBeam.AssemblyNumber.Prefix = FromFileAssemblyPrefix;
  211.                                                         ThisBeam.SetUserProperty("cm_kat", FromFileSMkat);
  212.                                                         ThisBeam.Profile.ProfileString = FromFileProfile;
  213.                                                         ThisBeam.Material.MaterialString = FromFileMaterial;
  214.                                                         ThisBeam.SetUserProperty("CONN_CODE_END1", FromFileCodeEnd1);
  215.                                                         ThisBeam.SetUserProperty("CONN_CODE_END2", FromFileCodeEnd2);
  216.                                                         ThisBeam.StartPoint = new T3D.Point(FromFileSX, FromFileSY, FromFileSZ);
  217.                                                         ThisBeam.EndPoint = new T3D.Point(FromFileEX, FromFileEY, FromFileEZ);
  218.                                                         ThisBeam.SetUserProperty("fabricator", FromFileLabel);
  219.                                                         ThisBeam.Modify();
  220.  
  221.                                                         // Раскрашиваем изменённые объекты в красный цвет
  222.                                                         var redObjects = new List<ModelObject> { ThisBeam };
  223.                                                         TSMUI.ModelObjectVisualization.SetTemporaryState(redObjects, new TSM.UI.Color(1, 0, 0));
  224.                                                 }
  225.                                                 else
  226.                                                 {
  227.                                                         MessageBox.Show("Элемент_не_найден");
  228.                                                         //иначе если объекта с указанным GUID нет - создаём новый объект со свойствами из файла
  229.                                                         //ThisBeam = new Beam();
  230.                                                         //ThisBeam.Profile.ProfileString = FromFileProfile;
  231.                                                         //ThisBeam.Material.MaterialString = FromFileMaterial;
  232.                                                         //ThisBeam.Class = FromFileClass;
  233.                                                         //ThisBeam.StartPoint = new T3D.Point(FromFileSX, FromFileSY, FromFileSZ);
  234.                                                         //ThisBeam.EndPoint = new T3D.Point(FromFileEX, FromFileEY, FromFileEZ);
  235.                                                         //ThisBeam.Insert();
  236.                                                 }
  237.                                         }
  238.                                 }
  239.                                 //model.CommitChanges();
  240.                                 MessageBox.Show("Балки изменены - выделены красным");//Сообщение системное Windows.
  241.                                 Tekla.Structures.Model.Operations.Operation.DisplayPrompt("Балки изменены");//Сообщение в строке состояния Теклы
  242.                                                                                                                                                                                         //Tekla.Structures.Model.Operations.Operation.DisplayReport(FinalFileName);//Открывает файл в окне сообщений Теклы
  243.                         }
  244.  
  245.                 }
  246.  
  247.         }
  248.  
  249.         public class Script
  250.         {
  251.                 public static void Run(Tekla.Technology.Akit.IScript akit)
  252.                 {
  253.                         Application.EnableVisualStyles();
  254.                         Application.Run(new Form1());
  255.                 }
  256.         }
  257.  
  258. }

Share with your friends:

Print