|
||
| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
нарисовать полилинию из списка с координатами точек (lisp)
проектирование противооползневых сооружений
Yalta
Регистрация: 06.04.2007
Сообщений: 50
|
||
Просмотров: 24035
|
|
||||
Еще примеры
Код:
Код:
__________________
Как использовать код на Лиспе читаем здесь |
||||
![]() |
|
||||
проектирование противооползневых сооружений Регистрация: 06.04.2007
Yalta
Сообщений: 50
![]() |
Вот этот код - то что надо, но у меня не получается свой список в него вписать. У меня просто уже создан список (присвоен переменной), а как его применить относительно этого кода - непонятно. Список состоит из точечных пар, то есть первый элемент списка выглядет примерно так: (18820.53521278781,12841.22697685545) и таких элементов в списке от 20ти до 50ти. Можно ли его как то привязать к вышеуказанному коду?
PS VVA за код с созданием объекта - спасибо, но это для моего понимания слишком сложно, а то что я не понимаю, стараюсь не использовать. |
|||
![]() |
|
||||
А понимать не обязательно, можно просто использовать
Код:
__________________
Как использовать код на Лиспе читаем здесь |
||||
![]() |
|
||||
проектирование противооползневых сооружений Регистрация: 06.04.2007
Yalta
Сообщений: 50
![]() |
Цитата:
|
|||
![]() |
|
||||
опа... а что это за функция такая, а то я её описание ни где не нашёл, ни в тырнете, ни у Полещука, не то чтобы сама функция была мне интересна, я пользуюсь ru-pline-entmake в общих случаях и тупо (entmake) в частных.
Может там ещё много чего интересного в ACET-ах есть?
__________________
Почему все вдруг становятся умными, когда уже не надо? |
||||
![]() |
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,537
|
|
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,388
|
Цитата:
Sample\VisualLISP\activex\al-tst.lsp Sample\VisualLISP\activex\vla-tst.lsp Sample\VisualLISP\activex\vla-tst.prj Каждый может попробовать. Можно и ent-функции проверить. Можно и в компилированном виде. Я когда-то проверял. . Эти программы выполняют одинаковую работу (рисуют 2000 полилиний, изменяют их цвет и удаляют), но разными методами, с фиксацией затраченного времени. AL-TST использует функции command и entmod, а VLA-TST — функции ActiveX. Результаты (конечно, разные на различных компьютерах) показывают, что функции ActiveX работают значительно быстрее. На очень "слабом" компьютере, специально используемом нами для тестирования, получены результаты: AL-TST — 206.8 сек (13.141 сек на "хорошем" компьютере) VLA-TST — 143.79 сек. (5.61 сек на "хорошем" компьютере) При замене в al.lsp (command "_.PLINE"…) на (entmake…) получаем результаты: AL-TST — 115.95 сек (6.812 сек на "хорошем" компьютере) Естественно, что вариант с функцией command показывает худшие результаты. Иного и не могло быть, так как AutoCAD должен анализировать (неизвестный заранее) поток данных, передаваемый в виде аргументов функции. При использовании функции entmake передаются уже известные структуры данных, близкие к внутреннему представлению, и процесс идет гораздо быстрее. При использовании объектной модели данные передаются в виде уже совсем близком к внутреннему представлению (через Visual LISP) и в "готовом к употреблению" виде при использовании VBA. Некоторое замедление дает цепочка посредников при передаче данных через интерфейсы различных объектов. Именно это дает действительное или кажущееся отставание. На высокопроизводительных машинах накладные расходы будут менее заметны. В использование ActiveX дает выигрыш в производительности. Ну, и если уж стали демонстрировать разные коды, показывают тот, который всегда использую: Код:
Есть и аналогичная (ru-3d-pline-add points is_closed lineweight ltype). Отличается только использованием vla-add3dpoly Последний раз редактировалось ShaggyDoc, 12.02.2011 в 16:45. |
|||
![]() |
|
||||
Цитата:
Код:
Код:
__________________
Почему все вдруг становятся умными, когда уже не надо? |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,490
|
Ну, чтобы окончательно запутать ситуацию, можно еще посмотреть http://autolisp.ru/2009/09/22/programming-style/ - я там тоже некоторые "исследования" проводил
![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,537
|
Вот еще интересно как влияет на быстродействие версия када на одной системе...
Попробовал вот такую функцию, найденную в инете, на звкаде, впал в уныние... entmake в несколько раз быстрее, чем vla- Код:
Цитата:
Последний раз редактировалось gomer, 13.02.2011 в 00:57. |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,388
|
Так многое зависит от методики и от правильности самой тестовой программы. Например, если в цикле делается несколько вызовов
Код:
Код:
А зачем, например, vla-get-Block вставлен? Конечно, такой вызов будет работать медленнее, чем простенький entmake. Ну и вообще тесты делаются, чтобы доказать желаемый для себя результат, а не найти истину. |
|||
![]() |
|
||||
В свое время, я так же делал обширные тесты по быстродействию различных методов. Результаты были еще интереснее, некоторые методы быстрее через vla, а некоторые через entmak, entmod... Т.е нет идеального выбора. В своей практике, я пошел по упрощенному пути выбора - если необходимо просто создать объект, без изменений свойств, например линию в текущем слое, текущего цвета итд, то я частенько использую vla-add*, если же необходимо еще и добавить новый слой и в него вставить линию, изменить цвет, тип линии - я уже иду через entmakex - так быстрее, короче по коду и нагляднее в программе.
Самый наглядный пример, это серия функций vlax-curve*. В справке написано, что они работают только с vla объектами, но это не правда! В эти функции можно передавать ename представление элементов. Самое интересное, что если передавать именно ename, то скорость вырастает в разы... Мой совет, хотите найти самый быстрый путь - все проверяйте. Нет однозначного ответа на этот вопрос. ps. Я выбрал мешанину из обоих путей, т.е в одной программе, у меня используются оба метода.
__________________
Чем гениальнее ваш план, тем меньше людей с ним будут согласны. /Сунь Цзы/ |
||||
![]() |
|
||||
А затем, чтоб полилиния создавалась в активном пространстве, так же как это будет при entmake
заменив Код:
Код:
И entmake не простенький, там ещё tranc-иться всё постоянно, чтоб сравниваемые функции были идентичными.
__________________
Почему все вдруг становятся умными, когда уже не надо? |
||||
![]() |
|
||||
Проектировщик Регистрация: 14.08.2011
Екатеринбург
Сообщений: 58
![]() |
VVA
Подскажи пожалуйста, зачем в посте номер 3 вы использовали функцию trans? полдня голову ломаю))) одно предположение есть только: для того что бы избавится от проблем если в системе переменная ELEVATION отлична от нуля. |
|||
![]() |
|
||||
В ту функцию точки передаются в текущей UCS.
__________________
Сообщество программистов Autodesk в СНГ - техническая поддержка |
||||
![]() |
|
||||
UCS - это ПСК. WCS - это МСК. Данная функция считает, что точки передаются ей в текущей ПСК (current UCS)
__________________
Сообщество программистов Autodesk в СНГ - техническая поддержка |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,490
|
Из ExpressTools
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 23.11.2011
Сообщений: 175
|
Подскажите, пожалуйста, как изменить только одну из координат точки в http://forum.dwg.ru/showpost.php?p=700954&postcount=22 ? Значение поправки должно запрашиваться для каждого участка полилинии.
|
|||
![]() |
|
||||
Регистрация: 23.11.2011
Сообщений: 175
|
Голова поломалась. Запутался в строке вусмерть.
Код:
Дальше вообще запутался: аргументы (setq pN) какие ? (cons p pN) ? А что тогда (setq pN (cons p pN) p вот это ? |
|||
![]() |
|
||||
Это СПИСОК точек
Цитата:
Если раздражает, можно и убрать
__________________
Как использовать код на Лиспе читаем здесь |
||||
![]() |
|
||||
Регистрация: 23.11.2011
Сообщений: 175
|
VVA, благодарю за разъяснение. Резиновая линия на этапе отладки даже помогает.
Из палок и глины получилось вот что: Код:
Иногда воспринимает оффсет через одну точку Иногда игнорирует смещение для отдельной точки "Засечки" резиновой линии проставляются с задаваемым смещением (файл 1.jpg), посторенная полилиния странная (файл 2.jpg) - смещения задавались 50 и 100, но в одном случае не отработало. Черетж1.dwg: Белая самая длинная - оригинал, о которого откладывалось смещение. Для жёлтой полилинии задавал смещение 50, 100 по очереди, последние три значения смещения были 100. Красная полилиния - начал не с первой точки оригинала, те же 100 и 50 для смещения, в одной точке смыкается с оригиналом. Нижняя белая полилиния - ход экспериментов, но смыкание с оригиналом тоже видно. И как сделать смещение для первой точки, в случае указания всех точек оригинальной полилинии ? Потыкайте, пожалуйста носом, где ошибаюсь. Заранее признателен. |
|||
![]() |
|
||||
Проектирование Регистрация: 06.08.2012
СПб
Сообщений: 163
|
Возможно немного не по теме, но, дабы не создавать отдельную тему, напишу здесь.
Помогите с лиспом. Нужен простейший лисп, который будет рисовать отрезок по заданным длинам проекций X и Y. Например мне нужен отрезок, чтобы проекция по X была 40, а по Y 20.. По функциям, наверно, чтобы было так..: я запускаю лисп и он предлагает указать начальную точку, потом к примеру длину проекции X и далее длину проекции Y.. и всё.. с лиспом не работал уже лет 10 (( всё позабылось.. |
|||
![]() |
|
||||
А зачем для этого лисп? Запускаешь команду ОТРЕЗОК (_LINE), указываешь первую точку, указываешь вторую точку в виде @X,Y (в данном случае @40,20)
__________________
Сообщество программистов Autodesk в СНГ - техническая поддержка |
||||
![]() |
|
||||
Проектирование Регистрация: 06.08.2012
СПб
Сообщений: 163
|
|
|||
![]() |
|
||||
Регистрация: 14.12.2008
Сообщений: 1,072
|
Цитата:
Или по другому: как добавить в полилинию арочные сегменты не используя VLA объекты? |
|||
![]() |
|
||||
В этой функции нет. Там нужно использовать понятие кривизны (bulge, dxf группа 42) Polyline Bulges
Функции для работы с кривизной можно взять у Lee Mac'a Bulge Conversion Functions
__________________
Как использовать код на Лиспе читаем здесь |
||||
![]() |
|
||||
Регистрация: 14.12.2008
Сообщений: 1,072
|
Сделал функцию которая создает LWполилнию из списка точек SpPt и списка радиусов дуг SpArc. Вызывается функция следующим образом:
Код:
Сама функция такая: Код:
Последний раз редактировалось МишаИнженер, 07.04.2023 в 16:05. |
|||
![]() |
|
||||
это из серии обс. в последних версиях на протяжении лет 5+ (vl-load-com) ваще загружать не нужно для выполнения vl* функций, коды с их использованием грузятся и исполняются на 123. другое дело реакторы (в хелпере так и прописаны реакторы вначале, а потом туман про некоторые другие функции), но ведь для отрисовки плиниии они и не нужны...
__________________
K Lisp |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,490
|
МишаИнженер, rArc - это у тебя что? Радиус? Так этого мало для определения корректной кривизны.
Нет конечно.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,490
|
Значит отключай приложения по одному - найдешь основной тормоз. А потом код приложения на форум - может, и разберем.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,388
|
Это детские суеверия.
А замедляют работы многочисленные последовательные вызовы функции setq. Это ведь не "оператор присваивания", а именно функция, которую и загрузить надо, и проанализировать пары аргументов на корректность. |
|||
![]() |
|
||||
Регистрация: 14.12.2008
Сообщений: 1,072
|
Чтобы увидеть эффект торможения поставьте время автосохранения 5м и откройте одновременно 5 разных файлов. Запустите любой инструмент в котором есть строка (vl-load-com) (При этом, я так подозреваю в память Автокада кроме нужных функций загрузится всякий, неоптимизированный и неотлаженный мусор, который выгрузить уже нельзя) Через 5 минут АвтоКад начнет дико тормозить, потому что при каждом сохранении файла Автокад выполняет перекомпиляцию всех загруженных проектов и инструментов. Так было при использовании загруженных файлов *.dvb. Стоит загрузить хоть один файл *.dvb и время сохранения файлов увеличивается примерно раз в 10.
Поэтому у меня появилось правило: если появляется необходимость добавлять строку кода (vl-load-com) дальше программировать практически нет смысла. Приложение получится очень тормозным и "неэффективным" в некотором смысле. Только в особых случаях можно дальше писать код: когда других способов решить проблему не находится. |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,388
|
Глупости. При чем тут dvb и сохранение файлов?
|
|||
![]() |
|
||||
Регистрация: 10.08.2013
Сообщений: 10,742
|
отсюда, наверно)
|
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,388
|
Цитата:
Так и они не нужны для "мишиных задач". |
|||
![]() |
![]() |
|
Опции темы | Поиск в этой теме |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
LISP - 2D полилинию в 3D | Andrej | LISP | 22 | 25.04.2019 11:40 |
Как с помощью LISP нарисовать окно линиями? | Aндрeй | LISP | 13 | 24.06.2011 14:37 |
Как имея массив точек создать полилинию по ним? | emilko | AutoCAD | 9 | 19.06.2009 23:15 |
Lisp: Обработка объектов и получение списка свойств (координаты точек) | Nanotronic | LISP | 2 | 23.04.2009 23:07 |
нарисовать полилинию и запустить макрос VBA | gizmo_zx | Программирование | 8 | 24.12.2008 08:47 |