If else не устанавливает значение

Автор Тема: If else не устанавливает значение  (Прочитано 3519 раз)

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

Тема содержит сообщение с Решением. Нажмите здесь чтобы посмотреть его.

Оффлайн AtomohodАвтор темы

  • ADN OPEN
  • ****
  • Сообщений: 453
  • Карма: 1
Здравствуйте!
Не срабатывает установка размеров из списка в зависимости от пользовательского ввода через if else. В чем я неправ?
Код - C# [Выбрать]
  1.     public class FormatsHandler
  2.        {
  3.             static double height;
  4.             static double width;
  5.      
  6.             static List<Format> listOfFormats = new List<Format>()
  7.           {
  8.           new Format(){ formatID="A4", height=297, width=210},// все в портретной ориентации
  9.           new Format(){ formatID="A3", height=420, width=297},
  10.           new Format(){ formatID="A2", height=594, width=420},
  11.           new Format(){ formatID="A1", height=841, width=594},
  12.           new Format(){ formatID="A0", height=1189, width=841}
  13.           };
  14.      
  15.             //Points of inner frame
  16.             Point2d keyPoint1 = new Point2d(-width + 25, height - 10);
  17.             Point2d keyPoint2 = new Point2d(0, height - 10);
  18.             Point2d keyPoint3 = new Point2d(0, 0);
  19.             Point2d keyPoint4 = new Point2d(-width + 25, 0);
  20.             //Points of outer frame
  21.             Point2d frPoint1 = new Point2d(-width + 5, height - 5);
  22.             Point2d frPoint2 = new Point2d(5, height - 5);
  23.             Point2d frPoint3 = new Point2d(5, -5);
  24.             Point2d frPoint4 = new Point2d(-width + 5, -5);
  25.      
  26.      
  27.             [CommandMethod("2Insert title")]
  28.      
  29.             public static void DrawTitles()
  30.             {
  31.                 Format curFormat = GetDataFromUser();
  32.      
  33.      
  34.                 if (curFormat.formatID == "A3" && curFormat.orientation == "Portrait" && curFormat.type == "Title")
  35.                 {
  36.                     height = listOfFormats[1].height;
  37.                     width = listOfFormats[1].width;
  38.                 }
  39.                 else if(curFormat.formatID == "A3" && curFormat.orientation == "Landscape" && curFormat.type == "Title")
  40.                 {
  41.                     height = listOfFormats[1].width;
  42.                     width = listOfFormats[1].height;
  43.                 }
  44.      
  45.     //                else if (curFormat.formatID == "A2" && curFormat.orientation == "Portrait" && curFormat.type == "Title")
  46.     //                {
  47.     //                height = listOfFormats[2].height;
  48.     //                width = listOfFormats[2].width;
  49.     //                }
  50.     //else
  51.     //            {
  52.     //                height = listOfFormats[2].width;
  53.     //                width = listOfFormats[2].height;
  54.     //            }
  55.      
  56.      
  57.                
  58.      
  59.      
  60.      
  61.                 FormatsHandler fh = new FormatsHandler();
  62.                 fh.DrawMainTitle();
  63.      
  64.             }
  65.      
  66.             public static Format GetDataFromUser()
  67.             {
  68.                 Document acDoc = Application.DocumentManager.MdiActiveDocument;
  69.      
  70.                 //Выбрать формат
  71.                 PromptKeywordOptions chFormat = new PromptKeywordOptions("\nChoose format: ");
  72.      
  73.                 chFormat.Keywords.Add("A4");
  74.                 chFormat.Keywords.Add("A3");
  75.                 chFormat.Keywords.Add("A2");
  76.                 chFormat.Keywords.Add("A1");
  77.                 chFormat.Keywords.Add("A0");
  78.                 chFormat.AllowNone = false;
  79.      
  80.                 PromptResult formatID = acDoc.Editor.GetKeywords(chFormat);
  81.                 //Application.ShowAlertDialog("The name entered was: "+formatID.StringResult);
  82.      
  83.                 //Установить кратность
  84.                 PromptStringOptions chMultiplier = new PromptStringOptions("\nSet multiplier: ");
  85.                 chMultiplier.AllowSpaces = false;
  86.                 PromptResult multiplier = acDoc.Editor.GetString(chMultiplier);
  87.      
  88.      
  89.                 // Установить ориентацию
  90.                 PromptKeywordOptions chOrient = new PromptKeywordOptions("\nSet orientation: ");
  91.      
  92.                 chOrient.Keywords.Add("Portrait");
  93.                 chOrient.Keywords.Add("Landscape");
  94.                 chOrient.Keywords.Default = "Landscape";
  95.                 chOrient.AllowNone = false;
  96.      
  97.                 PromptResult orientation = acDoc.Editor.GetKeywords(chOrient);
  98.      
  99.      
  100.                 // Установить тип
  101.                 PromptKeywordOptions chType = new PromptKeywordOptions("\nSet type: ");
  102.      
  103.                 chType.Keywords.Add("Title");
  104.                 chType.Keywords.Add("Regular");
  105.                 chType.Keywords.Default = "Regular";
  106.                 chType.AllowNone = false;
  107.      
  108.                 PromptResult type = acDoc.Editor.GetKeywords(chType);
  109.      
  110.      
  111.                 Format curFormat = new Format()
  112.                 {
  113.                     formatID = formatID.ToString(),
  114.                     multiplier = int.Parse(multiplier.StringResult),
  115.                     orientation = orientation.ToString(),
  116.                     type = type.ToString()
  117.                 };
  118.      
  119.                 return curFormat;
  120.      
  121.             }
  122.      
  123.             public void DrawMainTitle()
  124.             {
  125.      
  126.             }
  127.      

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: If else не устанавливает значение
« Ответ #1 : 25-05-2018, 23:40:28 »
Команда не может содержать пробел в имени.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн AtomohodАвтор темы

  • ADN OPEN
  • ****
  • Сообщений: 453
  • Карма: 1
Re: If else не устанавливает значение
« Ответ #2 : 25-05-2018, 23:58:44 »
Благодарю за отклик. Имя команды записал без пробела, но это не решило проблему. Координаты по-прежнему совсем не те. Может я неправильно организовал выбор и надо было через switch ? команда с жестким указанием высоты и ширины без условий выбора отрабатывала корректно.


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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: If else не устанавливает значение
« Ответ #3 : 26-05-2018, 00:09:29 »
Запусти под отладчиком и смотри по какой ветке идёт выполнение кода. Разбираться в этой простыне с экрана смартфона то ещё удовольствие...
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн AtomohodАвтор темы

  • ADN OPEN
  • ****
  • Сообщений: 453
  • Карма: 1
Re: If else не устанавливает значение
« Ответ #4 : 26-05-2018, 00:30:08 »
Попробую.

Оффлайн AtomohodАвтор темы

  • ADN OPEN
  • ****
  • Сообщений: 453
  • Карма: 1
Re: If else не устанавливает значение
« Ответ #5 : 26-05-2018, 21:02:14 »
Под отладчиком увидел, что после прохождения if else переменные обнуляются и if else ничего не присваивает. В переменные координат ключевых точек приходит ноль, НО почему?




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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: If else не устанавливает значение
« Ответ #6 : 26-05-2018, 21:47:37 »
Не занимайся ерундой. Вычисляй точки тогда, когда они нужны. В твоём случае есть вариант их вычисления в конструкторе класса.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Отмечено как Решение Atomohod 29-05-2018, 21:18:20

Оффлайн AtomohodАвтор темы

  • ADN OPEN
  • ****
  • Сообщений: 453
  • Карма: 1
Re: If else не устанавливает значение
« Ответ #7 : 26-05-2018, 22:03:24 »
их вычисления в конструкторе класса.
В конструкторе class FormatsHandler, и не создавать экземпляры Point2d заранее, я правильно понял?

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: If else не устанавливает значение
« Ответ #8 : 26-05-2018, 22:19:14 »
Atomohod,
Да. Как вариант. Хотя мне вообще не нравится манера вызывать конструктор класса из метода этого же класса, как это у тебя делается.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн AtomohodАвтор темы

  • ADN OPEN
  • ****
  • Сообщений: 453
  • Карма: 1
Re: If else не устанавливает значение
« Ответ #9 : 26-05-2018, 22:31:39 »
вызывать конструктор класса из метода этого же класса, как это у тебя делается
А как тогда его переделать? Где можно посмотреть пример?

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: If else не устанавливает значение
« Ответ #10 : 26-05-2018, 23:40:18 »
Пример чего? В любом случае это вопрос изучения программирования и к использованию AutoCAD .NET API отношения не имеет.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн AtomohodАвтор темы

  • ADN OPEN
  • ****
  • Сообщений: 453
  • Карма: 1
Re: If else не устанавливает значение
« Ответ #11 : 27-05-2018, 00:51:37 »
Цитировать
вызывать конструктор класса из метода этого же класса, как это у тебя делается
Пример правильной структуры построения программы. То есть что за чем должно следовать, в каком порядке, что откуда вызывается. Язык предоставляет несколько возможностей реализации похожих действий и какое нужно предпочитать в каждой ситуации я не знаю как определить.

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: If else не устанавливает значение
« Ответ #12 : 29-05-2018, 01:16:15 »
Пример правильной структуры построения программы. То есть что за чем должно следовать, в каком порядке, что откуда вызывается. Язык предоставляет несколько возможностей реализации похожих действий и какое нужно предпочитать в каждой ситуации я не знаю как определить.
Нет единого сценария. Каждый выбирает для себя.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение