|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
Поиск в этой теме |
|
||||
ОПС Регистрация: 29.03.2012
Kazakhstan
Сообщений: 128
|
Цитата:
ну и ActiveX: Код:
Последний раз редактировалось roaa, 26.06.2017 в 20:12. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,835
|
Придется извращаться - запоминать последний примитив, выполнять команду, проверять соответствие и т.п. Ну или переходить на .net...
Сам был в шоке!
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 20.03.2008
Сообщений: 2,653
|
Это-то давно известно, Алексей просто напомнил. Я с самого начала освоения лиспа не понимал, зачем же она возвращает nil? Ну не возвращай ты ничего, верни какой-либо список параметров выполненной команды, имя команды в конце концов. А тут просто - выполнил команду, хоть всё и верно прошло, а в ответ - ЛОЖЬ! Где логика? Ладно, я с этим смирился, и даже использовал ее порой, бывали случаи, когда vl-cmdf не отрабатывал (конкретики сейчас не припомню - всегда старался уходить от командных методов). Но вот уж вообще чего не пойму: зачем трогать то, что работало и так? Заставляя при этом разрабов переписывать коды в языке, который прямо-таки и вопил на всех углах: "Я не завишу от версии!!!" Возможно были конфликты с какими-то из новшеств. Или же это было начало политики, провоцирующей всех постепенно
Знать бы куда и кому писать. Никогда этого не делал, поскольку особо не верил в то, что меня услышат. Вместо этого усердно ваял костыли и искал обходные пути. Наверное, я "социальный овощ" по Бушману. |
|||
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,381
|
Ну, один раз можно. Но гораздо полезнее множественная вставка блока. При этом блок должен постоянно висеть на курсоре, уже в нужном масштабе, возможно повернутым. Блок может иметь атрибуты, причем всех видов, а может и не иметь. И прерывать цикл как в штатных командах - пустым вводом. И чтобы при этом не вывалиться из основной программы.
Такая функция может применяться очень часто. Вообще идеально, чтобы была штатной, но.... Мы с Петром Лоскутовым (Alaspher) - соавтором Н.Н. Полещука по книге AutoLISP и Visual LISP в среде AutoCAD и подружились при совместной отработке этой функции лет 20 назад. Тогда был только Автолисп, не было замечательных vl-catch-xxx, никаких ActiveX. Было много сложных вариантов. чтобы выполнить все условия. Более простой появился вместе с vl-cmdf, которая стала возвращать T или NIL. Но вот "никогда такого не было и опять". Хорошо хоть могу послать уродов из AutoDesk в "индейскую избу"... |
|||
|
||||
Регистрация: 24.03.2014
Сообщений: 15
|
Может кто-нибудь откликнется на мой вопрос.
Можно из программы на Автолиспе получить информацию, есть ли в dwg объекты, к которым можно применить purge? Т.е., хотелось бы не входить в диалог утилиты AutoCAD 'Проверить', не делать _purge, не делать (repeat 3 (vla-PurgeAll (vla-get-ActiveDocument (vlax-get-acad-object)))), т.е. не чистить, а только получить информацию, требуется очистка dwg, или нет. Для другой проверки - требуется _audit dwg, или нет, я сделала (написала - это будет громко сказано) небольшую функцию-команду, где использовала (vla-AuditInfo active_doc :vlax-False), и мне было достаточно нескольких последних результирующих строк протокола работы этой функции, чтобы сформировать сообщение разработчику dwg, о необходимости провести проверку внутренней структуры чертежа, исправить ошибки. Сейчас мне требуется не чистить чертеж, а проверить, был ли чертеж очищен, желательно написать функцию - проверку. Не подскажете, это возможно? |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,835
|
Я бы поставил LOGFILEMODE, установил LOGFILEPATH, потом в ком.строке выполнил _.-purge, explodeallproxy, removeallproxy, _.audit и прочие вещи, следом - отмена действий. И после этого уже обрабатывать полученный log-файл.
Есть, конечно, другой вариант - проходить по всем соответствующим таблицам и на каждый элемент пытаться выполнить нечто типа: Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 24.03.2014
Сообщений: 15
|
Добрый день!
Спасибо, что разместили мой вопрос и откликнулись. "А результат в каком виде нужно получить? Насколько я понял (судя по vla-AuditInfo), достаточно вывода в комстроке?" "Я бы поставил LOGFILEMODE, установил LOGFILEPATH, потом в ком.строке выполнил _.-purge, explodeallproxy, removeallproxy, _.audit и прочие вещи, следом - отмена действий. И после этого уже обрабатывать полученный log-файл." В общем-то, по такой схеме у нас организованы три функции проверки. Создаю каталог, используя вашу функцию создания каталога в (strcat (vl-string-right-trim "\\" (getenv "APPDATA")) "\\LispRu\\Datas"), которую когда-то откуда-то у вас скопировала. Переназначаю LOGFILEPATH, устанавливаю LOGFILEMODE, затем анализирую закрытый уже log файл, часть информации (коротко) вывожу на экран и в текстовое окно Автокада. Потом, эти функции проверки удаляют проанализированные log файлы из каталога (...\\LispRu\\Datas). Конечно, результаты всех проверок в сокращенном варианте можно записать в один текстовый файл и отправить разработчику dwg. Это не вопрос, просто, пока не обязательно. Проверка на наличие прокси-объектов пока не требуется, проверяем и настоятельно рекомендуем удалять только, так называемые, AcDgnLS прокси-объекты, эта проверка есть и программы удаления тоже. Моя проблема в том, что НЕ хочется мне делать _.purge, а следом - отмена действий, даже, если закрывать потом файлы без сохранения. Пока не знаю как поступить. |
|||
|
||||
Регистрация: 20.03.2008
Сообщений: 2,653
|
LcH, во-первых, я бы не советовал учиться лиспу на таком примере. Сложноватым будет для новичка, полагаю. Может, попросить модераторов перенести этот вопрос в отдельную тему, тем более, что он вполне на это тянет.
Во-вторых, хотелось бы узнать, почему не подойдет вариант Алексея (_.-purge с последующим откатом)? Я почти уверен, что любая функция по такой проверке будет работать намного дольше. Не говоря уже о трудности в написании подобной функции. В самом деле, представьте, это же надо пробежаться по таблице блоков (в "базе чертежа"), проверить каждый на наличие в чертеже. Для полной уверенности надо убедиться, что этот блок не входит в какой-либо другой блок. То же самое придется провернуть и с таблицей слоев, типов линий, не забыв залезть в каждый блок и проверить их наличие там. Не говоря уже о проверке текстовых и прочих стилей. В общем, непростая это будет функция, весьма хлопотная в реализации, да еще и тормознутей некуда. Оно надо? Встань передо мной такая задача, я бы пошел по пути, указанному Алексеем. В библиотеке DOSLIB есть функция, возвращающая содержимое командной строки. Я бы делал пурж (похоже, что для надежности надо все же три раза его сделать), а затем получал содержимое комстроки, "выцеплял" бы из него строки, начинающиеся на "Удаление..." и делал в них замену "Удаление" на "Неиспользуемый", что бы получился список строк вроде: Код:
|
|||
|
||||
Регистрация: 08.12.2015
Сообщений: 1
|
Добрый день. Подскажите, пожалуйста, как можно выделить набор, который получился в результате копирования другого набора? Если по шагам: я выделил набор объектов командой "ssget", затем откопировал их с помощью команды "command "_copy"". Вот, можно-ли выделить программно этот новый набор?
Последний раз редактировалось Lavrentiy, 26.07.2017 в 17:57. |
|||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,039
|
Цитата:
|
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,835
|
Теоретически можно. КОмандный реактор, перед выполнением запоминаем последний примитив, после выполнения - через entnext получаем все, что было скопировано. Кстати, на форуме решения подобных задач были (если не ошибаюсь, львиную долю разрабатывал VVA).
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,039
|
Пример, как решается схожая задача - получить идентификаторы всех объектов (ObjectId), вставленных через буфер обмена - от Александра Ривилиса на Net.
|
|||
|
||||
Регистрация: 02.04.2013
Сообщений: 24
|
привет друзьям, я нужна такая lisp, могли бы вы помочь мне, пожалуйстанапример drawing
|
|||
|
||||
Регистрация: 13.04.2017
Сообщений: 134
|
Здравствуйте.
Я новичок. Специалисты, подскажите пожалуйста. Как из однострочного текста получить содержимое при помощи программы на autolisp? Т.е. есть текст "100", как мне в переменную получить этот текст. Спасибо за помощь и ваше время. PS. Я мог неправильно делать запрос в поиске, но ответ на свой вопрос я не нашел, прошу простить. |
|||
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
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 |