| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Разное время ssget при разнесенных примитивах и собранных?

Разное время ssget при разнесенных примитивах и собранных?

Ответ
Поиск в этой теме
Непрочитано 14.02.2017, 09:49 #1
Разное время ssget при разнесенных примитивах и собранных?
prajdziswet
 
Регистрация: 30.03.2015
Сообщений: 152

есть два файла
Нажмите на изображение для увеличения
Название: 01.png
Просмотров: 31
Размер:	3.4 Кб
ID:	183665
Нажмите на изображение для увеличения
Название: 02.png
Просмотров: 19
Размер:	4.0 Кб
ID:	183666
один более сгруппированный другой более разнесенный..
ssget показывает разное время?
Нажмите на изображение для увеличения
Название: 03.png
Просмотров: 22
Размер:	118.9 Кб
ID:	183667
можно ли как то ускорить или решить по другому и почему ssget показывает разное время?

Программа на лисп сливает полилинии вместе,
для этого с помощью ssget запрашиваются полилинии по концам проверяемой
Код:
[Выделить все]
 (setq nabor (ssget "_C" pp1 pp2 '((0 . "LWPOLYLINE"))))
- прямоугольником с гранью 0.00005 (это показано для одной точки)
... и так пока цепочки не сольется в одну полилинию
п.с При большом количестве полилиний и получается таких цепочек (время выше показано без учетом слияния и прохождения по цепочке) разница по времени составляет в 2,5 раза (для данных файлов около 4 и 10 минут соответственно ...
ну а асли брать более загроможденные разница достигается - например с 30 минут до 2,5часа (понятно насколько загроможденный файл брать)

почему ssget показывает разное время может можно получить полилинии по другому?

Просмотров: 2593
 
Непрочитано 14.02.2017, 13:41
#2
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,702
Отправить сообщение для Do$ с помощью Skype™


SSGET и наборы очень медленно работают. Если нужно быстродействие, получайте все нужные полилинии чертежа с помощью (ssget "_X" '((0 . "LWPOLYLINE"))) (<- тут могу наврать, пишу по памяти), сразу конвертируйте набор в список и в этом списке ищите состыкованные полилнии функциями AutoLISP.
__________________
Толковый выбор приходит с опытом, а к нему приводит выбор бестолковый. (The Mechanic)
Do$ вне форума  
 
Непрочитано 14.02.2017, 14:01
#3
trir


 
Регистрация: 18.12.2010
Сообщений: 5,047


как я уже говорил, для ускорения поиска лучше строить собственное дерево
https://github.com/rpav/spatial-tree...r/r-trees.lisp
trir вне форума  
 
Автор темы   Непрочитано 14.02.2017, 14:39
#4
prajdziswet


 
Регистрация: 30.03.2015
Сообщений: 152


Цитата:
Сообщение от Do$ Посмотреть сообщение
сразу конвертируйте набор в список и в этом списке ищите состыкованные полилнии функциями AutoLISP
первоначально у меня так и было (брал весь набор полилиний и переводил в список), но так как список очень большой --время выходило вообще космическое (несколько суток, правда я только 1 сутки выдержал ) ,
потом пошел через рекурсию и ssget - время для 180 тыс полилиний уменшилось до полчаса-час

Цитата:
Сообщение от trir Посмотреть сообщение
как я уже говорил, для ускорения поиска лучше строить собственное дерево
эх может и так, спасибо за код, но для этого надо код понять, чтобы адаптировать для себя (а как то 300 строчек кода , проще самому что написать,чем разобраться бывает)

идея конечно есть использовать сортированный список в рекурсии, но неизвестно как поможет...

может еще идеи есть? и так просто интересно почему при разнесенном чертеже время ssget больше? (количество элементов одинаково в чертежах - во втором я просто разнес)
prajdziswet вне форума  
 
Непрочитано 14.02.2017, 14:43
#5
trir


 
Регистрация: 18.12.2010
Сообщений: 5,047


читай
trir вне форума  
 
Непрочитано 14.02.2017, 15:21
#6
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,702
Отправить сообщение для Do$ с помощью Skype™


Может быть, с помощью встроенных методов объединения полилиний побыстрее будет? Гляньте Pl-Join из пакета PL-Tools: https://dwg.ru/dnl/607
__________________
Толковый выбор приходит с опытом, а к нему приводит выбор бестолковый. (The Mechanic)
Do$ вне форума  
 
Непрочитано 14.02.2017, 20:58
#7
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,653


Еще есть Chain Selection от Lee Mac.
skkkk вне форума  
 
Автор темы   Непрочитано 15.02.2017, 13:47
#8
prajdziswet


 
Регистрация: 30.03.2015
Сообщений: 152


Цитата:
Сообщение от skkkk Посмотреть сообщение
Еще есть Chain Selection от Lee Mac.
что то не пошел, но спасибо код очень красивый - для себя постараюсь разобраться почему не сработал , хоть вроде точность выставлял...

Цитата:
Сообщение от trir Посмотреть сообщение
читай
с деревьями не разбирался,но спасибо....

Цитата:
Сообщение от Do$ Посмотреть сообщение
Гляньте Pl-Join из пакета PL-Tools: https://dwg.ru/dnl/607
Супер ОГРОМНОЕ СПАСИБО, посмотрел досих пор в шоке...
может конечно не правильно понял, но вродебы все делает сам АВТОКАД, а все остальное обертка типа вывод количества полилиний,задания ошибки и т.д, а сама команда
Код:
[Выделить все]
 (if (and (getvar "PEDITACCEPT") (= (getvar "PEDITACCEPT") 1))
    (vl-cmdf "_pedit" "_Multiple" ssnab "" "_Join" 0 "")
    (vl-cmdf "_pedit" "_Multiple" ssnab "" "_Y" "_Join" 0 ""))
где ssnab - набор полилиий
Спасибо
prajdziswet вне форума  
 
Непрочитано 15.02.2017, 14:21
#9
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,702
Отправить сообщение для Do$ с помощью Skype™


Цитата:
Сообщение от prajdziswet Посмотреть сообщение
но вродебы все делает сам АВТОКАД, а все остальное обертка типа вывод количества полилиний,задания ошибки и т.д
Да, все верно
Быстро объединяет?
__________________
Толковый выбор приходит с опытом, а к нему приводит выбор бестолковый. (The Mechanic)
Do$ вне форума  
 
Автор темы   Непрочитано 15.02.2017, 16:21
#10
prajdziswet


 
Регистрация: 30.03.2015
Сообщений: 152


да, секунд 10 наверное набор из 40 тыс
prajdziswet вне форума  
 
Непрочитано 15.02.2017, 19:07
#11
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,653


Цитата:
Сообщение от prajdziswet Посмотреть сообщение
что то не пошел, но спасибо код очень красивый - для себя постараюсь разобраться почему не сработал
Не пошел - значит не объединил? Он просто выбирает полилинии, которые касаются указанной на концах и тех, что на концах выбранных по концам, пока не соберется вся цепочка (chain).

Вроде как вопросом топика был выбор, а не объединение:
Цитата:
Сообщение от prajdziswet Посмотреть сообщение
с помощью ssget запрашиваются полилинии по концам проверяемой
А дальше предполагалось объединение с помощью _pedit. PL-Join, конечно, делает всё и сразу.
skkkk вне форума  
 
Автор темы   Непрочитано 16.02.2017, 08:40
#12
prajdziswet


 
Регистрация: 30.03.2015
Сообщений: 152


Цитата:
Сообщение от skkkk Посмотреть сообщение
Он просто выбирает полилинии, которые касаются указанной на концах и тех..
да я потом скрипт посмотрел и понял, все равно спасибо - может где и реализую (мне наверное еще понадобиться)...

Цитата:
Сообщение от skkkk Посмотреть сообщение
Вроде как вопросом топика был выбор
полностью согласен, интересно было...ну а задача хотелось объединять (ну оно у меня и чистит полилинии) ...
все равно спасибо "skkkk"=код chain понравился

п.с насчет _pedit и PL-Join:
проверял на наборе 360тыс полилиний _pedit =>тут оказалось автокад задумался время выдал обработки 26 минут
скорее всего PL-Join выдаст тоже самое (там же аналогичная строка)...
у меня в рекурсии (простейшая, бьет блоки по 2,5тыс) с очисткой точек в полилинии => 2 минуты
так что для ускорее слияния - применяйте рекурсию (это так вдруг кто будет еще читать)

Спасибо всем огромное - подсказали и помогли ....
prajdziswet вне форума  
 
Непрочитано 16.02.2017, 08:57
#13
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,787


Только в рекурсии autolisp'a есть недокументированное ограничение - кажется, не больше 19000 вызовов (где-то на форуме проскакивало).
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 16.02.2017, 10:08
#14
prajdziswet


 
Регистрация: 30.03.2015
Сообщений: 152


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
есть недокументированное ограничение - кажется, не больше 19000 вызовов
Спасибо, Алексей буду иметь введу....
У меня при большом количестве ==
ограничение на наборы проскакивало (не помню точно ограничения - 128, вродебы, это давно известно -не раз писалось...решил сбросом наборов)

.... а насчет рекурсии буду иметь введу, вечером проверю и отпишусь ("знание-сила"). Спасибо

----- добавлено через ~8 мин. -----
Перепроверил 19972 (на автокаде 2014), рекурсий потом завершалось без ошибки....

Спасибо

----- добавлено через ~4 ч. -----
конечно странно число макс 19972 могли бы круглое число поставить
prajdziswet вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Разное время ssget при разнесенных примитивах и собранных?

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как автоматически добавлять к имени файла дату и время его создания при сохранении Denis Ch Программирование 41 10.01.2020 10:58
AutoLisp. Как получить текущее время? Zaghim LISP 5 04.07.2012 14:06
Почему при подключенных модулях VBA увеличивается время сохранения чертежа? МишаИнженер Программирование 15 28.04.2012 09:14
Какое время отклика на LSD оптимально для Акада? Maximum AutoCAD 10 31.01.2006 12:34
Можно ли подсветить грипсы во время выполнения команды? Torino Программирование 9 18.11.2004 19:38