создание точек при помощи пользователя, затем создание окружности на точке!help!

Автор Тема: создание точек при помощи пользователя, затем создание окружности на точке!help!  (Прочитано 52234 раз)

0 Пользователей и 5 Гостей просматривают эту тему.

Оффлайн zmk.autocadАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 64
  • Карма: 0
Это к000пец. Не когда не замечал что в свойствах, код форматирования прописывают. Хотя если подумать первое где должен был искать это там -) Спасибо большое всё работает! Осталось только обработать ошибки!

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Осталось только обработать ошибки!
Это тебе только кажется. :) Ты сейчас это внёс в обычный МТЕКСТ, а теперь нужно чтобы ты создал блок, вставил его и внёс эту информацию в атрибут блока (многострочный).
Сделай следующий шаг!
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн zmk.autocadАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 64
  • Карма: 0

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
А зачем создавать блок?
Для того, чтобы решить задачу самым оптимальным способом. Ну и заодно продвинуться в программировании под AutoCAD.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн zmk.autocadАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 64
  • Карма: 0
т.е. сам метод выполнения программы оставить как есть, только создать блок. закинуть туда мой МТЕКСТ и задать ему атрибуты? но как я вытаскивал МТЕКСТ по handle из таблицы, так всё и останется. верно?

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
1) Не МТЕКСТ, а многострочный атрибут (команда _ATTDEF и там включить флажок многострочности)

2) Что ты будешь вытаскивать из таблицы - это уже другой вопрос.
3) Вот пример блока, который будешь вставлять. Подредактируй под свои нужды. 
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
И давай вернёмся к постановке задачи, а то на 7 страницах я уже её успел потерять. Сформулируй четко:
1) что у тебя есть?
2) что тебе нужно в итоге получить?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн zmk.autocadАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 64
  • Карма: 0
Хорошо.
Есть файл с именем точки и высотой. так сказать нулевой цикл. а потом приходят следующие файлы и при загрузки в автокад вычисляются отклонения от нулевого цикла.

на чертеже это выглядет как окружность с текстом. где в числителе имя марки, а в знаменатели отклонение от нулевого цикла в мм. формата +0.0

Код конечно корявый но какой уж есть -(
class1:
Код - C# [Выбрать]
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using Autodesk.AutoCAD.ApplicationServices;
  6. using Autodesk.AutoCAD.EditorInput;
  7. using Autodesk.AutoCAD.Runtime;
  8. using Autodesk.AutoCAD.Geometry;
  9. using Autodesk.AutoCAD.DatabaseServices;
  10. using Autodesk.AutoCAD.Windows;
  11. using Autodesk.Windows;
  12. using Autodesk.AutoCAD.Colors;
  13.  
  14.  
  15. namespace proekt1
  16. {
  17.     public class Class1 : IExtensionApplication
  18.     {
  19.         static public FRM_GENERAL form1_gener;
  20.         public void Initialize()
  21.         {
  22.         }
  23.         public void Terminate()
  24.         {
  25.  
  26.         }
  27.         [CommandMethod("func_form")]
  28.         public void func_form()
  29.         {
  30.             // Открываем форму для работы
  31.             form1_gener = new FRM_GENERAL();
  32.             form1_gener.Show();
  33.         }
  34.         static public void func_rename_new(string f_new_layers, int f_color_select)
  35.         {
  36.             // Функция активирует слой или создает новый
  37.  
  38.             // получаем данные чертежа
  39.             Document acDoc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;
  40.             Database acDocBase = acDoc.Database;
  41.             Editor acDocEd = acDoc.Editor;
  42.             // Блокируем документ и открываем транзакцию
  43.             using (DocumentLock acDocLock = acDoc.LockDocument())
  44.             {
  45.                 using (Transaction acDocTr = acDocBase.TransactionManager.StartTransaction())
  46.                 {
  47.                     // Добавить проверку на существование слоя!
  48.                     LayerTable tblLayer = (LayerTable)acDocTr.GetObject(acDocBase.LayerTableId, OpenMode.ForRead, false);
  49.                     bool flag_new_layer = false;
  50.                     foreach (ObjectId ent in tblLayer)
  51.                     {
  52.                         LayerTableRecord entLayer = (LayerTableRecord)acDocTr.GetObject(ent, OpenMode.ForRead);
  53.                         acDocEd.WriteMessage("\nLayer name : " + entLayer.Name);
  54.                         if (entLayer.Name == f_new_layers)
  55.                         {
  56.                             flag_new_layer = true;
  57.                         }
  58.                     }
  59.                     if (flag_new_layer == false)
  60.                     {
  61.                         LayerTable acDocLayerTable = acDocTr.GetObject(acDocBase.LayerTableId, OpenMode.ForWrite) as LayerTable;
  62.                         LayerTableRecord acDocNewLayer = new LayerTableRecord();
  63.                         acDocNewLayer.Name = f_new_layers;
  64.                         acDocLayerTable.Add(acDocNewLayer);
  65.                         acDocTr.AddNewlyCreatedDBObject(acDocNewLayer, true);
  66.                         acDocBase.Clayer = acDocLayerTable[f_new_layers];
  67.                         if (f_color_select == 0)
  68.                         {
  69.                         acDocNewLayer.Color = Color.FromRgb(255, 255, 1);
  70.                         }
  71.                         else if (f_color_select == 1)
  72.                         {
  73.                             acDocNewLayer.Color = Color.FromRgb(255, 1, 1);
  74.                         }
  75.                         else if (f_color_select == 2)
  76.                         {
  77.                             acDocNewLayer.Color = Color.FromRgb(1, 2, 255);
  78.                         }
  79.                         else if (f_color_select == 3)
  80.                         {
  81.                             acDocNewLayer.Color = Color.FromRgb(1, 255, 1);
  82.                         }
  83.                         else if (f_color_select == 4)
  84.                         {
  85.                             acDocNewLayer.Color = Color.FromRgb(1, 255, 255);
  86.                         }
  87.                         else
  88.                         {
  89.                             acDocNewLayer.Color = Color.FromRgb(5, 255, 10);
  90.                         }                        
  91.                             acDocTr.Commit();
  92.                     }
  93.                     else
  94.                     {
  95.                         LayerTable acDocLayerTable = acDocTr.GetObject(acDocBase.LayerTableId, OpenMode.ForWrite) as LayerTable;
  96.                         acDocBase.Clayer = acDocLayerTable[f_new_layers];
  97.                         acDocTr.Commit();
  98.                     }
  99.                 }
  100.             }
  101.             // Возвращаем данные и завершаем функцию
  102.             return;
  103.         }
  104.         static public void func_new_circle(string f_name, int f_rad)
  105.         {
  106.             // Функция Создания окружности на чертеже
  107.             // получаем данные чертежа
  108.             Document acDoc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;
  109.             Database acDocBase = acDoc.Database;
  110.             Editor acDocEdit = acDoc.Editor;
  111.            
  112.             // создание круга:
  113.            
  114.             PromptPointResult ppr1 = null; // переменная хранит результат выбора точки пользователем на чертеже
  115.             ppr1 = acDocEdit.GetPoint(new PromptPointOptions("\n Укажите точку № " + f_name));
  116.             if (ppr1.Status == PromptStatus.OK)
  117.             {
  118.                 using (DocumentLock acDocLock = acDoc.LockDocument())
  119.                 {
  120.                     using (Transaction acDocTr = acDocBase.TransactionManager.StartTransaction())
  121.                     {
  122.                         BlockTable TrTable = acDocTr.GetObject(acDocBase.BlockTableId, OpenMode.ForRead) as BlockTable;
  123.                         BlockTableRecord TrTableRec = acDocTr.GetObject(TrTable[BlockTableRecord.ModelSpace], OpenMode.ForWrite) as BlockTableRecord;
  124.                         Circle accirc = new Circle();
  125.                         accirc.SetDatabaseDefaults();
  126.                         accirc.Center = ppr1.Value;
  127.                         accirc.Radius = f_rad;
  128.                         TrTableRec.AppendEntity(accirc);
  129.                         acDocTr.AddNewlyCreatedDBObject(accirc, true);
  130.                         ObjectIdCollection obColl = new ObjectIdCollection();
  131.                         obColl.Add(accirc.ObjectId);
  132.                         // окружность создана
  133.                         // создаем штриховк
  134.                         Hatch acHatch = new Hatch();
  135.  
  136.                         TrTableRec.AppendEntity(acHatch);
  137.                         acDocTr.AddNewlyCreatedDBObject(acHatch, true);
  138.  
  139.                         acHatch.SetDatabaseDefaults();
  140.                         acHatch.SetHatchPattern(HatchPatternType.PreDefined, "SOLID");
  141.                         acHatch.Associative = true;
  142.                         acHatch.AppendLoop(HatchLoopTypes.Outermost, obColl);
  143.  
  144.                         // потдверждаем измениния, сохраняем транзакцию
  145.                         acDocTr.Commit();
  146.                     }
  147.                 }    
  148.             }
  149.             // возвращаем данные и закрываем функцию
  150.             return;
  151.         }
  152.         static public long func_new_text(string str_name, string str_h, int size_text)
  153.         {
  154.             // функция создающая текстовое поле рядом с осадочной марокой
  155.             Document acDoc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;
  156.             Database acDocBase = acDoc.Database;
  157.             Editor acDocEdit = acDoc.Editor;
  158.  
  159.             long FP_result_long = new long();
  160.  
  161.             PromptPointResult ppr1 = acDocEdit.GetPoint(new PromptPointOptions("\n Укажите метоположения текста : N = " + str_name));
  162.             if (ppr1.Status == PromptStatus.OK)
  163.             {
  164.  
  165.                 using (DocumentLock acDockLock = acDoc.LockDocument())
  166.                 {
  167.                     using (Transaction acDocTr = acDoc.TransactionManager.StartTransaction())
  168.                     {
  169.                         BlockTable TrTable = acDocTr.GetObject(acDocBase.BlockTableId, OpenMode.ForRead) as BlockTable;
  170.                         BlockTableRecord TrTableRec = acDocTr.GetObject(TrTable[BlockTableRecord.ModelSpace], OpenMode.ForWrite) as BlockTableRecord;
  171.  
  172.                         MText acMText = new MText();
  173.                         acMText.SetDatabaseDefaults();
  174.                         acMText.Width = 10;
  175.                         acMText.TextHeight = size_text;
  176.                         acMText.Contents = str_name + "\n";
  177.                         acMText.Location = ppr1.Value;
  178.                         TrTableRec.AppendEntity(acMText);
  179.                         acDocTr.AddNewlyCreatedDBObject(acMText, true);
  180.                        
  181.                         FP_result_long = acMText.Handle.Value;
  182.  
  183.                        
  184.                         acDocTr.Commit();
  185.                        
  186.                     }
  187.                 }
  188.             }          
  189.             // возвращаем данные закрываем работу функции
  190.             return FP_result_long;
  191.         }
  192.         static public string func_edit_text(Double f_h, string f_name, long f_handle)
  193.         {
  194.             string result = null;
  195.            
  196.             Document acDoc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;
  197.             if (acDoc == null)
  198.             {
  199.                 return result;
  200.             }
  201.             Database acDocBase = acDoc.Database;
  202.             Editor acDocEdit = acDoc.Editor;
  203.                        
  204.             Handle ref_handle = new Handle(f_handle);
  205.             ObjectId obj_id = ObjectId.Null;
  206.             Boolean flag_get= acDocBase.TryGetObjectId(ref_handle,out obj_id);
  207.             if (flag_get == false)
  208.             {
  209.                 return result;
  210.             }            
  211.             using (DocumentLock acDockLock = acDoc.LockDocument())
  212.             {
  213.                 using (Transaction acDocTr = acDoc.TransactionManager.StartTransaction())
  214.                 {
  215.                     DBObject get_object = acDocTr.GetObject(obj_id,OpenMode.ForWrite,true);
  216.                     MText xaxa =  (MText)get_object;
  217.                     if (f_h > 0)
  218.                     {
  219.                         result = xaxa.Contents;
  220.                         xaxa.Contents = String.Format("\\pxqc;{0}\\P\\O+{1:F1}\\o", f_name, f_h);
  221.                     }
  222.                     else
  223.                     {
  224.                         xaxa.Contents = String.Format("\\pxqc;{0}\\P\\O{1:F1}\\o", f_name, f_h);
  225.                     }
  226.                     acDocTr.Commit();
  227.                 }
  228.             }
  229.             return result;
  230.         }
  231.         static public string func_edit_text(string f_name, long f_handle)
  232.         {
  233.             string result = null;
  234.             Document acDoc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;
  235.             if (acDoc == null)
  236.             {
  237.                 return result;
  238.             }
  239.             Database acDocBase = acDoc.Database;
  240.             Editor acDocEdit = acDoc.Editor;
  241.  
  242.             Handle ref_handle = new Handle(f_handle);
  243.             ObjectId obj_id = ObjectId.Null;
  244.             Boolean flag_get = acDocBase.TryGetObjectId(ref_handle, out obj_id);
  245.             if (flag_get == false)
  246.             {
  247.                 return result;
  248.             }
  249.             using (DocumentLock acDockLock = acDoc.LockDocument())
  250.             {
  251.                 using (Transaction acDocTr = acDoc.TransactionManager.StartTransaction())
  252.                 {
  253.                     DBObject get_object = acDocTr.GetObject(obj_id, OpenMode.ForWrite, true);
  254.                     MText xaxa = (MText)get_object;
  255.                     result = xaxa.Contents;
  256.                     string txt_ka = "н.д.";
  257.                     xaxa.Contents = String.Format("\\pxqc;{0}\\P\\O{1}\\o", f_name, txt_ka);
  258.                     acDocTr.Commit();
  259.                 }
  260.             }
  261.             return result;
  262.         }
  263.     }
  264. }
  265.  
форма FRM_GENERAL.cs
Код - C# [Выбрать]
  1. using System;
  2. using System.IO;
  3. using System.Collections.Generic;
  4. using System.ComponentModel;
  5. using System.Data;
  6. using System.Drawing;
  7. using System.Linq;
  8. using System.Text;
  9. using System.Windows.Forms;
  10.  
  11.  
  12. namespace proekt1
  13. {
  14.     public partial class FRM_GENERAL : Form
  15.     {
  16.         // Объявляем переменные
  17.         public int[] ptk_id; // id марки
  18.         public string[] ptk_name; // имя марки
  19.         public double[] ptk_h; // высота маркиs
  20.         public long[] ptk_objid;
  21.  
  22.         public int[] pt1_id; // id марки
  23.         public string[] pt1_name; // имя марки
  24.         public double[] pt1_h; // высота марки
  25.         public long[] pt1_long;
  26.  
  27.         public int[] pt2_id; // id марки
  28.         public string[] pt2_name; // имя марки
  29.         public double[] pt2_h; // высота марки
  30.         public Color n_color;
  31.  
  32.         public Boolean[] flag_edit;
  33.        
  34.         public FRM_GENERAL()
  35.         {
  36.             InitializeComponent();
  37.         }
  38.  
  39.         private void FRM_GENERAL_Load(object sender, EventArgs e)
  40.         {
  41.             textBox1.Text = "Строка для откладки программы разработчиком";
  42.             textBox2.Text = "70";
  43.             textBox3.Text = "70";
  44.             button1.Tag = "button1";
  45.             button2.Tag = "button2";
  46.             comboBox1.Items.Add("Желтый");
  47.             comboBox1.Items.Add("Красный");
  48.             comboBox1.Items.Add("Синий");
  49.             comboBox1.Items.Add("Зеленый");
  50.             comboBox1.Items.Add("Голубой");
  51.             comboBox2.Items.Add("Желтый");
  52.             comboBox2.Items.Add("Красный");
  53.             comboBox2.Items.Add("Синий");
  54.             comboBox2.Items.Add("Зеленый");
  55.             comboBox2.Items.Add("Голубой");
  56.             button1.Click += new EventHandler(fnc_btn1);
  57.             button2.Click += new EventHandler(fnc_btn1);
  58.  
  59.             n_color = Color.FromArgb(5, 255, 10);
  60.             pictureBox1.BackColor = n_color;
  61.             pictureBox2.BackColor = n_color;
  62.            
  63.  
  64.         }
  65.         public void fnc_select_color(Object sender, EventArgs e)
  66.         {
  67.            
  68.         }
  69.         public void fnc_btn1(object sender, EventArgs e)
  70.         {
  71.             var vr_butt = (Button)sender;
  72.             if(vr_butt.Tag == "button1")
  73.             {
  74.                 // проверка введенных даных пользователем!!! НЕ ЗАБЫТЬ
  75.  
  76.                 // Код для кнопки нулевого цикла
  77.                 // открываем диалоговое окно выбора текстового файла с данными
  78.                 openFileDialog1.Filter = "txt files (*.txt) |*.txt";
  79.                 openFileDialog1.ShowDialog();
  80.                 if (openFileDialog1.FileName == null)
  81.                 {
  82.                     return;
  83.                 }
  84.                 // считываем данные из файла
  85.                 FileStream fl1_pth = new FileStream(openFileDialog1.FileName, FileMode.Open, FileAccess.Read);
  86.                 StreamReader fl1_reader = new StreamReader(fl1_pth);
  87.                 String txt_read_f1 = fl1_reader.ReadToEnd();
  88.                 fl1_reader.Close();
  89.                 String[] txt_mas_f1 = txt_read_f1.Split(new Char[]{ '\t', '\n' });
  90.                 // определяем размерность массива
  91.                 int i = 1;
  92.                 int ii = 0;
  93.                 int length_mas = txt_mas_f1.Length / 2;
  94.                 // инициализируем главные массивы данных
  95.                 ptk_id = new int[length_mas];
  96.                 ptk_name = new string[length_mas];
  97.                 ptk_h = new double[length_mas];
  98.                // ptk_objid = new long[length_mas];
  99.                 ptk_objid = new long[length_mas];
  100.                 // определяем десятичный разделитель системы
  101.                 Char separator = System.Globalization.CultureInfo.CurrentCulture.NumberFormat.CurrencyDecimalSeparator[0];
  102.                
  103.                 Hide(); // скрываем главную форму работаем в автокаде
  104.  
  105.                 // Делаем активный слой осадочные марки, если его нет то создаем его
  106.                
  107.                
  108.                 foreach (String vr in txt_mas_f1)
  109.                 {
  110.                     if (i % 2 == 1)
  111.                     {
  112.                         if (vr == "" || vr == " " || vr == null)
  113.                         {
  114.  
  115.                         }
  116.                         else
  117.                         {
  118.                         Class1.func_rename_new("осадочные марки", comboBox1.SelectedIndex);
  119.                         ptk_id[ii] = ii;
  120.                         ptk_name[ii] = vr;
  121.                         // создаем окружность осадочной марки на чертеже
  122.                         Class1.func_new_circle(vr, Convert.ToInt16(textBox2.Text));
  123.                         }
  124.                        
  125.                     }else{
  126.                         Class1.func_rename_new("текст осадочной марки", comboBox2.SelectedIndex);
  127.                         string aaa = vr.Replace(',', separator);
  128.                         ptk_h[ii] = Convert.ToDouble(aaa);
  129.                         textBox1.Text += Environment.NewLine;
  130.                         textBox1.Text += "id : " + ptk_id[ii] + " name : " + ptk_name[ii] + " h : " + ptk_h[ii];
  131.                        
  132.                         // создаем текст высотной отметки и получаем данные
  133.                         long vr_data = Class1.func_new_text(ptk_name[ii], vr, Convert.ToInt16(textBox3.Text));
  134.                         // long vr_data = Class1.func_new_text(ptk_name[ii], vr, Convert.ToInt16(textBox3.Text));
  135.                         ptk_objid[ii] = vr_data;
  136.                         ii++;
  137.                         textBox1.Text += Environment.NewLine;
  138.                         textBox1.Text += "vr data : " + vr_data;
  139.                     }
  140.                     i++;
  141.                 }
  142.                     // открываем форму
  143.                     Show();
  144.                     // записываем готовую массив
  145.                     saveFileDialog1.Filter = "текстовый файл (*.txt) | *.txt";
  146.                     saveFileDialog1.ShowDialog();
  147.                     if (saveFileDialog1.FileName == null)
  148.                     {
  149.                         return;
  150.                     }
  151.                     FileStream fstream1;
  152.                     if (checkBox1.Checked == true)
  153.                     {
  154.                         fstream1 = new FileStream(saveFileDialog1.FileName, FileMode.Append);
  155.                     }
  156.                     else {
  157.                         fstream1 = new FileStream(saveFileDialog1.FileName, FileMode.Create, FileAccess.Write);
  158.                     }
  159.                     StreamWriter sw1 = new StreamWriter(fstream1);
  160.                     string vr_for = null;
  161.                     for (int for_i = 0; for_i < length_mas; for_i++)
  162.                     {
  163.                         vr_for = null;
  164.                        
  165.                       //  vr_for = Convert.ToString(ptk_id[for_i]) + "\t" + Convert.ToString(ptk_name[for_i]) + "\t" + Convert.ToString(ptk_h[for_i]) + "\t" + ptk_objid[for_i];
  166.                         vr_for = String.Format("{0}\t{1}\t{2}\t{3}", ptk_id[for_i], ptk_name[for_i], ptk_h[for_i], ptk_objid[for_i]);
  167.                         sw1.WriteLine(vr_for);
  168.                     }
  169.                     sw1.Close();
  170.             }
  171.             if (vr_butt.Tag == "button2")
  172.             {
  173.                 openFileDialog1.Filter = "txt files (*.txt) |*.txt";
  174.                 openFileDialog1.ShowDialog();
  175.                 if (openFileDialog1.FileName == null)
  176.                 {
  177.                     return;
  178.                 }
  179.                 // считываем данные из файла
  180.                 FileStream fl1_pth = new FileStream(openFileDialog1.FileName, FileMode.Open, FileAccess.Read);
  181.                 StreamReader fl1_reader = new StreamReader(fl1_pth);
  182.                 String txt_read_f1 = fl1_reader.ReadToEnd();
  183.                 fl1_reader.Close();
  184.  
  185.                 String[] txt_mas_f1 = txt_read_f1.Split(new Char[] { '\t', '\n' });
  186.  
  187.                 int i = 1;
  188.                 int ii = 0;
  189.  
  190.                 pt1_id = new int[txt_mas_f1.Length / 4];
  191.                 pt1_h = new double[txt_mas_f1.Length / 4];
  192.                 pt1_name = new string[txt_mas_f1.Length / 4];
  193.                 pt1_long = new long[txt_mas_f1.Length / 4];
  194.  
  195.                 foreach(String vr_data1 in txt_mas_f1)
  196.                 {
  197.                     switch (i)
  198.                     {
  199.                         case 1:
  200.                             if (vr_data1 == null || vr_data1=="" || vr_data1==" ")
  201.                             {
  202.  
  203.                             }
  204.                             else {
  205.                             if (vr_data1 != "") {
  206.                             pt1_id[ii] = Convert.ToInt16(vr_data1);
  207.                             textBox1.Text += Environment.NewLine + "ok1 = " + vr_data1 + " - " + pt1_id[ii];
  208.                             }
  209.                             }
  210.                             break;
  211.                         case 2:
  212.                            
  213.                             pt1_name[ii] = vr_data1;
  214.                             textBox1.Text += Environment.NewLine + "ok2 = " + vr_data1 + " - " + pt1_name[ii];
  215.                             break;
  216.                         case 3:
  217.                            
  218.                             pt1_h[ii] = Convert.ToDouble(vr_data1);
  219.                             textBox1.Text += Environment.NewLine + "ok3 = " + vr_data1 + " - " + pt1_h[ii];
  220.                             break;
  221.                         case 4:
  222.                             pt1_long[ii] = Int64.Parse(vr_data1);
  223.                                                        
  224.                             textBox1.Text += Environment.NewLine + "ok4 = " + vr_data1 + " - " + pt1_long[ii];
  225.                            
  226.                             i = 0;
  227.  
  228.                             textBox1.Text += Environment.NewLine;
  229.                             ii++;
  230.                             break;
  231.                     }
  232.                     i++;
  233.                 }
  234.                 openFileDialog1.Filter = "txt files (*.txt) |*.txt";
  235.                 openFileDialog1.ShowDialog();
  236.                 if (openFileDialog1.FileName == null)
  237.                 {
  238.                     return;
  239.                 }
  240.                 // считываем данные из файла
  241.                 FileStream fl2_pth = new FileStream(openFileDialog1.FileName, FileMode.Open, FileAccess.Read);
  242.                 StreamReader fl2_reader = new StreamReader(fl2_pth);
  243.                 String txt_read_f2 = fl2_reader.ReadToEnd();
  244.                 fl2_reader.Close();
  245.  
  246.                 String[] txt_mas_f2 = txt_read_f2.Split(new Char[] { '\t', '\n' });
  247.  
  248.                 i = 1;
  249.                 ii = 0;
  250.  
  251.                 pt2_id = new int[txt_mas_f2.Length / 2];
  252.                 pt2_h = new double[txt_mas_f2.Length / 2];
  253.                 pt2_name = new string[txt_mas_f2.Length / 2];
  254.                 Char separator = System.Globalization.CultureInfo.CurrentCulture.NumberFormat.CurrencyDecimalSeparator[0];
  255.                 string aaa;
  256.                 foreach (String vr_data2 in txt_mas_f2)
  257.                 {
  258.                     switch (i)
  259.                     {
  260.                         case 1:
  261.                             if (vr_data2 == null || vr_data2=="" || vr_data2==" ")
  262.                             {
  263.  
  264.                             }
  265.                             else
  266.                             {
  267.  
  268.                             textBox1.Text += "case1 ii = " + ii + " i = " + i;
  269.                             pt2_name[ii] = vr_data2;
  270.                            
  271.                             }
  272.                             break;
  273.                         case 2:
  274.                             aaa = vr_data2.Replace(',', separator);
  275.                             pt2_h[ii] = Convert.ToDouble(aaa);
  276.                             // pt2_h[ii] = Convert.ToDouble(vr_data2);
  277.                             textBox1.Text += "case2 ii = " + ii + " i = " + i;
  278.                             i = 0;
  279.                             ii++;
  280.                             break;
  281.                     }
  282.                     i++;
  283.                 }
  284.                 Double razn = new double();
  285.                 flag_edit = new Boolean[pt1_id.Length];
  286.                 Hide();
  287.                 for (i = 0; i < pt2_name.Length; i++)
  288.                 {
  289.                    
  290.                     for (ii = 0; ii < pt1_name.Length; ii++)
  291.                     {
  292.                        
  293.                         if (pt1_name[ii] == pt2_name[i])
  294.                         {
  295.                             flag_edit[ii] = true;
  296.                             textBox1.Text += Environment.NewLine + "yes : " + pt1_name[ii];
  297.                             textBox1.Text += Environment.NewLine + " | " + pt2_h[i] + " | " + pt1_h[ii];
  298.                             razn = Math.Round((pt2_h[i] - pt1_h[ii]) * 1000,2);
  299.                             textBox1.Text += Environment.NewLine + " - text edit - " + Class1.func_edit_text(razn, pt2_name[i], pt1_long[ii]);
  300.                         }
  301.                     }
  302.                 }
  303.                 for (i = 0; i < pt1_name.Length; i++)
  304.                 {
  305.                     if (flag_edit[i] != true & checkBox2.Checked==false)
  306.                     {
  307.                         Class1.func_edit_text(pt1_name[i], pt1_long[i]);
  308.                     }
  309.                 }
  310.                 Show();
  311.             }
  312.         }
  313.  
  314.         private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
  315.         {
  316.             Color n_color;
  317.             switch (comboBox1.SelectedIndex)
  318.             {
  319.                 case 0:
  320.                     n_color = Color.FromArgb(255,255,1);
  321.                     break;
  322.                 case 1:
  323.                     n_color = Color.FromArgb(255, 1, 1);
  324.                     break;
  325.                 case 2:
  326.                     n_color = Color.FromArgb(1, 2, 255);
  327.                     break;
  328.                 case 3:
  329.                     n_color = Color.FromArgb(1, 255, 1);
  330.                     break;
  331.                 case 4:
  332.                     n_color = Color.FromArgb(1, 255, 255);
  333.                     break;
  334.                 default:
  335.                     n_color = Color.FromArgb(5, 255, 10);
  336.                     break;
  337.             }
  338.             ComboBox cmb_vr = (ComboBox)sender;
  339.  
  340.             if (cmb_vr.Tag == "1")
  341.             {
  342.                 switch (comboBox1.SelectedIndex)
  343.                 {
  344.                     case 0:
  345.                         n_color = Color.FromArgb(255, 255, 1);
  346.                         break;
  347.                     case 1:
  348.                         n_color = Color.FromArgb(255, 1, 1);
  349.                         break;
  350.                     case 2:
  351.                         n_color = Color.FromArgb(1, 2, 255);
  352.                         break;
  353.                     case 3:
  354.                         n_color = Color.FromArgb(1, 255, 1);
  355.                         break;
  356.                     case 4:
  357.                         n_color = Color.FromArgb(1, 255, 255);
  358.                         break;
  359.                     default:
  360.                         n_color = Color.FromArgb(5, 255, 10);
  361.                         break;
  362.                 }
  363.                 pictureBox1.BackColor = n_color;
  364.             }
  365.             else
  366.             {
  367.                 switch (comboBox2.SelectedIndex)
  368.                 {
  369.                     case 0:
  370.                         n_color = Color.FromArgb(255, 255, 1);
  371.                         break;
  372.                     case 1:
  373.                         n_color = Color.FromArgb(255, 1, 1);
  374.                         break;
  375.                     case 2:
  376.                         n_color = Color.FromArgb(1, 2, 255);
  377.                         break;
  378.                     case 3:
  379.                         n_color = Color.FromArgb(1, 255, 1);
  380.                         break;
  381.                     case 4:
  382.                         n_color = Color.FromArgb(1, 255, 255);
  383.                         break;
  384.                     default:
  385.                         n_color = Color.FromArgb(5, 255, 10);
  386.                         break;
  387.                 }
  388.                 pictureBox2.BackColor = n_color;
  389.             }
  390.            
  391.            
  392.  
  393.         }
  394.  
  395.         private void label4_Click(object sender, EventArgs e)
  396.         {
  397.             label4.ForeColor = Color.FromArgb(255, 5, 5);
  398.         }
  399.     }
  400. }
  401.  

Оффлайн zmk.autocadАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 64
  • Карма: 0
вот во вложениях пример фала нулевого цикла и первого, а также сам dll файл.
Механизм работы программы:
- при нажатии разместить осадочные марки выбираете файл 0 цикла и размещаете марки. затем сохраняете готовый нулевой цикл, в котором сохранены handle на текстовые поля.
- при нажатии выполнить отклонения button2.Click сначала выбираете готовый нулевой цикл с handle который был сохранен после размещения марок, а затем 1 цикл в данном случае.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Я не буду критиковать стиль программирования, хотя думаю, что нужно бы его подправить (например, switch вместо цепочки if). Но мне не нравится ни постановка задачи (если это можно назвать постановкой задачи), ни её реализация. Всё это нормально решается блоками с атрибутами, что резко упрощает задачу и снимает необходимость хранить метки примитивов, если считать, что M1, M2 и т.д - это уникальные номера точек. Но думаю, что трёх сделанных в этой теме намёков на блок с атрибутами вполне достаточно. Больше не буду настаивать. :)
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн RevitTormentor

  • ADN OPEN
  • ***
  • Сообщений: 162
  • Карма: 6
Цитата: zmk.autocad от 22-04-2015, 17:42:44
Извини за тупость, но я все равно не понимаю как извлечь строковое представление форматирования?
Поиск в гугле находит ответ за секунду: тынц.

Дано: 2 размера в шаблоне, у каждого свой стиль. (или мультивыноски со своими стилями)
Задача: Создаю размер RotatedDimension к нему нужно применить один из стилей которые есть в шаблоне.

В ответе по ссылке, взять стиль с заранее созданного объекта, это ведь не имелось ввиду строчка acMText.SetDatabaseDefaults();?
Я так понимаю по ссылке строчка acMText.SetDatabaseDefaults(); это параметры по умолчанию в том числе и стиль из базы.

Лучше стиль для размера лучше создавать программно, шаблон может и не подгрузиться по разным причинам? Чтобы разобраться со стилями всё-таки хочу взять стиль с готового объекта и, немного его подкорректировав, применить к вновь создаваемому размеру или другому объекту.

Вопрос 1: А как извлечь размерный стиль по имени?
Вопрос 2: Как извлечь стиль из шаблона dwt, который лежит как ресурс?


Спасибо
« Последнее редактирование: 01-01-2018, 20:49:33 от RevitTormentor »

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Один вопрос - одна тема. И очень подробненько.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение