Сообщество программистов Autodesk в СНГ

ADN Club => AutoCAD .NET API => Тема начата: sash-2007 от 10-10-2018, 09:56:30

Название: PromptSelectionResult выдает ERROR
Отправлено: sash-2007 от 10-10-2018, 09:56:30
Здравствуйте
подскажите пожалуйста по каким причинам   

 
Код - C# [Выбрать]
  1. PromptSelectionResult selRes = ed.SelectWindow(point1, point2);

selRes  содержит  ERROR
Название: Re: PromptSelectionResult выдает ERROR
Отправлено: Привалов Дмитрий от 10-10-2018, 11:47:56
selRes  содержит  ERROR
без подробностей не угадать, напиши что значит "содержит ошибки"?
не компилируется, вылетает в процессе работы с ошибкой, или в selRes ошибочные данные?

Функция работает в пределах экрана, ты произвел зуммирование экрана перед запуском функции?
Название: Re: PromptSelectionResult выдает ERROR
Отправлено: Александр Ривилис от 10-10-2018, 12:40:09
Здравствуйте
подскажите пожалуйста по каким причинам   

 
Код - C# [Выбрать]
  1. PromptSelectionResult selRes = ed.SelectWindow(point1, point2);

selRes  содержит  ERROR
1. Прочитай у меня в подписи о правиле форматирования кода на форуме и соблюдай его.
2. point1 и point2 - это точки в ПСК (UCS). Если они за пределами видимой области или в рамку ничего не попадает, то будет ERROR
3. Если ed.SelectXXX запускается из контекста приложения (например, из немодального окна или палитры), то будет ERROR.
Название: Re: PromptSelectionResult выдает ERROR
Отправлено: sash-2007 от 10-10-2018, 12:46:48
программа   для парсинга  файла  .nc1  (текла)
в автокад (2010)

Код - C# [Выбрать]
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Windows.Forms;
  9.  
  10. using Autodesk.AutoCAD.ApplicationServices;
  11. using Autodesk.AutoCAD.DatabaseServices;
  12. using Autodesk.AutoCAD.EditorInput;
  13. using Autodesk.AutoCAD.Runtime;
  14. using Autodesk.AutoCAD.Geometry;
  15.  
  16.  
  17.  
  18.     public partial class WindowSetting : Form
  19.     {
  20.         public WindowSetting()
  21.         {
  22.             InitializeComponent();
  23.         }
  24.  
  25.         Document acDoc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocumen;
  26.         Database acCurDb = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Database;
  27.         Editor ed = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor;
  28.  
  29.  
  30.        
  31.         private void button1_Click(object sender, EventArgs e)
  32.         {
  33.             string filepath = "";
  34.  
  35.             OpenFileDialog OPF = new OpenFileDialog();
  36.             if (OPF.ShowDialog() == DialogResult.OK)
  37.             {
  38.                 filepath = OPF.FileName;
  39.  
  40.                 string s = System.IO.File.ReadAllText(filepath);
  41.  
  42.                 int poz1 = s.IndexOf("AK\r\n  v");
  43.                 string Text_v = s.Substring(0,  poz1);
  44.  
  45.                 string[] words = Text_v.Split(new char[] { '\n' });
  46.  
  47.                 double dlinna =  Convert.ToDouble(words[10].Trim());
  48.                 double peremichka = Convert.ToDouble(words[11].Trim());
  49.                 double polka = Convert.ToDouble(words[12].Trim());
  50.  
  51.                 #region risovanie balki
  52.                 using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction())
  53.                 {
  54.                     // Открытие таблицы Блоков для чтения
  55.                     BlockTable acBlkTbl;
  56.                     acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId,
  57.                                                   OpenMode.ForRead) as BlockTable;
  58.  
  59.                     // Открытие записи таблицы БЛоков для записи
  60.                     BlockTableRecord acBlkTblRec;
  61.                     acBlkTblRec = acTrans.GetObject(acBlkTbl[BlockTableRecord.ModelSpace],
  62.                                                     OpenMode.ForWrite) as BlockTableRecord;
  63.  
  64.                             // polka nijnya    
  65.  
  66.                     Line acLine1 = new Line();
  67.                     acLine1.SetDatabaseDefaults();
  68.                     acLine1.StartPoint = new Point3d(0.0, 0.0, 0.0);
  69.                     acLine1.EndPoint = new Point3d(0.0, polka, 0.0);
  70.                     acBlkTblRec.AppendEntity(acLine1);
  71.                     acTrans.AddNewlyCreatedDBObject(acLine1, true);
  72.  
  73.  
  74.                     Line acLine2 = new Line();
  75.                     acLine2.SetDatabaseDefaults();
  76.                     acLine2.StartPoint = new Point3d(0, polka, 0.0);
  77.                     acLine2.EndPoint = new Point3d(dlinna, polka, 0.0);
  78.                     acBlkTblRec.AppendEntity(acLine2);
  79.                     acTrans.AddNewlyCreatedDBObject(acLine2, true);
  80.  
  81.  
  82.  
  83.  
  84.                     Line acLine3 = new Line();
  85.                     acLine3.SetDatabaseDefaults();
  86.                     acLine3.StartPoint = new Point3d(dlinna, polka, 0.0);
  87.                     acLine3.EndPoint = new Point3d(dlinna, 0.0, 0.0);
  88.                     acBlkTblRec.AppendEntity(acLine3);
  89.                     acTrans.AddNewlyCreatedDBObject(acLine3, true);
  90.  
  91.  
  92.                     Line acLine4 = new Line();
  93.                     acLine4.SetDatabaseDefaults();
  94.                     acLine4.StartPoint = new Point3d(dlinna, 0.0, 0.0);
  95.                     acLine4.EndPoint = new Point3d(0.0,0.0, 0.0);
  96.                     acBlkTblRec.AppendEntity(acLine4);
  97.                     acTrans.AddNewlyCreatedDBObject(acLine4, true);
  98.  
  99.                         // peremichka
  100.  
  101.                     Line acLine5 = new Line();
  102.                     acLine5.SetDatabaseDefaults();
  103.                     acLine5.StartPoint = new Point3d(0,polka + 500, 0.0);
  104.                     acLine5.EndPoint = new Point3d(0, polka + 500 + peremichka, 0.0);
  105.                     acBlkTblRec.AppendEntity(acLine5);
  106.                     acTrans.AddNewlyCreatedDBObject(acLine5, true);
  107.  
  108.  
  109.  
  110.                     Line acLine6 = new Line();
  111.                     acLine6.SetDatabaseDefaults();
  112.                     acLine6.StartPoint = new Point3d(0, polka + 500 + peremichka, 0.0);
  113.                     acLine6.EndPoint = new Point3d(dlinna, polka + 500 + peremichka, 0.0);
  114.                     acBlkTblRec.AppendEntity(acLine6);
  115.                     acTrans.AddNewlyCreatedDBObject(acLine6, true);
  116.  
  117.  
  118.  
  119.  
  120.                     Line acLine7 = new Line();
  121.                     acLine7.SetDatabaseDefaults();
  122.                     acLine7.StartPoint = new Point3d(dlinna, polka + 500 + peremichka, 0.0);
  123.                     acLine7.EndPoint = new Point3d(dlinna, polka + 500 , 0.0);
  124.                     acBlkTblRec.AppendEntity(acLine7);
  125.                     acTrans.AddNewlyCreatedDBObject(acLine7, true);
  126.  
  127.  
  128.  
  129.                     Line acLine8 = new Line();
  130.                     acLine8.SetDatabaseDefaults();
  131.                     acLine8.StartPoint = new Point3d(dlinna, polka + 500, 0.0);
  132.                     acLine8.EndPoint = new Point3d(0.0, polka + 500, 0.0);
  133.                     acBlkTblRec.AppendEntity(acLine8);
  134.                     acTrans.AddNewlyCreatedDBObject(acLine8, true);
  135.  
  136.  
  137.                             // polka verhnya
  138.  
  139.                     Line acLine9 = new Line();
  140.                     acLine9.SetDatabaseDefaults();
  141.                     acLine9.StartPoint = new Point3d(0.0, (polka + peremichka + 1000), 0.0);
  142.                     acLine9.EndPoint = new Point3d(0.0, (polka + peremichka + 1000) + polka, 0.0);
  143.                     acBlkTblRec.AppendEntity(acLine9);
  144.                     acTrans.AddNewlyCreatedDBObject(acLine9, true);
  145.  
  146.  
  147.                     Line acLine10 = new Line();
  148.                     acLine10.SetDatabaseDefaults();
  149.                     acLine10.StartPoint = new Point3d(0.0, (polka + peremichka + 1000) + polka, 0.0);
  150.                     acLine10.EndPoint = new Point3d(dlinna, (polka + peremichka + 1000) + polka, 0.0);
  151.                     acBlkTblRec.AppendEntity(acLine10);
  152.                     acTrans.AddNewlyCreatedDBObject(acLine10, true);
  153.  
  154.                     Line acLine11 = new Line();
  155.                     acLine11.SetDatabaseDefaults();
  156.                     acLine11.StartPoint = new Point3d(dlinna, (polka + peremichka + 1000) + polka, 0.0);
  157.                     acLine11.EndPoint = new Point3d(dlinna, (polka + peremichka + 1000) , 0.0);
  158.                     acBlkTblRec.AppendEntity(acLine11);
  159.                     acTrans.AddNewlyCreatedDBObject(acLine11, true);
  160.  
  161.  
  162.  
  163.                     Line acLine12 = new Line();
  164.                     acLine12.SetDatabaseDefaults();
  165.                     acLine12.StartPoint = new Point3d(dlinna, (polka + peremichka + 1000), 0.0);
  166.                     acLine12.EndPoint = new Point3d(0.0, (polka + peremichka + 1000), 0.0);
  167.                     acBlkTblRec.AppendEntity(acLine12);
  168.                     acTrans.AddNewlyCreatedDBObject(acLine12, true);
  169.  
  170.                     acTrans.Commit();
  171.                 }
  172.  
  173.  
  174.                 ed.UpdateScreen();
  175.                 #endregion
  176.  
  177.                  poz1 = s.IndexOf("BO\r\n");
  178.                int   poz2 = s.IndexOf("EN\r\n");
  179.                string Text2 = s.Substring(poz1, poz2 - poz1);
  180.  
  181.                string[] stroki = Text2.Split(new char[] { '\n' });
  182.  
  183.                #region  search "  o  "
  184.                for (int i =0; i < stroki.Length ;i++ )
  185.                {
  186.                    if (stroki[i].StartsWith("  o  "))
  187.                    {
  188.                        string strokaO = stroki[i];
  189.  
  190.                        strokaO = strokaO.Replace("s", "");
  191.                        strokaO = strokaO.Replace("o", "");
  192.                        strokaO = strokaO.Replace("v", "");
  193.                        strokaO = strokaO.Replace("u", "");
  194.                        strokaO = strokaO.Replace("\r", "");
  195.  
  196.                        string[] koord = strokaO.Split(new char[] { ' ' });
  197.                        List<string> numbers = new List<string>() { };
  198.  
  199.                        for (int k = 0; k < koord.Length; k++ )
  200.                        {
  201.                            if (koord[k] != "" )
  202.                            {
  203.                                numbers.Add(koord[k]);
  204.                            }
  205.                        }
  206.  
  207.  
  208.                        double x = Convert.ToDouble(numbers[0].Trim());
  209.                        double y = Convert.ToDouble(numbers[1].Trim());
  210.                        double diam = Convert.ToDouble(numbers[2].Trim());
  211.  
  212.                        using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction())
  213.                        {
  214.                            // Открытие таблицы Блоков для чтения
  215.                            BlockTable acBlkTbl;
  216.                            acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId,
  217.                                                          OpenMode.ForRead) as BlockTable;
  218.  
  219.                            // Открытие записи таблицы БЛоков для записи
  220.                            BlockTableRecord acBlkTblRec;
  221.                            acBlkTblRec = acTrans.GetObject(acBlkTbl[BlockTableRecord.ModelSpace],
  222.                                                            OpenMode.ForWrite) as BlockTableRecord;
  223.  
  224.                          
  225.                            Circle cir = new Circle();
  226.                            cir.SetDatabaseDefaults();
  227.                            cir.Center = new Point3d(x, y + 1000 + polka + peremichka, 0.0);
  228.                            cir.Radius = diam / 2;
  229.                            acBlkTblRec.AppendEntity(cir);
  230.                            acTrans.AddNewlyCreatedDBObject(cir, true);
  231.  
  232.                            acTrans.Commit();
  233.                        }
  234.  
  235.  
  236.                    }
  237.  
  238.                }
  239.                #endregion
  240.  
  241.                #region search "  u  "
  242.                for (int i = 0; i < stroki.Length; i++)
  243.                {
  244.                    if (stroki[i].StartsWith("  u  "))
  245.                    {
  246.                        string strokaO = stroki[i];
  247.  
  248.                        strokaO = strokaO.Replace("s", "");
  249.                        strokaO = strokaO.Replace("o", "");
  250.                        strokaO = strokaO.Replace("v", "");
  251.                        strokaO = strokaO.Replace("u", "");
  252.                        strokaO = strokaO.Replace("\r", "");
  253.  
  254.                        string[] koord = strokaO.Split(new char[] { ' ' });
  255.                        List<string> numbers = new List<string>() { };
  256.  
  257.                        for (int k = 0; k < koord.Length; k++)
  258.                        {
  259.                            if (koord[k] != "")
  260.                            {
  261.                                numbers.Add(koord[k]);
  262.                            }
  263.                        }
  264.  
  265.  
  266.                        double x = Convert.ToDouble(numbers[0].Trim());
  267.                        double y = Convert.ToDouble(numbers[1].Trim());
  268.                        double diam = Convert.ToDouble(numbers[2].Trim());
  269.  
  270.                        using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction())
  271.                        {
  272.                            // Открытие таблицы Блоков для чтения
  273.                            BlockTable acBlkTbl;
  274.                            acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId,
  275.                                                          OpenMode.ForRead) as BlockTable;
  276.  
  277.                            // Открытие записи таблицы БЛоков для записи
  278.                            BlockTableRecord acBlkTblRec;
  279.                            acBlkTblRec = acTrans.GetObject(acBlkTbl[BlockTableRecord.ModelSpace],
  280.                                                            OpenMode.ForWrite) as BlockTableRecord;
  281.  
  282.  
  283.                            Circle cir = new Circle();
  284.                            cir.SetDatabaseDefaults();
  285.                            cir.Center = new Point3d(x, y, 0.0);
  286.                            cir.Radius = diam / 2;
  287.                            acBlkTblRec.AppendEntity(cir);
  288.                            acTrans.AddNewlyCreatedDBObject(cir, true);
  289.  
  290.                            acTrans.Commit();
  291.                        }
  292.  
  293.  
  294.                    }
  295.  
  296.                }
  297.                #endregion
  298.  
  299.                #region search  "  v  "
  300.  
  301.                for (int i = 0; i < stroki.Length; i++)
  302.                {
  303.                    if (stroki[i].StartsWith("  v  "))
  304.                    {
  305.                        string strokaO = stroki[i];
  306.  
  307.                        strokaO = strokaO.Replace("s", "");
  308.                        strokaO = strokaO.Replace("o", "");
  309.                        strokaO = strokaO.Replace("v", "");
  310.                        strokaO = strokaO.Replace("u", "");
  311.                        strokaO = strokaO.Replace("\r", "");
  312.  
  313.                        string[] koord = strokaO.Split(new char[] { ' ' });
  314.                        List<string> numbers = new List<string>() { };
  315.  
  316.                        for (int k = 0; k < koord.Length; k++)
  317.                        {
  318.                            if (koord[k] != "")
  319.                            {
  320.                                numbers.Add(koord[k]);
  321.                            }
  322.                        }
  323.  
  324.  
  325.                        double x = Convert.ToDouble(numbers[0].Trim());
  326.                        double y = Convert.ToDouble(numbers[1].Trim());
  327.                        double diam = Convert.ToDouble(numbers[2].Trim());
  328.  
  329.                        using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction())
  330.                        {
  331.                            // Открытие таблицы Блоков для чтения
  332.                            BlockTable acBlkTbl;
  333.                            acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId,
  334.                                                          OpenMode.ForRead) as BlockTable;
  335.  
  336.                            // Открытие записи таблицы БЛоков для записи
  337.                            BlockTableRecord acBlkTblRec;
  338.                            acBlkTblRec = acTrans.GetObject(acBlkTbl[BlockTableRecord.ModelSpace],
  339.                                                            OpenMode.ForWrite) as BlockTableRecord;
  340.  
  341.  
  342.                            Circle cir = new Circle();
  343.                            cir.SetDatabaseDefaults();
  344.                            cir.Center = new Point3d(x, y+500+polka, 0.0);
  345.                            cir.Radius = diam / 2;
  346.                            acBlkTblRec.AppendEntity(cir);
  347.                            acTrans.AddNewlyCreatedDBObject(cir, true);
  348.  
  349.                            acTrans.Commit();
  350.                        }
  351.  
  352.  
  353.                    }
  354.  
  355.                }
  356.                 #endregion
  357.  
  358.              
  359.              
  360.  
  361.                double pripuskBalki =  Convert.ToDouble(pripusk.Text.Trim());
  362.                int kolichestvoRazbienii = (int)(pripuskBalki / 0.1);
  363.                double DlinnaStart = dlinna / kolichestvoRazbienii;
  364.  
  365.  
  366.                ed.UpdateScreen();
  367.  
  368.              
  369.  
  370.                using (Transaction tr = acCurDb.TransactionManager.StartTransaction())
  371.                {
  372.                    Point3d point1 = new Point3d(4320.0, -350.0, 0.0);
  373.                    Point3d point2 = new Point3d(4780.0, 1900.0, 0.0);
  374.  
  375.                    PromptSelectionResult selRes = ed.SelectWindow(point1, point2);    
  376.                    // здесь selRes содержит ERROR
  377.  
  378.  
  379.                    if (selRes.Status != PromptStatus.OK)
  380.                    {
  381.                        ed.WriteMessage("\nError!\n");
  382.                        return;
  383.                    }
  384.  
  385. }
  386.          }
  387.  
  388.            
  389.  
  390.  
  391.         }
  392.  
  393.  
  394.     }
  395.  
  396.  
  397.  

по команде в автокаде открывается окошко
там  поле ввода припуска и кнопка для открытия файла .nc1
nc1 - это файл  с балкой
припуск задается для усадки балки от сварки (например 2 мм)

далее прорисовываем в автокаде балку( полка+ перемычка+ полка)
далее рисуем отверстия в зависимости от того где они расположены

далее нужно дать припуск на балку
хотел воспользоваться  рамкой выделения ed.SelectWindow(point1, point2); 
выделить все что в рамке и переместить все вправо.

это можно сделать через цикл

но  выделить рамкой не получается
   PromptSelectionResult selRes = ed.SelectWindow(point1, point2);   
selRes содержит ERROR
программа завершается

точки point1 , point2  взял просто для примера
                   


Название: Re: PromptSelectionResult выдает ERROR
Отправлено: sash-2007 от 10-10-2018, 13:21:10
Вот я балда , вторая точка за пределами видимого  экрана оказалась
Спасибо за помощь)
Название: Re: PromptSelectionResult выдает ERROR
Отправлено: Александр Ривилис от 10-10-2018, 13:34:20
sash-2007,
Второе предупреждение по поводу правила форматирования кода. Надеюсь, что третьего не будет!