|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
Поиск в этой теме |
31.01.2017, 21:31 | #1 | |
Автопостроение линии поверх указанной, но длинее на заданную величину
Регистрация: 31.01.2017
Сообщений: 10
|
||
Просмотров: 8609
|
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,849
|
На каком языке пишем?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
КЖ; C# Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,589
|
Этого делать не буду. Могу подсказать и направить, в рамках данного раздела форума. Делать работу за Вас, это в поиск исполнителей.
В рамках раздела Программирование, могу помочь Вам вспомнить то, чему Вас учили для того, что бы Вы сами написали нужное Вам ПО. Итак Паскаль. Наиболее простой для Вас путь, это VBA. т.к. он из той же парадигмы языков, что и Паскаль. По сути, Вам нужно: - установить себе VBA Enabler, - запустить его Alt+F11 (команда _vbaide), - открыть справку (она тут: C:\Program Files\Common Files\Autodesk Shared\ACADAUTO.CHM) и - собрать программу из нескольких примеров. Алгоритм примерно такой: 1 - выбрать объект ThisDrawing.Utility.GetEntity (Или выбор множества объектов SelectionSet) --- Получить от выбранного объекта: Длину (Length), угол поворота относительно осиХ (Angle), стартовую точку (StartPoint). 2 - создать новую линию --- ThisDrawing.ModelSpace.AddLine(StartPoint1, EndPoint1), где : StartPoint1 - точка с координатами (-1.5",0,0); EndPoint1 - точка с координатами (Length+1.5",0,0) 3 - повернуть объект относительно базовой точки, метод acadLine.Rotate BasePoint, RotationAngle; где BasePoint - точка (0,0,0), а угол поворота Angle из п.1 4 - переместить объект, метод acadLine.Move Point1, Point2; где Point1 - (0,0,0) , Point2 - StartPoint из п.1 Собственно все. Где в этом алгоритме можно налажать не представляю, но если будет не получаться, спрашивайте. |
|||
|
||||
КЖ; C# Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,589
|
Цитата:
Понятно, что для себя я написал бы что-то типа: Код:
Вспомнил про видеокурс по VBA: http://adn-cis.org/forum/index.php?topic=7270.0 Последний раз редактировалось Boxa, 02.02.2017 в 11:51. Причина: ссылку добавил |
|||
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,992
|
С помощью команд "Копировать" и "Увеличить"
Код:
__________________
Как использовать код на Лиспе читаем здесь |
|||
|
||||
КИПиА Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
|
Boxa
>>Алгоритм примерно такой: >>Где в этом алгоритме можно налажать не представляю, но если будет не получаться, спрашивайте. Однако налажать получилось. Агоритм не соответствует тому что описано в стартовом посте. Кроме того все делается через зад. Какие нафиг углы переносы и повороты? Так чтоб прогрузить ядрышки и забить мегабайты? |
|||
|
||||
КЖ; C# Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,589
|
Цитата:
или Вы про работу с прямоугольниками? То до них еще не добрались, начали с малого. Цитата:
Проехать из города в город на мерседесе сможет и новичок, но только профессионал сможет это сделать на старом, ржавом и убитом ведре. Намек понятен? |
|||
|
||||
КИПиА Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
|
>>Как скажите...
я про алгоритм из #7 там явно нехватает шагов, т.к. повернутая линия длиной 3" переносится на исходную линию. невижу в каком пункте она стала длинее исходной на 1.5" с каждой стороны. >>Я старался описывать практически "ручной" подход, т.к. считаю, что это максимально понятно "Понятно" кончается в #9 - матрицы, трансформации... Это самые страшные для новичка вещи)) >>С удовольствием прочитаю описания более простого и понятного для новичка метода. голая арифметика. P1 и P2 - точки исходной линии dP=P2-P1 //линия в виде "вектора" L=1.5*нормализованя(dP)=1.5*(dP/length(dP)) //получаем вектор длиной 1.5 в "направлении" линии P1=P1-L // новая точка начала P2=P2+L // новая точка конца >>Проехать из города в город на мерседесе...Намек понятен? Образ абсолютно неправильный. Дело не в ведре. Я предлагаю ехать оптимальным путем, вы едете по пути который знаете. Я проеду 1км, вы 500. В данном случае ваше решение будет даже не в разы хуже, а на порядки ----- добавлено через ~3 мин. ----- >>точка с координатами (Length+1.5",0,0) Извиняюсь, претензия снимается Последний раз редактировалось zamtmn, 03.02.2017 в 12:57. |
|||
|
||||
КЖ; C# Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,589
|
Цитата:
т.е. не предлагал новичку писать на С# и пользоваться матрицами и трансформациями. Но вот в Вашем предложение операции над векторами для новичка самое то, Вы привыкли к питону, но в VBA с этим все намного печальнее. Попробуйте написать Ваш алгоритм на vba и посмотрите насколько он будет проще. Вы предлагаете в первом классе, на уроках арифметики изучать матрицы... Последний раз редактировалось Boxa, 02.02.2017 в 19:12. |
|||
|
||||
КИПиА Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
|
>>Попробуйте написать Ваш алгоритм на vba и посмотрите насколько он будет проще.
У меня не алгоритм, у меня несколько арифметических действий дающих нужный результат. VBA я ниразу в жизни не видел - хотите сказать что там нет арифметики для флоатов? >>По поводу векторов, Вы привыкли к питону, но в VBA с этим все намного печальнее. Попробуйте написать Ваш алгоритм на vba и посмотрите насколько он будет проще. Я привык к паскалю. dP=P2-P1 и dPx=P2x-P1x dPy=P2y-P1y dPz=P2z-P1z вобщемто одно и тоже если я правильно понимаю о чем вы. >>Вы предлагаете в первом классе, на уроках арифметики изучать матрицы... )) ниче не предлагаю. Среднестатистический человек гораздо проще поймет вектора на пальцах, чем матрицы поворота, да еще и не вокруг 0,0,0 и трансформацию векторов этими матрицами Вы в курсе что сидит внутри Gem.Matrix3d.Rotation(line.Angle, ed.CurrentUserCoordinateSystem.CoordinateSystem3d.Zaxis, line.StartPoint)? >>3 - повернуть объект относительно базовой точки, метод acadLine.Rotate >>4 - переместить объект, метод acadLine.Move это тоже самое, другими словами. Такой подход к вычислениям очень ресурсоемкий |
|||
|
||||
КЖ; C# Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,589
|
Ещё раз.я не предлагал никому разбираться с матрицами поворота.я предложил максимально понятный, ручной алгоритм в сообщение #7. Зачем Вы искажает мои слова?
Среднестатистическому пользователю автокада более понятны шаги: создать линию нужной длины, повернуть линию и передвинуть линию. Я Вас понял. У нас несколько разный подход к простоте, к сожалению мои коллеги мат аппаратом не пользуются и им проще объяснить именно так как я сделал. Видимо окружение накладывает свой отпечаток. Спорить не о чем Последний раз редактировалось Boxa, 02.02.2017 в 19:38. |
|||
|
||||
КИПиА Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
|
Вы предлагали взять линию, повернуть, перенести... Мы та знаем что там внутри этих операций скрыто
>>Какие нафиг углы переносы и повороты? Так чтоб прогрузить ядрышки и забить мегабайты? Я придираюсь к оптимальности по вычислительной нагрузке. Вместо нескольких элементарных операций предлагается в космос слетать. Еще и в безапелляционной манере, типа проще не бывает. бывает. |
|||
|
||||
КЖ; C# Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,589
|
Цитату пожалуйста. (#18 сообщение не приводить, т.к. оно в части понятности лишь дубляж #14).
Я и не оспариваю, что чистая математика менее ресурсоемка, где я такое писал? Метафора про машины, была про то, что новичку , с моей точки зрения, проще подход автокадчика и на начальных этапах освоения программирования можно о ресурсах не думать. Всему свое время. |
|||
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Можно ли назначить красные линии, имея только КПТ? | Modis | Прочее. Архитектура и строительство | 13 | 15.09.2016 08:55 |
Autocad 2010. При наложении линии поверх другой, очертание линий не видно. | abcdlv | AutoCAD | 13 | 02.11.2012 12:56 |
Толщина засечки размерной линии на строительных чертежах | Hooliganka | Поиск литературы, чертежей, моделей и прочих материалов | 51 | 01.06.2012 07:27 |
Как сгладить 2 линии. Или как сгладить только часть линии. | Димас | AutoCAD | 3 | 14.03.2006 08:28 |