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

ADN Club => AutoCAD .NET API => Тема начата: Алексей (IdeaSoft) от 16-03-2016, 22:14:46

Название: Периметр штриховки
Отправлено: Алексей (IdeaSoft) от 16-03-2016, 22:14:46
Хорошо, что есть этот форум. Много полезного и главное оперативно решаются вопросы.

Все стандартные элементы (Line, Acr, polyline, Spline, Ellipse, Circle, Hatch)
имеют методы расчетов площади или периметра или длины.

Только вот у Hatch как рассчитать периметр?
Он же может состоять различной конфигурации - как смесь графических образов.
Название: Re: Периметр штриховки
Отправлено: Александр Ривилис от 16-03-2016, 22:23:31
Вопрос задан в правильном разделе?
Название: Re: Периметр штриховки
Отправлено: Алексей (IdeaSoft) от 16-03-2016, 22:27:31
Ой, вообще этот вопрос нужно перенести в раздел AutoCAD .NET API
У меня есть полномочия или возможность переносить. Или удалить и создать в другом разделе?
А все нашел внизу справа перенос вопроса.
Название: Re: Периметр штриховки
Отправлено: Александр Ривилис от 16-03-2016, 22:31:53
Периметр имеет смысл только для границы штриховки. Соотвественно нужно эту границу получить, а затем посчитать её длину.
Название: Re: Периметр штриховки
Отправлено: Александр Ривилис от 16-03-2016, 22:44:55
Заодно глянь эту статью: Периметр штриховки с помощью ObjectARX и .NET API (http://adn-cis.org/perimetr-shtrixovki-s-pomoshhyu-objectarx-i-.net-api.html)
Название: Re: Периметр штриховки
Отправлено: Алексей (IdeaSoft) от 17-03-2016, 00:11:41
Заодно глянь эту статью:
Протестировал этот пример кода. Где-то не до конца все считает. Ошибается на 6,5% - это существенно.

В примере чертежа периметр площадки = 14,9 ед. а периметр штриховки (в сумме внутр и внешний) = 13.8 ед.
Прикрепляю картинку.
(https://adn-cis.org/forum/proxy.php?request=http%3A%2F%2Fs11.postimg.org%2Fkiewapisv%2Fimage_Hatch.jpg&hash=801b0abed6b6d77ced4e27d47ca8de30) (http://postimg.org/image/kiewapisv/)

и dwg-файл c примером.
 
Название: Re: Периметр штриховки
Отправлено: Алексей (IdeaSoft) от 17-03-2016, 00:25:02
Нашел ошибку в этом примере в строке 71

if( d <= 1e-5 ) {...}

Величину d нужно брать по модулю, а то она же может быть отрицательной.
Если округлять до 2 знака после запятой то периметры равны 14,9=14,9 ед.

Название: Re: Периметр штриховки
Отправлено: Александр Ривилис от 17-03-2016, 00:28:44
Величину d нужно брать по модулю, а то она же может быть отрицательной.
Я правильно понял, что теперь у тебя значения периметров совпали?
Название: Re: Периметр штриховки
Отправлено: Алексей (IdeaSoft) от 17-03-2016, 00:36:38
Спасибо большое за пример!
Да теперь значения совпали. Исправил конечно же 14,9 периметр.

Строка 71 примера кода
вот этого http://adn-cis.org/perimetr-shtrixovki-s-pomoshhyu-objectarx-i-.net-api.html
в втором фрагменте.
В первом фрагменте кода это строка 93
Название: Re: Периметр штриховки
Отправлено: Александр Ривилис от 17-03-2016, 00:42:45
Отлично. Отправил автору сообщение о найденной ошибке: http://adndevblog.typepad.com/autocad/2012/04/perimeter-of-a-hatch-using-objectarx-and-autocad-net-api.html#comment-6a0167607c2431970b01bb08c9ddf0970d
Ну и у нас исправил. Спасибо за найденную ошибку!