Последние сообщения

Последние сообщения

Страницы: [1] 2 3 ... 10
1
AutoCAD .NET API / Re: If else не устанавливает значение
« Последний ответ от Atomohod 27-05-2018, 01:51:37 »
Цитировать
вызывать конструктор класса из метода этого же класса, как это у тебя делается
Пример правильной структуры построения программы. То есть что за чем должно следовать, в каком порядке, что откуда вызывается. Язык предоставляет несколько возможностей реализации похожих действий и какое нужно предпочитать в каждой ситуации я не знаю как определить.
2
Пример чего? В любом случае это вопрос изучения программирования и к использованию AutoCAD .NET API отношения не имеет.
3
AutoCAD .NET API / Re: If else не устанавливает значение
« Последний ответ от Atomohod 26-05-2018, 23:31:39 »
вызывать конструктор класса из метода этого же класса, как это у тебя делается
А как тогда его переделать? Где можно посмотреть пример?
4
Atomohod,
Да. Как вариант. Хотя мне вообще не нравится манера вызывать конструктор класса из метода этого же класса, как это у тебя делается.
5
AutoCAD .NET API / Re: If else не устанавливает значение
« Последний ответ от Atomohod 26-05-2018, 23:03:24 »
их вычисления в конструкторе класса.
В конструкторе class FormatsHandler, и не создавать экземпляры Point2d заранее, я правильно понял?
6
Не занимайся ерундой. Вычисляй точки тогда, когда они нужны. В твоём случае есть вариант их вычисления в конструкторе класса.
7
AutoCAD .NET API / Re: If else не устанавливает значение
« Последний ответ от Atomohod 26-05-2018, 22:02:14 »
Под отладчиком увидел, что после прохождения if else переменные обнуляются и if else ничего не присваивает. В переменные координат ключевых точек приходит ноль, НО почему?



8
AutoCAD .NET API / Re: Оффтопик. Изучаем C#
« Последний ответ от Atomohod 26-05-2018, 12:58:25 »
Рамки рисуются каким-то невероятным образом, хотя при жестком указании height и width все отрабатывает нормально. Проблема в том, что нужно изменение поведения программы в зависимости от пользовательского ввода. Пытался реализовать не через if else, а через switch - тоже не срабатывало-я пролетал на default минуя все case, но там хотя бы рисовалась рамка для дефолтного формата, а через if вообще какая-то ерунда.


Может я что-то упустил в структуре программы или не так записал в синтаксисе?
На форуме мне предлагали способ со вставкой форматки из готового блока в dwg, я с ним согласен, но задачу мне поставили по- другому поэтому все надо через dll.
9
AutoCAD .NET API / Re: Оффтопик. Изучаем C#
« Последний ответ от Дмитрий Загорулькин 26-05-2018, 11:56:52 »
Не срабатывает установка размеров из списка в зависимости от пользовательского ввода через if else.
А как проявляется это самое "не срабатывает"?
10
В итоге: что это за индекс я в общем понял и марку я повернул. В моём случае изначально марка смотрит "вверх" (на север или ось Y), а повернуть мне нужно было чтобы она смотрела на стену с внешней стороны. Сделал так (с учётом проблемы поворота на 180 градусов):
Код - C# [Выбрать]
  1. var angle = wallOrientation.AngleTo(XYZ.BasisY);
  2.                     if (Math.Abs(wallOrientation.DotProduct(XYZ.BasisY) - 1) < 0.0001)
  3.                     {
  4.                         // lifehack =))
  5.                         ElementTransformUtils.RotateElement(doc, marker.Id, Line.CreateUnbound(markerPosition, XYZ.BasisZ), Math.PI / 2);
  6.                         ElementTransformUtils.RotateElement(doc, marker.Id, Line.CreateUnbound(markerPosition, XYZ.BasisZ), Math.PI / 2);
  7.                     }
  8.                     else if (Math.Abs(wallOrientation.DotProduct(XYZ.BasisY) - 1) > 0.0001)
  9.                     {
  10.                         if (wallOrientation.Y > 0.0)
  11.                         {
  12.                             if (wallOrientation.X > 0.0)
  13.                             {
  14.                                 ElementTransformUtils.RotateElement(doc, marker.Id, Line.CreateUnbound(markerPosition, XYZ.BasisZ),  -angle);
  15.                                 ElementTransformUtils.RotateElement(doc, marker.Id, Line.CreateUnbound(markerPosition, XYZ.BasisZ), Math.PI / 2);
  16.                                 ElementTransformUtils.RotateElement(doc, marker.Id, Line.CreateUnbound(markerPosition, XYZ.BasisZ), Math.PI / 2);
  17.                             }
  18.                             else ElementTransformUtils.RotateElement(doc, marker.Id, Line.CreateUnbound(markerPosition, XYZ.BasisZ),  Math.PI + angle);
  19.                         }
  20.                         else
  21.                         {
  22.                             if (wallOrientation.X > 0.0)
  23.                                 ElementTransformUtils.RotateElement(doc, marker.Id, Line.CreateUnbound(markerPosition, XYZ.BasisZ), Math.PI - angle);
  24.                             else ElementTransformUtils.RotateElement(doc, marker.Id, Line.CreateUnbound(markerPosition, XYZ.BasisZ), angle);
  25.                         }
  26.                     }
Думаю, не нужно объяснять что такое wallOrientation. На премию "идеальный код" не претендует, зато работает как надо

Единственна проблема остается в том, что изначально никак не узнаешь в какую сторону по умолчанию "смотрит" марка фасада. Т.е. универсально не сделать - только под конкретную марку.

Дальше буду ломать голову с заданием границ вида для фасада (с учётом поворота). Но это уже тема другого вопроса.

Александр Игнатович, спасибо за участие
Страницы: [1] 2 3 ... 10