|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
|
||||
проектировщик CТБ Регистрация: 03.03.2009
Сообщений: 28
|
Cпасибо. В приложении - итог моей "деятельности", который, однако ж, глючит слегка, судя по лишней надписи nil и ""-пустому вводу в окне командных строк. ![]() Не уверена, что мое "творчесство" кому-то интересно, но, может, и пригодится - программка позволяет осуществлять нумерацию датчиков ПС,а так же вывод в файлик информации по датчикам и длине кабеля между ними, отрисованного полилинией. Если будут идеи по тому, как сделать правильнее и красивее, буду благодарна)))) И еще вопрос - крайне не оригинальный, но что ж поделать - можно ли рисовать автокадовские таблицы с помощью автолиспа, но без использований объектных vla-.. функций? Хотелось бы информацию из файлика вывести в таблицу в автокаде, которая нормальная таблица, а не набор линий и текста) |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
"Навскидку". Замени (setq gr (ssget)) на (setq gr (ssget '((0 . "INSERT")))) - и будут выбираться только блоки. А если добавить сюда и имена блоков, станет совсем просто:
Код:
Код:
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Цитата:
Код:
(A1 B C1 C2 C3 DL DLINA DOPNUM FILEH FL1 FL2 FLAG_SEL_NEW FNAME GR J K N NB OBPLAM P PKP POLYL POM ROT SS SUM TEMP X XX XXX XXXX) Эти переменные используются в каких то других функциях? Если нет - то их тоже правильнее внести в список... А может быть от многих из них постараться избавиться, переделав код... Код:
Код:
![]() (gc) Что делает? Зачем тут нужна? (Может действительно нужна, просто я с ней "не знаком") (princ) после закрывающей функцию скобки не будет обрабатываться Код:
|
||||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Цитата:
Во времена 10 Автокада это было критично.
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
проектировщик CТБ Регистрация: 03.03.2009
Сообщений: 28
|
Относительно (gc). Без нее строка (setq dlina (+ dlina (getvar "PERIMETER"))) работать адекватно отказывалась. На попытку вытащить то. что лежит в "PERIMETER" акад ругался, хотя и писал в командном окне значения area и периметра. Почему, не имею понятия( После того, как не получилось кусок кода с подсчетом длины полилинии написать самой, подсмотрела ее в одной из готовых программ. Видимо, в свойстве "PERIMETER" что-то уже валялось..хотя это лишь мои догадки) Ну а в конце я ее решила добавить уже почитав, что она память подчищает.
Избавиться от лишних переменных можно. Просто написала кучу всяких разных переменных для наглядности и упрощения отладки, на четверть их сократить точно можно)) Что и обещаюсь сделать в ближайшее время. Но вопрос с рисованием таблиц остается открытым. Если не будет лениво и у кого-то есть пример того, как вставлять таблицы без функций вида (Vl*-... ), киньте сюда, плз, буду разбираться на примере методом тыка и хэлпов. Если так не получится вставить табличку, то хоть напишите об этом))) Буду покупать тогда полищука и пытаться изучать (vl*). Если я правильно понимаю, то искать нужно то, как работает VLA-ADDTABLE? Опять-таки, вопрос человека, весьма далекого от программирования, vl-функции, это ведь уже объектно-ориентированное программирование под автокад? В инете множество ссылок на VBA. Однако с автолиспом, работающим со списками, у них маловато общего. Стоит ли начинать лезть в VBA или хватит вполне Полищука?)) В общеМ, извиняйте блондинку за кучу вопросов дурацких, но инфы в инете слишком много и у меня глаза разбегаются и за что хвататься не очень понятно. Последний раз редактировалось Aminka, 28.07.2009 в 18:44. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
Offtop: полищука покупать не надо. А вот книгу Н.Н.Полещука - можно и нужно
![]() Теперь по делу (возможно, VVA меня поправит): создавать таблицу "просто так" не получится. Сначала надо создать или изменить стиль таблицы. Учитывая объем информации, хранимой в описании табличного стиля, я бы упирал именно на ActiveX-методы. Вставку таблицы и задание ей всех настроек (количество и ширина столбцов, высоты строк, границы ячеек, объединение ячеек и т.д.) - я бы тоже делал на ActiveX (то есть vla-* функциях).
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Нечего и нечем поправлять
![]() Добавлю только, что как вариант можно создавать стиль таблицы так: 1. настроить ручками 2. Сохранить полученный список из словаря "ACAD_TABLESTYLE" 3. При необходимость entmakex' ом создавать. Так было сделано здесь (см. table-style-make из #1) Кстати, чтобы при активной работе с таблицами чтобы она не подтормаживала, не забывать включать/отключать свойство Regeneratetablesuppressed с его проверкой. Подробнее можно почитать здесь
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Do$, Ты ссылку в #724 читал?
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
Да, там описание в википедии про сборщик мусора в различных языках программирования.
Он удаляет ненужные данные, освобождает память. Сперва я подумал, что после завершения работы программы ставим gc и всем неиспользуемым переменным nil присваевается. Попробовал - ничего подобного... Пока писал ответ, пришла мысль: когда мы вводим новую переменную, в памяти выделяется какое-то место под нее. Даже если мы потом этой переменной nil присвоили, место под нее сохраняется. А gc подчищает как раз такие неиспользуемые зарезервированные участки памяти. Но это только мои фантазии ![]() Последний раз редактировалось Do$, 29.07.2009 в 15:49. Причина: Неточно мысль выразил |
||||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Ну в общем где-то так и есть.
Код:
Каждое присвоение в a требует разного объема памяти. Подчисткой таких хвостов как раз gc и занимается.
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
А какие-то критерии использования есть? Например - провел цикл присвоения одной и той же переменной разных значений - запускаем "мусорщика". У Полещука как то неопределенно описано применение, цитата: "когда работают большие приложения...". А как определить, большое приложение или нет?
А имеет ли смысл при нынешних объемах памяти вообще эту функцию использовать? |
||||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Do$, Мусорщик запускается автоматически. Самому вызывать не нужно. Я последний раз принудительно вызывал его в году эдак 1991-1993, когда был DOS (твой тезка
![]()
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
В современных AutoCAD сборщик мусора вызывать не обязательно. Памяти обычно хватает. Но у меня он включен в стартовую функцию, которая вызвается во всех программах. Тем самым постоянно убирается грязь.
"Большие приложения" действительно расплывчатое понятие. Оно не связано с большим объемом кода. Иногда маленький "в строках", но плохо написанный код может привести к накоплению мусора. Вот здесь вызов (gc) поможет. Хотя лучше писать хороший код. Более точно о gc знают только програмисты Autodesk, реализующие сборку мусора в AutoCAD. А вот в AutoCAD-10 вызов (gc) был абсолютно необходим в любой чуть сложной программе. В отличие от Windows, где, в крайнем случае, добавится дисковая память, в DOS это было невозможно. Весь LISP работал в 64 Kb памяти, из них около 20 Kb занимал сам интерпретатор, а остальное делилось между пространством нодов и пространством строк. В пространстве нодов и размещаются переменные и их значения. При исчерпании этого пространства выполнялась автоматическая сборка мусора. Только она могла не успеть выполниться. Сейчас, видимо, происходит что-то подобное, просто память измеряется уже другими единицами. И еще использовалась ныне забытая функция vmon, выполнявшая постраничную организацию памяти, в случае если LISP-программа превышала имеющееся пространство нодов. Серьезные программы без vmon и gc нельзя было написать. А теперь - можно. Если, конечно, аккуратно обращаться с переменными. |
|||
![]() |
|
||||
Хотелось бы добавить, каждый вызов сборщика мусора занимает время, причем, не всегда хватает одного прохода, т.е. при троекратном вызове, результат может быть лучше, но занять в трое больше времени. Я тоже регулярно вызываю сборщик мусора, после создания и обнуления большого количества объектов или работы с огромными списками. Из своего опыта могу посоветовать, обратить внимание на несколько моментов:
1. Всегда планировать в какой момент вызвать сборщик мусора. Иногда выгоднее его вызвать несколько раз по ходу программы, а иногда один раз в конце или старте. Мой критерий - замеры скорости работы на реальных (больших) чертежах. 2. Заранее проверять, есть ли изменение в расходе памяти, если вызвать сборку мусора два три раза подряд. 3. Винда, не любит освобождать память сразу. Часто приходится ждать некоторое время. Хорошо помогает вложенный вызов. Как пример, сильно расходует память программа с вызовом Код:
Код:
Код:
ps. Наблюдения проводились в программах, занимающих во время выполнения несколько сотен мегов в оперативке. Вероятно, для маленьких задач, вызов сборщика мусора не актуален. Автокад, сам его регулярно вызывает. Другое дело, если лисп выполняется значительное время, например час или часы...
__________________
Чем гениальнее ваш план, тем меньше людей с ним будут согласны. /Сунь Цзы/ |
||||
![]() |
|
||||
Давненько я тут не был
![]() ЛИСП я так и не выучил, да и что знал – позабыл. Но причины на этот раз не в лени как у меня обычно бывало. Я трудился над развитием лиспа от VVA для расчета спецификаций из мтекстов SPEC5D, намеревался добавить функцию автоматической генерации ведомости расхода стали и даже немного получалось, но как это часто бывает: работа... Приехал к нам в страну новый сотовый оператор. Меня назначили ГИП-ом, и про мое увлечение пришлось забыть на год, да и навряд ли теперь удастся вернуться к этому… Но недавно работа поостыла и я для начала решил обновить Акад и СПДС. Поставил 2010 + СПДС6. Теперь тестирую все что имел под 2009-й. И обнаружил что так прижившаяся в моем КБ добавка для генерации ведомости из выносок СПДС перестала работать. Потестил в Влайде, понял что глючит dwgru-get-spds-text-and-range представленный Кулик Алексей aka kpblc тут на посте 472. Списки в 2010-ом создаются некорректно ![]() Поможите люди добрые
__________________
Блог |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
6-го СПДС нет, так что я помочь не смогу. Может быть, "штатные" средства самой СПДС помогут (но не факт)
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
А идей нет?
2009 + СПДС4 Цитата:
Цитата:
![]()
__________________
Блог |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
Цитаты помогут как мертвому припарки. Надо скачивать и ставить СПДС 6, а у меня сейчас скорость коннекта около 5 кбит/с.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Просто на сколько я помню ты первую версию вовсе без СПДС-а написал
![]() Жаль что скачать не можешь. Отправил бы по почте в конверте, да наверное доходить долго будет, хотя идея... ![]() теперь мне наверное предется на некоторое времяпреостановить использование 2010-го пока не сохранил важные файлы в 6-й версие СПДС, а-то потом не 4-м не открою если что... У кого из программистов есть СПДС 6? HELP
__________________
Блог |
||||
![]() |
![]() |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
LISP. Вставка в таблицу поля, соотвествующего площади примитива | Profan | Готовые программы | 272 | 06.06.2021 23:12 |
Сейсмозащита и сейсмоизоляция существующих, построенных зд. | IANationalInformAgentstvo | Прочее. Архитектура и строительство | 216 | 20.01.2015 16:51 |
Мониторы LCD CRT | Разное | 94 | 17.06.2008 10:51 | |
ЮМОР 2006 =) | Perezz!! | Разное | 1122 | 04.01.2007 00:46 |