|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
Автопостроение линии поверх указанной, но длинее на заданную величину
Регистрация: 31.01.2017
Сообщений: 10
|
||
Просмотров: 8902
|
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450
|
На каком языке пишем?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
КЖ; C# Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,616
|
Этого делать не буду. Могу подсказать и направить, в рамках данного раздела форума. Делать работу за Вас, это в поиск исполнителей.
В рамках раздела Программирование, могу помочь Вам вспомнить то, чему Вас учили для того, что бы Вы сами написали нужное Вам ПО. Итак Паскаль. Наиболее простой для Вас путь, это 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,616
|
Цитата:
Понятно, что для себя я написал бы что-то типа: Код:
Вспомнил про видеокурс по VBA: http://adn-cis.org/forum/index.php?topic=7270.0 Последний раз редактировалось Boxa, 02.02.2017 в 11:51. Причина: ссылку добавил |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
С помощью команд "Копировать" и "Увеличить"
Код:
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
КИПиА Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
![]() |
Boxa
>>Алгоритм примерно такой: >>Где в этом алгоритме можно налажать не представляю, но если будет не получаться, спрашивайте. Однако налажать получилось. Агоритм не соответствует тому что описано в стартовом посте. Кроме того все делается через зад. Какие нафиг углы переносы и повороты? Так чтоб прогрузить ядрышки и забить мегабайты? |
|||
![]() |
|
||||
КЖ; C# Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,616
|
Цитата:
![]() или Вы про работу с прямоугольниками? То до них еще не добрались, начали с малого. Цитата:
Проехать из города в город на мерседесе сможет и новичок, но только профессионал сможет это сделать на старом, ржавом и убитом ведре. Намек понятен? |
|||
![]() |
|
||||
КИПиА Регистрация: 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,616
|
Цитата:
т.е. не предлагал новичку писать на С# и пользоваться матрицами и трансформациями. Но вот в Вашем предложение операции над векторами для новичка самое то, Вы привыкли к питону, но в 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,616
|
Ещё раз.я не предлагал никому разбираться с матрицами поворота.я предложил максимально понятный, ручной алгоритм в сообщение #7. Зачем Вы искажает мои слова?
Среднестатистическому пользователю автокада более понятны шаги: создать линию нужной длины, повернуть линию и передвинуть линию. Я Вас понял. У нас несколько разный подход к простоте, к сожалению мои коллеги мат аппаратом не пользуются и им проще объяснить именно так как я сделал. Видимо окружение накладывает свой отпечаток. Спорить не о чем Последний раз редактировалось Boxa, 02.02.2017 в 19:38. |
|||
![]() |
|
||||
КИПиА Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
![]() |
Вы предлагали взять линию, повернуть, перенести... Мы та знаем что там внутри этих операций скрыто
>>Какие нафиг углы переносы и повороты? Так чтоб прогрузить ядрышки и забить мегабайты? Я придираюсь к оптимальности по вычислительной нагрузке. Вместо нескольких элементарных операций предлагается в космос слетать. Еще и в безапелляционной манере, типа проще не бывает. бывает. |
|||
![]() |
|
||||
КЖ; C# Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,616
|
Цитату пожалуйста. (#18 сообщение не приводить, т.к. оно в части понятности лишь дубляж #14).
Я и не оспариваю, что чистая математика менее ресурсоемка, где я такое писал? Метафора про машины, была про то, что новичку , с моей точки зрения, проще подход автокадчика и на начальных этапах освоения программирования можно о ресурсах не думать. Всему свое время. |
|||
![]() |
|
||||
КИПиА Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
![]() |
Я изначально не увидел Length+1.5",0,0 поэтому
>>Где в этом алгоритме можно налажать не представляю, но если будет не получаться, спрашивайте. воспринял в штыки. Уже извинился. Часто тут вижу подобные решения - чтоб получить чтото элементарное предлагается делать совсем не элементарное... Простейшие геометрические представления у местных обитателей должны быть, без них каши не сваришь Последний раз редактировалось zamtmn, 02.02.2017 в 20:59. |
|||
![]() |
|
||||
КЖ; C# Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,616
|
Давеча тут один конструктор вершину параболы брутфорсом искал, а Вы про вектора...
Дальше будет ещё лучше, сам так привык к библиотекам, что не сразу сообразил что от векторов можно к флоутам перейти. Тем временем автор топика молчит ЗЫ. поправьте очипятку. Последний раз редактировалось Boxa, 03.02.2017 в 06:27. Причина: ЗЫ добавил |
|||
![]() |
|
||||
Регистрация: 31.01.2017
Сообщений: 10
|
Всем спасибо за бурное обсуждени! Всё очень интересно и захватывающе, но имеет место быть жуткая нехватка времени это воплотить в жизнь, к сожалению.
Если кто поможет написать, то я смогу потестить или может даже потом доработать. Заранее благодарю! |
|||
![]() |
|
||||
Регистрация: 31.01.2017
Сообщений: 10
|
Попробовал скрипт из поста #10, линия отрисовывается длиной на 3" больше, но со смещением вверх и влево, а не поверх исходной (это если линия горизонтальная или наклонная). Если вертикальная, то отрисовка происходит справа на расстоянии 60.5". Если по грани прямоугольника клацнкть, то рисует копию прямоугольника справа на расстоянии 5.5".
Спасибо большое уважаемому VVA! Еще бы поправить так, чтоб работало правильно, особенно важно чтоб вдоль стороны прямоугольника работало! Заранее благодарю! |
|||
![]() |
|
||||
Я тоже давно писал на турбо паскале, но VBA даже не пытался учить. сейчас постепенно постигаю .net
С точки зрения начала, Lisp будет проще, и функционал весьма богатый. Предлагаю лисповский алгоритм. (не командный) 1 получаем объект entsel 2 анализируем выбранный объект (отрезок, полилиния) и начинаем ветвление (предполагаю будет cond) 3,1 для отрезка получаем начальную конечную точку, 3,2 для полилинии (тут бы проверить bulge) получаем начало конец сегмента (см функции vlax-curve-get...) 4. считаем новые точки с помоoщю (polar pt1 ang dist) 5. строим отрезок/полилинию по полученным точкам. тут же забить слой/цвет/вкус/запах либо по объекту хозяина, либо "как надо" В дальнейшем весь код можно зациклить на выборе объекта для удобства... имхо, чем крут Lisp - куски кода можно тестить прямо в командной строке и не надо никаких энейблеров. А изучение COM-модели с помощью (vlax-dump-object (vlax-get-acad-object)) и дальше вниз по иерархии - дико удобно.
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы... |
||||
![]() |
![]() |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Можно ли назначить красные линии, имея только КПТ? | 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 |