|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
|
||||
КИП, АСУ ТП, слаботочка Регистрация: 02.09.2010
Москва-Тюмень
Сообщений: 422
|
Уважаемые софорумчане :-)
Прошу помощи, может кто предложит нормальное решение моей проблемки. Итак, имею файл .txt с разделителями Tab. Открываю его в Excel. И вместо номера позиции "4-1" получаю запись в ячейке "04.янв". Как с этим бороться? Пока рациональных мыслей нет ))) На всякий случай код функции, открывающей файл в Excel (взято у VVA и немного упрощено): Код:
|
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Перед такими значениями принудительно попробуй поставить знак апострофа '
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
Для открытия текстового файла с особыми параметрами юзай Workbooks.OpenText
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
КИП, АСУ ТП, слаботочка Регистрация: 02.09.2010
Москва-Тюмень
Сообщений: 422
|
Кулик Алексей aka kpblc,
так можно и любой ставить, например звездочку ))) я тоже к такому склонялся, хотя это вносит некую нестыковку и необходимость доработки таблицы. Ладно, чую что нет иного выхода. Дима_, С применением методов VBA нет пока времени разбираться, может позднее. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Frigate, символ апострофа принудительно переводит значение в строковое представление - по крайней мере при программном заполнении ячеек.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
Методы VBA это сильно сказанно - а код Вашей функции какие методы применяет?? - все что Вам нужно - это подготовить FieldInfo для каждого столбца и вся проблема.
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
КИП, АСУ ТП, слаботочка Регистрация: 02.09.2010
Москва-Тюмень
Сообщений: 422
|
Дима_,
я же писал, что это функция от VVA (вроде так). Прошу помочь с написанием кода, если это не сильно затруднит. Прилагаю файл txt с пробелами, который нужно открывать в Excel. ======добавлено=========== Смотрю на филдинфо ))) Немноо как китайская грамота. ПРимерчик бы ))) Для упрощения - можно все столбцы из файла-примера открывать как текстовые. =============добавлено============= помучался немного и решил открывать текстовый файл не из автокада а из экселя, так проще - макрос это не lisp ))) Хотя жаль, конечно. Последний раз редактировалось Frigate, 08.06.2013 в 19:37. |
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
Код:
Пример вызова: (excel-open-text (vlax-get-object "excel.application") "d:/test.txt" '((1 2) (2 2) (3 2) (4 2)))
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,515
|
Цитата:
![]() Последний раз редактировалось gomer, 26.06.2013 в 15:27. |
|||
![]() |
|
||||
Регистрация: 20.03.2008
Сообщений: 2,680
|
|
|||
![]() |
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,515
|
У кого-нибудь есть инфа по (_vl-times)? Что-то привирает она, как раз в 4 раза (по количеству ядер процессора, что ли?)
Код:
|
|||
![]() |
|
||||
ПенсионЭр Регистрация: 26.06.2009
Сообщений: 361
|
Разрешите вопрос новичка.
Кое-что понял из "Полещука". Теоретически, а на практике - прошу помочь. Вот функция извлечения начала и конца отрезка: Код:
(entget (car (entsel)) - получен первый элемент (имя выбранного примитива) из базы. (lambda (x) (= (car x) 10)) - первому элементу аргумента Х функции lambda присвоены координаты начала отрезка vl-remove-if-not исключает lambda (x), значит, остается вся остальная инфа из базы, а не только координата конца отрезка (?). Вопрос: как тут работает mapcar, последовательно составляя список координат? Реально, запутался в этой простой строке, как та сороконожка, которая задумалась, с какой ноги начинать движение. Спасибо. |
|||
![]() |
|
||||
ПенсионЭр Регистрация: 26.06.2009
Сообщений: 361
|
Но ведь код "10" - это код начала отрезка. А "11" - конца. Или я ошибаюсь? Вот я нарисовал отрезок с координатами (0.0 0.0) (200.0 200.0)
ком.строка на запрос Код:
Код:
|
|||
![]() |
|
||||
ПенсионЭр Регистрация: 26.06.2009
Сообщений: 361
|
gomer, в ответе твоём уловил намёк. Пошёл штудировать "Полещука".
Спасибо. _______________ Намека не понял: У Полещука на стр. 116, где "Функция Entget": "10" - координаты начальной точки, "11" - координаты конечной точки. Для проверки нарисовал полилинию с несколькими вершинами. Ком.строка выдала все вершины под кодом "10". Что ж, беру за основу практику. Последний раз редактировалось MrBrown, 23.08.2013 в 11:18. |
|||
![]() |
|
||||
Зачем там лямбда в запросе?
Отрезок - это LINE. У него под кодом 10 _ начальная точка в мировой СК, под кодом 11 - конечная точка в мировой СК. У Вас LWPOLYLINE - это простая "плоская" полилиния. У нее под кодами 10 координаты всех вершин, их может быть очень много, поэтому неразумно им давать коды 10, 11, 12... Причем координаты ДВУХМЕРНЫЕ в системе координат ОБЪЕКТА. Штудировать в этом плане лучше DXF Reference.
__________________
Толковый выбор приходит с опытом, а к нему приводит выбор бестолковый. (The Mechanic) |
||||
![]() |
|
||||
ПенсионЭр Регистрация: 26.06.2009
Сообщений: 361
|
Do$, ну, если честно, я выдрал эту строчку с лямбдой из какого-то макроса на форуме и, начитавшись "Маркса", решил с ней разобраться. И, как видно, влип. Спасибо за ссылку. И, да, сам же нарисовал полилинию, а хочу коды отрезка. Невнимательность, однако.
_________________ С отрезком все получилось - и "10", и "11". А такой вопрос: есть ли способ производить загрузку макроса побыстрее? Или каждый раз, изменив его, надо идти по пути "Сервис-приложения-загрузить...". Последний раз редактировалось MrBrown, 23.08.2013 в 11:33. |
|||
![]() |
|
||||
Если Вы программируете во встроенном редакторе VLIDE, то там по сочетаниям клавиш или кнопками можно выполнить быстро загрузку.
http://autolisp.ru/2009/09/10/vlide-misc-01/ http://autolisp.ru/2009/09/12/vlide-misc-02/
__________________
Толковый выбор приходит с опытом, а к нему приводит выбор бестолковый. (The Mechanic) |
||||
![]() |
|
||||
Регистрация: 20.03.2008
Сообщений: 2,680
|
Цитата:
Код:
Кстати, это только у меня VLIDE не понимает кириллицу? |
|||
![]() |
|
||||
CAD Регистрация: 28.08.2003
Киев
Сообщений: 1,834
![]() |
Ну почему не в редакторе VLIDE нажимать кнопку????
Цитата:
P.S. Ну писали же в этой теме... о редакторе VLIDE. Запускайте оттуда же! Отладка там же пошагово через точки останова и т.д. и т.п. Зачем усложнять себе жизнь?
__________________
По теории майский жук летать не может. Но он этого не знает. И летает... |
|||
![]() |
|
||||
Регистрация: 20.03.2008
Сообщений: 2,680
|
Ну не легла у меня душа к VLIDE. Возможно от невежества... Я настроил Notepad++ и уже привык.
Добавил автозавершение и подсветку, в том числе vla-функций... Сворачивание блоков текста также очень удобно, множественная замена текста. Подсветка всех повторений выделенной части текста, например, переменной. Автоматическое создание резервных копий. Всем этим активно пользуюсь, но никого не агитирую, только мое скромное мнение. Хотя, признаюсь, иногда руки тянутся, влекомые авторитетом уважаемых программистов, разобраться с VLIDE, но пока так и не дошли ![]() Но знаю точно, не один я такой, и это несколько успокаивает ![]() А писать сразу во VLIDE как, если я часто беру коды с форума и допиливаю под себя? Последний раз редактировалось skkkk, 23.08.2013 в 13:24. |
|||
![]() |
|
||||
Кириллицу понимает. Есть проблема с копипастом (та же, что и с командной строкой), решается сменой текущего языка на русский перед копированием-вставкой.
__________________
Толковый выбор приходит с опытом, а к нему приводит выбор бестолковый. (The Mechanic) |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Все она понимает. Просто при копировании "откуда-то" в этом "откуда-то" должна быть включена русская раскладка...
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 20.03.2008
Сообщений: 2,680
|
Цитата:
|
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Она и в 2004 была... Достаточно было выполнить (vl-load-com)
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Даже больше: есть подсветка функций, написанных на ObjectARX/NET и подгруженных в AutoCAD.
__________________
Толковый выбор приходит с опытом, а к нему приводит выбор бестолковый. (The Mechanic) |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Естественно! А если tbl импортнешь корректно, так еще и левые методы и свойства станут подсвечиваться
![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
И это тоже. Основная проблема - определить, какую tlb надо импортировать, и ее путь. Но в принципе это решается, насколько я помню.
ИМХО - это аналог раннего связывания со всеми его плюсами и минусами. Лично я предпочитаю работать с поздним связыванием, поскольку позднее немного универсальнее, но при этом и затратнее (по времени, по скорости...).
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 05.09.2011
Сообщений: 38
|
Здравствуйте, подскажите пожалуйста у функции ssget можно как-то запротектить выбор объектов которые уже в наборе в другом наборе? Суть такая я в цикле перебираю координаты и в набор попадают объекты, можно как-то сделать чтобы одинаковые объекты потом не копировались в новый набор.
Сам код: Код:
|
|||
![]() |
|
||||
Функции SSMEMB - проверка наличия примитива в наборе и SSDEL - удаление примитива из набора.
__________________
Толковый выбор приходит с опытом, а к нему приводит выбор бестолковый. (The Mechanic) |
||||
![]() |
|
||||
Регистрация: 14.09.2013
Сообщений: 7
|
Неожиданно столкнулся с проблемой создания набора из динамических блоков.
Симптомы: После вставки динамического блока в пространство модели, пробую извлечь его имя с помощью Код:
Код:
На даный момент выяснил, что *U это признак временного блока. Но , увы, сие никак не сдвинуло ситуацию с мертвой точки. Просьба ко всем завсегдатаям "списочного" пантеона объяснить простолюдину где грабли, на которые я наступаю. Файл с примером экспериментального блока прилагаю: http://files.mail.ru/AB7D56C47B8941609F904FBF2205B25C |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Сам же находил тему: http://forum.dwg.ru/showthread.php?t=85454
Там есть соответствующие коды
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 14.09.2013
Сообщений: 7
|
Да, огромное спасибо! Уже разобрался. Приношу свои искренние "Я больше не буду
![]() |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Например : http://www.google.ru/cse?cx=partner-...%BA&gsc.page=1
http://www.google.ru/cse?cx=partner-...sget%20dynamic
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
dirge, это кому адресовано и по поводу чего?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 05.09.2011
Сообщений: 38
|
Это был вопрос. У меня проблема следующего характера при выборе объектов, в набор их попадает иногда меньшее количество. Происходит это рандомно, хотя координаты полигона для поиска статичны.
Есть следующий код и файл (во вложении): Код:
(33 91 25) (33 91 25) (33 91 25) (33 91 59) (33 25) (14 91 59) По ощущения кажется, что ssget зависит от времени выбора. Бред, но может кто подскажет как с этим побороться. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Вся область выбора должна находиться на экране.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
CP = CrossPolygon. Вообще говоря, любой выбор, кроме "_X", "_A" и пользовательского, требует полного отображения выбираемой области.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 05.01.2011
Сообщений: 83
|
Здравствуйте Уважаемые форумчане. Вопрос не по коду, а теоретический, который не дает мне покоя уже продолжительный период времени.
При написании кода лучше использовать переменные или стараться обходится без них? И почему? Бывает приходится использовать несколько функций в одном выражении по несколько раз в одном коде, когда можно сделать один раз и присвоить значение переменной. Но тогда переменных может стать слишком много... И если я правильно понимаю, они сидят в памяти, тем самым замедляя работу кода. Но с другой стороны не приходится снова выполнять выражение, так как оно уже храниться в переменной, что опять же должно ускорить работу кода. В общем я в растерянности и надеюсь на помощь ГУРУ этого замечательного форума... |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
ashas-, если честно, то тут может рассудить только эксперимент. Лично мне, например, проще работать с переменными. Дима_, например, пишет полностью лисповый код и на "лишние" переменные у него реакция сильно отрицательная
![]() Можешь написать два (три, четыре, пять...) варианта кода и прогнать их по аналогии с http://autolisp.ru/2009/09/20/execution-speed-check/
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Цитата:
Однако переменных можно и нужно делать как можно меньше и делать их локальными, т.е. видимыми только внутри одной функции. Не следует, как в бейсике, последовательно что-то вычислять, присваивая значения. Например, не надо писать (1): Код:
Код:
Без своих функций в серьезных работах не обойтись. Из них надо формировать библиотеку, доступную в любой своей программе. Вот функции надо писать правильно, чтобы они всегда что-то полезное возвращали (даже если никаких вычислений не производится). Библиотечные функции позволяют сделать код конечных программ более простым и читаемым. Кроме того, нахождение определения функции только в одном месте позволяет легко устранять ошибки сразу во всех программах без их переделки. Как только сталкиваетесь с кодом, который повторяется хотя бы второй раз - помещайте его в библиотеку. Но вызывать функции надо тоже с умом. Чаще всего "без ума" последовательно вызывают функцию setq, присваивая значения разным переменным (см. пример 1). Если предположить, что без переменных ну никак не обойтись, то надо было писать (3): Код:
Цитата:
|
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
Тут сначала надо определиться что такое переменная - переменная по замыслу своему это индексированная ячейка памяти которая МЕНЯЕТ свое значение в ходе выполнения программы. А сейчас я скажу то, что наверное не все воспримут - но перед тем как это опровергать, попробуйте осмыслить. В автолиспе переменных в вышеуказанном смысле НЕТ. Да да их просто нет и соответственно Вы не можете их использовать, даже если Вам кажется что Вы так делаете. В автолиспе можно переопределять именна, причем абсолютно не важно используеться аналогичное имя уже или нет. Поясню код (setq a 5 a 10 a 20) создает три значения 10 20 и 30, но т.к. все они индексируются через имя "a", то по окончании функции доступно для программы остается только последнее. Все недоступные значения будут уничтожены при очередном ручном, либо автоматическом, вызове "сборщика мусора". Но т.к. классическая школа программирования объясняет нам все через "ячейки", в автолиспе реализован механизм который внешне очень похож на императивную парадигму. Все согласны?? Я при этом полностью согласен далее называть их переменными, чтоб никого не путать.
Вопрос ведь в использовании этого механизма, а не в устройстве автолиспа, но к сожалению т.к. мы сейчас говорим о конкретном языке, то для понимания "правильности" использования переменных, без его устройства нам не обойтись (ведь глупо говорить в общем о необходимости переменных т.к. - в си без них, ну просто никак, а в хаскеле их просто нет как таковых). Итак у нас есть механизм использования переменных, вопрос - стоит ли им пользоваться. Мой ответ (а я пока, вроде как, неформально считаюсь здесь ведущим "идеологом" в этой области) - да без них невозможно обойтись в автолиспе. Есть варианты когда хоть убейся нужны глобальные переменные, есть функции автолиспа которые заточенны под их использование. Есть ActiveX который содержит в себе изменяемые объекты (вот их свойства, кстати, мы с полной правотой можем называть как "настоящие" переменные - то есть мы можем изменять свойства конкретных объектов). Это необходимость сделанна по нескольким причинам - во первых для "простого инженера" будет несколько сложней написать "вспомогалку" на 3 строчки (с императивной парадигмой он наверное знаком с большей вероятностью); во вторых полноценно реализовывать в интерпритаторе монады и замыкания (механизмы в языках функционального программирования позволяющие полностью не использовать изменяемые значения) это не простое занятие; в третьих использование COM все равно выходит за рамки функциональной парадигмы (т.к. объекты содержат изменямые значения, а реализовывать их через монадические представление это такой-же бред как и использование 1001 переменной в лиспе) и соответственно вся чистота (это термин описывающий тип функций, а не мое отношение к ним) всей "лестницы" функций использующий COM накрывается медным тазом. Весь вопрос в удобстве, либо не удобстве их использования. Я убежден, что 95% примеров использования здесь переменных вызванны недостаточной степенью владения функционалом автолиспа. Большинство начинающих считают что lambda это такое приложение к mapcar'у, но вопрос опять-таки не про них - считаем что мы разбераем случай не для вышеупомянутого "простого инжинера" (не чуть не хочу задеть профессию - имеется в виду человек который, что-то дописывает себе к автокаду постольку поскольку) - ему тратить время на "изыски" некогда, да и наверное не зачем,а для того перед кем стоит реальная практическая Offtop: ![]() Offtop: Сократ мне друг, но истинна дороже Вот здесь хочеться начать с новой строчки. Насчет указанных ShaggyDoc'ом практических целей и пр. Есть в автолиспе несколько "императивно-ориентированных" функций в которых не использование переменных похоже на бред сумашедшего например: Код:
Скорость выполнения, в большинстве случаев, упадет при использовании функционального подхода (при прочих равных), но программы станут не читаемыми, и не редактируемые. Лично мне глубоко плевать на эти 3% времени - они не будут заметны ни при каком случае, а вот при попытке разложить хоть каплю сложный алгоритм "на переменные" - сразу идет тенденция к его упрощению (т.к. сложные вещи описать ими ой как непросто) и в результате мы видим выполнение быстрых переменных логарифмически неэффективно - и как вывод - эти 3% - надуманная чушь. Есть в автолиспе еще отсутствие хвостовой рекурсии - это грустный факт. Из за которго мне несколько раз приходилось переводить готовую программу в "переменное" исполнение. Но я всегда обязательно оставлял "оригинал" - т.к. если потрбуется расширить функционал - гораздо проще добавить его в нем, чем пытаться копашиться в переменных (такая вот ручная оптимизация).
__________________
Когда в руках молоток все вокруг кажется гвоздями. Последний раз редактировалось Дима_, 27.09.2013 в 15:18. |
|||
![]() |
|
||||
Регистрация: 05.01.2011
Сообщений: 83
|
Кулик Алексей aka kpblc, ShaggyDoc, Дима_, благодарю за подробные разъяснения.
Не все понял из того что написал Дима_, но в целом суть уловил. И буквально недавно я стал уходить от переменных (раньше без них совсем не мог), поэтому и возник такой вопрос ![]() |
|||
![]() |
|
||||
Техник АС, КЖ Регистрация: 24.09.2013
Ingushetiya
Сообщений: 392
|
Здравствуйте уважаемые участники. Такой вопрос. Возможно ли изучать AutoLisp и пользоваться им, не имея никаких знаний английского языка?
Почему спрашиваю. Один знакомый поступив на специальность программирования, начал изучать английский, так как он входил в программу обучения и ему в деканате сказали, что при обучении на этой специальности он должен по-любому изучать английский. Но это целая специальность, где изучаются много языков и на глубоком уровне. А для AutoLispа требуется ли хоть базовое знание? Знания английского практически нулевые. Заранее спасибо за ответ. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Документация для AutoLISP доступна только на английском языке. Ну или искать книги Полещука Н.Н.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Есть задачка. Найти пересечение двух линий и по полученой координате выбрать ближайший к этой точке примитив. Точку я нашел, а как привязаться к объекту? _select !pt не катит, потому как ловит только тогда, когда картинка достаточно далеко.
Зачем мне это нужно: есть номограмма, по значениям двух параметров надо выбрать изолинию на пересечении (но точка может оказаться не на изолинии, а рядом...) Поиском ничего вразумиельно не нашел.
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы... |
||||
![]() |
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,515
|
|
|||
![]() |
|
||||
То ли я дурак... попобовал - в набор загремели все изолинии ниже искомой с ей во главе. В чем косяк такого выбора, пока не понимаю.
З.ы. но за идею спасибо. В итоге ssget _с, постепенно увеличиваю размер рамки, пока хоть кто туда не попадет. (Пишу с телефона, поэтому приложить не могу). З.з.ы 2 Ilez. Английский нужно знать как минимум в части, касающейся автокада. Почти все свойства объектов и сам объекты, да и методы написаны простым английским языком... зная язык легче запомнить что есть что и соответственно применить, где надо.
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы... Последний раз редактировалось Vladimir_Sergeevich, 18.10.2013 в 22:56. |
||||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Цитата:
Цитата:
1. Сформировать набор изолиний (скорее всего это полилинии, возможно на определенном слое) 2. С помощью vlax-curve-getClosestPointTo найти ближайшую к указанной точку на изолинии. 3. С помощью distance найти минимальное расстояние и ,соотвественно, саму ближайшую изолинию
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
VVA, таким макаром проверять каждую из изолиний надо что ли и у каждой считать расстояние и выбирать минимальный?
в моем случае выбор через (ssget "_c" p1 p2) с увеличением рамки с шагом 0.1 достаточно.
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы... |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Создавай блок программно и на этом все.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Под "программно" я имел ввиду следующее. Описал в лиспе все действия, которые выполняет пользователь при создании блока, а при запуске, акад сам отрисовывает модель, создает блок и присваивает атрибут. Как в этой ситуации быть, т.к. видимо до создания блоков на самом деле программно я еще не дошел.
|
||||
![]() |
|
||||
Регистрация: 20.03.2008
Сообщений: 2,680
|
Программно, если говорить о лиспе, блок можно создать тремя способами (насколько я знаю):
1. Командные методы (функции command и vl-cmdf) 2. Метод описания точечных пар (entmake) 3. Обращение к объектной модели (vla-методы) Цитата:
Командными методами можно сделать примерно так: Код:
Последний раз редактировалось skkkk, 26.11.2013 в 02:07. Причина: Поправки |
|||
![]() |
|
||||
|
||||
![]() |
|
||||
Регистрация: 14.09.2013
Сообщений: 7
|
Приветствую! Прошу посильной помощи Клуба.
У Полещука: (ssget '(125.4 58.1) создает набор из всех примитивов, проходящих через точку (125,4 58,1) Из официальной справочной документации: Command: (ssget '(2 2)) Create a selection set of the object passing through (2,2) Из личных "хождений по целине": Строю ряд отрезков, абсолютно точно, проходящих через начало UCS (оная есть World). Запускаю код Код:
Так что же нужно учитывать при написании кода, чтобы был набор из примитивов, а не просто один object ? И если, все же, можно только один, то по какому критерию он выбирается из общего множества? |
|||
![]() |
|
||||
Регистрация: 14.09.2013
Сообщений: 7
|
Поверьте, не имею такой привычки - постить с бухты барахты:
http://www.google.ru/cse?cx=partner-...%83&gsc.page=1 http://www.google.ru/cse?cx=partner-...get&gsc.page=2 Если не сложно уточните свое утверждение ссылкой. |
|||
![]() |
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,515
|
|
|||
![]() |
|
||||
Регистрация: 14.09.2013
Сообщений: 7
|
Спасибо огромное! Однако, хотелось бы понять отчего же такой облом происходит. Это не первое и, увы, не единственное мое наблюдение странностей применения "условий выбора" при создании наборов. Пытался докопаться, посты читая, но так и не нашел ответов - просто поменял алгоритм, усыпляя чувство нарастающей тревоги, своей недалекостью в ОбработчикеСписков... Ну а сегодня понял, что нужно ставить диагноз не допуская перетекания в хронику.
И кстати, даже увеличив величину допуска до 1, в любезно предоставленном коде, все рано в набор цепляет всего 3 отрезка из 8-ми. Пардон - вот только что прочел всю ветку (сразу не вкурил как перейти туда). Так вот - точка с координатами '(0 0 0). как мне видится, здесь абсолютно не причем. На этот косяк, а точнее свою неверную трактовку Полещука, я нарвался, решая не рафинированную (как в моем первом примере "для чистоты эксперимента") задачу, и исход был таким же! Мое внимание привлек вот этот пост: Цитата:
Спасибо огромное Клуб!!! Всем успехов. Последний раз редактировалось chicot, 26.11.2013 в 01:19. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Насколько я помню, при программном формировании набора примитивов внутри определенной области, эта область должна быть на экране. Чуть ли не первое условие. Второе - соблюдение точности вычислений (а это уже показали).
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 20.03.2008
Сообщений: 2,680
|
Цитата:
Цитата:
Цитата:
Код:
![]() И, как абсолютно справедливо заметил Алексей в предыдущем посте, область должна быть на экране. Поэтому я всегда предварительно программно зумирую вид в эту точку. Последний раз редактировалось skkkk, 26.11.2013 в 02:05. |
|||
![]() |
|
||||
Регистрация: 14.09.2013
Сообщений: 7
|
Цитата:
![]() ![]() Ну и выставляю на ваш суд свой опус: Код:
|
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Цитата:
примеры entmake'ов Entmake Functions Чтобы создать вхождение блока (INSERT) нужно воспользоваться функцией insert из последней ссылки
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
У меня проблема: моя функция выводит результат вычисления в экспоненциальном виде:
6.66e+007 А я ожидал: 185.0 Вот так выглядит функция: Код:
Если запускать из командной строки, нет проблем: Код:
PS У меня ещё вопрос: может ли человек читать такое представление числа? Последний раз редактировалось baaba, 23.12.2013 в 15:11. |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Код:
![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Цитата:
Ожидания сильно не оправдались. Может быть, поделить надо на dimscale?
__________________
Толковый выбор приходит с опытом, а к нему приводит выбор бестолковый. (The Mechanic) |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Или на dimlfac... Кто ж его знает?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Алексей, спасибо! Это работает - я получаю результат в кавычках. Но моя ошибка была как оказалось в другом: я перепутал умножение на деление, от этого получалось большое число, и автокад автоматически представлял его в экспоненциальном представлении.
Спасибо за ответ! |
||||
![]() |
|
||||
геодезист Регистрация: 25.10.2011
Москва
Сообщений: 45
|
Всем привет!
Добрые гуру лиспа, а просветите пожалуйста чайника, какими средствами достичь ускорения работы лиспа в автокаде? Поясню - есть лисп, который: 1. в топографических планах ищет замкнутые горизонтали; 2. просчитывает точки вставки бергштрихов (полилинии, указывающие направление уклона рельефа); 3. создает из триангуляционной модели рельефа (в виде 3dFace) список с координатами и высотами вершин каждого треугольника. 4. ищет по текущим координатам точки вставки треугольник, которому эта точка принадлежит, и сравнивает высоты (находит уклон рельефа); 5. вставляет в точку вставки блок, разворачивает его и взрывает Треугольников в чертеже может быть десятки тысяч, соответственно список тоже ооочень длинный. Количество анализируемых точек вставки - сотни. Из команд автокада используется обращение к layer и insert, порядка 20 переменных. Смущает скорость выполнения. Autocad Civil 2013, порядка 9000 треугольников 3D Face, 330 точек вставки - формирование списка - порядка 10 секунд, вставка блоков - около 10 минут. Если треугольников уже десятки тысяч, то время возрастает до часа-полутора. При этом та же программа начисто подвешивает Land 2006 и из ступора он уже не выходит. Как оптимизировать код, чтобы свести время к минимуму? |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Цитата:
И однозначно тормоз здесь Цитата:
|
|||
![]() |
|
||||
Программист широкого профиля. Регистрация: 08.09.2005
Челябинск
Сообщений: 722
|
давным давно я тестировал автолисп на скорость.
Сделал программку рисующую кривую Коха.. Кривая Коха это такая хитрая фигурка похожая на очень кривой штакетник которая может содержать от 4 до бесконечности линий. Уж и не помню точно, программа отрисовывала больше миллиона линий, а может даже больше десятка миллионов. Фрактал растет в какой-то быстро возрастающей не линейной прогрессии названия которой я уже и не помню. В общем за несколько циклов количество линий во фрактале вырастает от 4 до миллиардов. Возможно даже моя программа отрисовывала и миллиард линий. Суть не в этом. Рисовалась она тремя способами. 1 При помощи command. Я успел попить чайку, а фрактал продолжал расти когда я его уже выпил и сходил покурить. Что-то около получаса заняло. 2. При помощи entmake дело пошло быстрее, но не намного. 3. При помощи объектной модели (vla-функций) я лицезрел конечный результат не вылезая из за компьютера, не пил чай и не курил. А потом задал такое количество циклов роста фрактала (вроде даже попросил нарисовать бесконечный фрактал), что через 5 минут получил сообщение о недостатке памяти. В командную строку вылезло какое-то сообщение об ошибке номер 000005 c буквой "С" то-ли спереди то-ли сзади. Вывод: хочешь скорости? Выбирай объектную модель. |
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
Основные тормоза не в методах рисования (хотя конечно командными пользоваться не стоит не только из-за соображений скорости), а в алгоритмах - как бы Вы не рисовали примитивы скорость измениться линейно (ну допустим в 10 раз) - что не так-то страшно (секунда или 10 разница конечно есть но не критичная - в крайнем случае можно "железом" нивилировать), а вот если беда с математикой типа идет "ненужная" обработка каждого к каждому, без оптимизации, хеширования и пр, то как быстро не выполняй итерацию - их количество, при неправильном алгоритме зачастую растет в геометрической прогрессии и тогда никакой "линейный" разгон не поможет.
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
Программист широкого профиля. Регистрация: 08.09.2005
Челябинск
Сообщений: 722
|
В вопросе скорости можно вообще не париться. Я вот тут прикинул. Если на формате а1 нарисовать около 1500 линий толщиной 0.5мм, то мы получим черный прямоугольник. Кто нибудь может похвастаться чертежом с более 2000 примитивов?
Автолисп с легкостью обработает десятки тысяч данных самым неоптимизированным в мире кодом. Кто нибудь может похвастаться чертежом с сотнями тысяч примитивов? На современной технике автолисп и сотнями тысяч не подавится. У кого мильён линий в чертеже?.... |
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
Ну тогда покажите мне код который прокладывает самый кротчайший маршрут проходящий хотя-бы через 100 произвольных точек.
з.ы. - всего-то 100 отрезков нарисовать... ![]()
__________________
Когда в руках молоток все вокруг кажется гвоздями. Последний раз редактировалось Дима_, 31.01.2014 в 02:11. |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Цитата:
|
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Необязательно: http://autolisp.ru/2009/09/22/programming-style/ + http://autolisp.ru/2009/09/20/execution-speed-check/
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
автоматизация и организация черчения Регистрация: 17.11.2009
Sterlitamak
Сообщений: 135
|
Добрый день! Подскажите пожалуйста чайнику!
Вопрос касается расширенных данных. Почему этот код работает Код:
Код:
Заранее спасибо!
__________________
слесарь САПР |
|||
![]() |
|
||||
геодезист Регистрация: 25.10.2011
Москва
Сообщений: 45
|
Почему может не работать подобная конструкция? По замыслу в переменной Obj должны записаться 3d face в слое Триангуляция, выбранные в области, ограниченной окном (координаты считаются).
Error пишет: ActiveX Server returned the error: unknown name: Select; error: An error has occurred inside the *error* functionAutoCAD variable setting rejected: "osmode" nil Код:
|
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
А что, в coord_point1 на момент вызова (setq coord_point1 (vlax-make-safearray ... хранятся строки? Это раз.
Второе. То же самое - с coord_point2 Дальше даже не стал смотреть. Советую пройтись по шагам (часть пояснений есть здесь: http://autolisp.ru/2009/09/12/vlide-misc-02/ ) и посмотреть, на каком месте спотык.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
геодезист Регистрация: 25.10.2011
Москва
Сообщений: 45
|
Цитата:
Теперь прога стопорится на (выделено жирным): Код:
- коды фильтров - безопасный массив целых чисел в виде варианта - с этим понятно, задаем тип vbInteger - значения фильтров - безопасный массив типа вариант в виде варианта. - то есть надо присваивать тип vlax-vbvariant, так? Но '("3DFACE" "ИИ_ТРИАНГУЛЯЦИЯ_025") в виде варианта не воспринимается. То есть надо еще сделать из этого списка вариант? На каком этапе это надо делать, внутри самой vlax-make-safearray? |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,515
|
|
|||
![]() |
|
||||
Решил попробовать себя в Lisp и накатать программку которая давно назревала в наших проектных массах. По большей части изобретение велосипеда, но я для учебных целей. Итак мне нужно рисовать рамки с половиной бокового штампа в пространстве модели и автоматом создавать видовой экран в пространстве листа для него. Все это вешаю на несколько кнопок: +1 лист, +5 листов, -1 лист - 5 листов. Листы всегда формата А3. Вновь создаваемые листы всегда на строго отведенном месте в пространстве модели начиная от координаты 0.0 вниз по 5 листов в ряд. Создавать листы из блоков думаю не стоит... потому как всегда найдутся те кто захочет удалить кнопкой Del, расчленить блок и т.д. А для чертежа нужен независимый счетчик листов (возможно с их описанием) для того чтобы добавить/удалить лист. И тут я подумал про простую группировку объектов (group). Удалить получится только все объекты входящие в группу, а разгруппировать уверен не сможет никто кто у нас работает, в силу того, что даже не знает о такой фишке как группировка.
Хотелось бы комментариев специалистов на уровне постановки задачи, чтоб не биться в стену за зря ![]()
__________________
Поезд который устал от ржавого здравомыслия рельсов... |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Ctrl+H (насколько я помню) - и удаление объекта из группы выполняется легко и непринужденно.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Алексей, я же написал что уверен, что у нас не додумаются
![]()
__________________
Поезд который устал от ржавого здравомыслия рельсов... |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Блажен кто верует - ему тепло...
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Тогда какие варианты для защиты от удаления из чертежа (блока или набора примитивов, группы)? Как я понимаю нужно вести счетчик количества листов в чертеже, и примитивы надо както обозначить что это лист и по отдельности их удалять не надо. Можно еще анонимные блоки попробовать... но не хочется перемудрить...
__________________
Поезд который устал от ржавого здравомыслия рельсов... |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Делай MINSERT-блок (вопросы защиты чертежей на форуме были).
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
тут под "защитой" понимается не удалить половину листа например. Т.е. чтобы при добавлении например листа программой точно было посчитано что в чертеже 6 листов а не 5,5
![]()
__________________
Поезд который устал от ржавого здравомыслия рельсов... |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Я говорю - делаешь MINSERT-блок. Можно даже анонимный. Вставляешь его, меняешь атрибуты. Потом при вставке следующего получаешь все вхождения соответствующих MINSERT-блоков, считываешь оттуда данные.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
![]() ![]() Пока план такой: 0. делаем кнопку по нажатию на которой выполняется программа по вставке листа в пространство модели 1. Рисую рамку vl-cmdf 2. Заношу нарисованные объекты в группу, присваиваю группе имя, описание. это уже реализовал 3. при следующем нажатии (как и при первом) проверяем сколько групп с именем (шаблон) уже вставлено. 4. По описанию прибавляем к координатам поправки и вставляем следующие листы 5. создаем видовой экран в пространстве листа и по поправкам координат даем ему размеры + настраиваем лист - это для меня самое сложное наверно будет...
__________________
Поезд который устал от ржавого здравомыслия рельсов... |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Если хочется совсем заморочиться, то вот еще вариант:
![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Все понял кроме атрибутов. А зачем они? Какбы штамп я не планирую в рамку. А дополнительную информацию в атрибутах хранить мне кажется незачем.
В любом случае доделаю - выложу исходник посмеятся ![]() Программа действительно специфичная... врядли кому пригодится, но я точно уверен, что в наш отдел она очень нужна. У нас 90% чертежей это формат А3. Другие форматы выполняются в специальственных программах где создание видового экрана этого листа не требуется. А те что делаем чертежи могут содержать от 1 до 150 листов А3 в одном чертеже. Создавать руками для каждого листа даже копируя видовой экран это долго. А тут и потренеруюсь и польза будет ![]() Объясните мне пожалуйста вот такую штуку. Почему если поменять первую строку со второй получим разные результаты? ![]() Код:
__________________
Поезд который устал от ржавого здравомыслия рельсов... Последний раз редактировалось Shoorup, 11.02.2014 в 09:46. |
||||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
Ищи по слову привязки...
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Касаемо слова "Ширина" в команде: http://autolisp.ru/2010/03/04/localization/
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Кулик Алексей aka kpblc, я начал тему перечитывать потиху. Правило №1,2 VVA уже учу
![]() Лучше поясните мне плиз как работает osnapcoord на примере. Справку почитал и по форуму тоже полистал. Эту переменную тоже сохраняют зачемто, но я не пойму даже как она работает и на что может повлиять при выполнении lisp.
__________________
Поезд который устал от ржавого здравомыслия рельсов... |
||||
![]() |
|
||||
Шаражпроектхалтурмонтаж Регистрация: 29.10.2004
Талды-Париж
Сообщений: 6,010
|
Уважаемые товарищи программисты! Помогите подправить программку, пожалуйста! Самому ума не хватило
![]() Программка меняет ширину выбранного атрибута на заданное значение у выбираемого блока или во всех одноименных блоках. А можно ли сделать так, чтобы изменялись атрибуты в выбираемой группе блоков? Код:
|
|||
![]() |
|
||||
геодезист Регистрация: 25.10.2011
Москва
Сообщений: 45
|
Подскажите, существует ли способ удалить из selection set, содержащего vla- объекты, какой-либо элемент "начисто", чтобы он позднее не нашелся при обращении к этому selection set?
Я пробовал удалять методом vla-delete, но во модели остается упоминание об объекте. Далее в процессе циклического перебора программа натыкается на удаленный элемент и возвращает ошибку. Проверить на vlax-erased-p не удается, так как указатель на удаленный элемент selection set нельзя получить. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Ничего не понял. Объект физически удаляется или его надо просто "выкинуть" из результата, возвращаемого ssget?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
геодезист Регистрация: 25.10.2011
Москва
Сообщений: 45
|
Цитата:
Надо сделать так, чтобы при последующей проверке для других контуров, удаленный бергштрих "не отсвечивал", т.к. в selection set он все равно присутствует. Selection set формируется методом (vla-Select berg_ss acSelectionSetAll nil nil filter_code filter_value) |
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
Цитата:
p/s/ проверяйте последовательность команд - скорее всего Вы "попались" на ловушки переменных значений.
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Кажется, так:
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 26.02.2014
Сообщений: 3
|
Здравствуйте!
![]() Начала (учить '(lisp)), уже не терпиться написать программы, которые сократят количество кликов в разы на моей работе: возник вопрос. Восстанавливаю 3D из 2D чертежей. У меня есть штриховка, есть кнопка с коммандой восстановить контур штриховки _.HATCHGENERATEBOUNDARY Иногда контур приходится редактировать. Из полученного контура я кнопочкой создаю область (клик по кнопке создать область, затем выбираю контур) После этого иногда бывает нужно преобразовывать область в поверхность, чтобы можно было обрезать лишнее. Потом вытягиваю, вращаю и пр. Собственно вопрос - как передавать полученный из штриховки контур функции автокада по созданию области? А затем область передавать функции по преобразованию в поверхность? использую (vl-cmdf ...) Спасибо за помощь! |
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
это зря он в понимании простой, но работать с ним сложно (геморно). По основному воросу - попробуй (entlast)
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Только не помешает предусмотреть ситуацию, когда контур не создался.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 26.02.2014
Сообщений: 3
|
|
|||
![]() |
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,515
|
|
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Меня "напрягает" только создание 3D из 2D... А в остальном - мы все учились понемногу...
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
геодезист Регистрация: 25.10.2011
Москва
Сообщений: 45
|
Снова вынужден обратиться к вам, гуру Lisp, cо своей неразрешимой проблемой ).
У небезызвестного многим Lee Mac есть функция определения координат центроида замкнутой полилинии (код смотрите ниже). При встраивании этой функции в свою программу столкнулся с тем, что не все контуры обрабатываются правильно - то есть не всегда точка центроида ставится внутри контура. Приложил файл .dwg c примером конфликтной ситуации. Все контура полилинии одинаковые и замкнутые. Случай 1: Координаты X - семизначные, Y - шестизначные. Контур полилинии слева отрабатывается неправильно, справа - правильно. Случай 2: Те же контура, но находятся в окрестностях начала координат. Оба контура обрабатываются правильно. Намекните, как могут координаты контуров влиять на результат функции LM:PolyCentroid и приводить к неправильному вычислению координат центроида? Координаты же не сикстиллионы с сикстиллиардами.. Может дело в какой-то системной переменной? UPD. C причиной не разобрался, попробовал использовать библиотечную dwgru-geom-lwpolyline-centroid - работает безошибочно Код:
Последний раз редактировалось mankurt, 07.03.2014 в 16:10. |
|||
![]() |
|
||||
геодезист Регистрация: 25.10.2011
Москва
Сообщений: 45
|
Есть ли, навскидку, какая-то альтернатива команде trim среди ActiveX методов? Или все только trim в своих программах используют?
"Extrim" из Express написана c обращением к куче команд. Если на нее подавать кучу полилиний из SS, то очень долго получается. Хотя там много проверочных условий... |
|||
![]() |
|
||||
Регистрация: 05.09.2007
RUSSIA
Сообщений: 166
|
Добрый день.
Понадобилось написать небольшую программку (чего очень давно не делал). В зависимости от наличия переменной или уже определенных путей, устанавливает или добавляет нужное значение переменной TRUSTEDPARTS. Вот ее текст: Код:
Я так понимаю, что это установленное значение влетает в командную строку и пытается выполниться. Как этого избежать? Заранее благодарен. Михаил Последний раз редактировалось mkung, 16.03.2014 в 22:30. |
|||
![]() |
|
||||
Регистрация: 12.03.2009
Сообщений: 98
|
to mkung ,
Да нет одной не хватает 3- начинают, а 2 закрывают. Не зер гуд, посмотри в строке (посчитай, количество открытых и закрытых скобок повнимательней).Должно быть (_(_(_____)_)_), а у Вас (_(_(_____)_)_?. Вроде так учили на парах по программированию. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
А почему перед setvar стоит 2 скобки? Почему после ";" в строковой переменной установлен пробел?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
BIM, С#, AutoCAD, LISP Регистрация: 15.03.2006
Дуброво
Сообщений: 657
|
Прошу покритиковать одну из моих первых программ:
Код:
Вопросы: 1. Не слишком ли много переменных? Можно ли сделать меньше? Как вариант: (setq obj_name (cdr (assoc 0 (entget (ssname ss i))))) заменить на функцию и вызывать функцию, а не обращаться к переменной. Ещё вариант ухода от переменной (только что пришла мысль) - блок кода со взрывом объектов забросить в первую конструкцию (if ...) и в условии спрашивать не переменную answer, а сделать прям там вызов диалога (итого - получилось минус две переменные) 2. В этой программе я использовал функцию вызова диалога из пакета программ bgtools. Как обычно описываются сторонние функции? Требуется ли сообщать автору (если есть возможность его найти) об использовании его функции в своей программе? Какие правила (писаные/неписаные) есть по этому поводу?
__________________
"Молодой человек, Вы не представляете всей широты поставленной перед Вами задачи." © Панкратова Г.Е. Последний раз редактировалось kha, 31.03.2014 в 14:11. |
|||
![]() |
|
||||
Два вопроса о vla-
1. условие (if (not (vla-item (vla-get-layers adoc) "_vsp"))... понял, что нельзя, как красиво обойти? 2.объясните как оптимизировать создание объекта с помощью vla Код:
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы... |
||||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Цитата:
Например, создание отрезка: Код:
Код:
|
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
Ну если из первых - то программа просто шикарная, но есть несколько логических казусов:
- возврат функции msg-yes-no надо проверять сразу по выполнению и если он "нет", то нет никакого смысла выполнять фильтрацию набора - он все равно не понадобится - как следствие нет нужды в выделении имени answer - ненужная работа. - "qaflags" надо не устанавливать в фиксированное значение, а "запоминать" перед изменением и восстанавливать после работы (как впрчем и любые другие используемые на изменение системные переменные). Это на ваш вкус - можно избавиться от всех. з.ы. Не партесь - все бы так как Вы программировали...
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
Цитата:
tblsearch ? я собственно это и хотел, но vla-item возвращает либо нужный слой, либо ошибку и абзац...
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы... |
||||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Цитата:
Цитата:
Т.е. делается попытка выполнить какое-то выражение после try, а если произойдет ошибка по любой причине, то выполнится выражение между except и end. |
|||
![]() |
|
||||
других языков не знаю, кроме азов паскаля из школьного курса...
про ловушку ошибок, в принципе, понял, что сначала объект создается тоже... мне было интересно можно ли этот указатель на объект передать сразу нескольким функциям. суть то (vla-put-property [содал объект] 'свойство [значение] ) только "'свойство [значение]" сразу списком передать, а не через переменную
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы... |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Vladimir_Sergeevich, как один из вариантов "передачи массы аргументов": http://autolisp.ru/2009/10/21/lisp-overloading/
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Цитата:
Функции, наподобие vla-addline - это тоже дополнительные оболочки, пришпандоренные внутри AutoCAD. Можно было бы вызывать (vla-add 'Line ...), но это совсем не по-лисповски. Но LISP хорош тем, что внутри его функций можно спрятать, что угодно. В приведенной мной функции (ru-line-add start_pnt end_pnt lineweight ltype) спрятано построение отрезка объектным методом. И никто (без исходников) не знает, как именно это сделано, используются ли локальные переменные. А можно было бы и через command и через entmake внутри функции отрезок создавать. Передавать свойства можно и списком (лисповским), но в случае ограниченного количества свойств в этом нет смысла - себе дороже будет этот список разбирать. А вот для полилинии координаты надо передавать именно списком, т.к. их количество может быть произвольным, наподобие (ru-pline-add points is_closed width lineweight ltype). |
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
Это каким постулатам? ИХМО VisualLisp реализован так только из-за лени программистов его создавших. Все постулаты ООП прекрасно реализуются в функциональных языках (если быть точнее, то функциональную парадигму можно лекго урезать - ввести ограничения - до ООП).
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
BIM, С#, AutoCAD, LISP Регистрация: 15.03.2006
Дуброво
Сообщений: 657
|
Дима_, спасибо за замечания
Сделал проверку на функцию msg-yes-no в начале программы, запоминание и восстановление переменной Сейчас увидел, что программа не взрывает объекты внутри блоков и массивов, буду развивать дальше. Цитата:
Сначала подстраивал программы с форума под свои нужды, а где-то месяц назад сам начал писать. Код:
__________________
"Молодой человек, Вы не представляете всей широты поставленной перед Вами задачи." © Панкратова Г.Е. Последний раз редактировалось kha, 01.04.2014 в 13:58. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Как вариант, без проверок (поскольку СПДС GraphiCS нету):
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Цитата:
Хотя далеко не всегда надо именно объекты создавать - можно и обычными функциями обойтись. Ну и конечно, если бы не лень - из VisualLisp можно было бы "конфетку сделать". А они даже поленились свой редактор сделать и купили VitalLisp для основы. А могли бы многое сделать, например DCL на XAML заменить. |
|||
![]() |
|
||||
BIM, С#, AutoCAD, LISP Регистрация: 15.03.2006
Дуброво
Сообщений: 657
|
Кулик Алексей aka kpblc , спасибо!
![]() Но пока что не буду смотреть - когда напишу сам, разберу твой код. Так интереснее и, как показывает практика, запоминается лучше ![]()
__________________
"Молодой человек, Вы не представляете всей широты поставленной перед Вами задачи." © Панкратова Г.Е. |
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
Я не про то, что объектная модель автокада лежит не в идеологии функционального программирования (например vla-addCircle - возрващает ссылку на новый круг, а если разрабатывать с точки зрения функционального подхода, то она бы должна была возратить ссылку на новую, readonly, копию блока к которому она уже применена - modelSpace например - с кругом внутри - по типу cons в лиспе - что давло бы возможность использовать совместно с ней всю гибкость лиспа - но, в то же время, вывернуло мозги набекрень всей "классической" школе). Лисп можно гораздо лучше "пристроить" и к императивной объектной модели (той что в автокад) - см. например CLOS.
__________________
Когда в руках молоток все вокруг кажется гвоздями. Последний раз редактировалось Дима_, 01.04.2014 в 16:55. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Ага, может. Только настройки такого созданного слоя могут быть немного неожиданными
![]() Я немного расковыривал эти вещи: http://autolisp.ru/2014/03/05/base-s...rs-anf-styles/
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Твой код значительно короче
![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
И снова я с глупыми вопросами
![]() хочу рисовать кучу размеров автоматом по двум точкам... Для этого сделал функцию отрисовки этого самого размера. Код:
примерная хронология: 1. написал для первых четырех - все как надо отрисовало 2. добавил пятый размер - не работает 3. удалил его к лешему (точнее сначала закомментил) - все равно не хочет ![]() В том виде как в п.1 тоже с бубна только пошло... Вызов функции (create-dim-rotated p-vline p-ntr p-ktr a-dim), где p-vline, p-ntr, p-ktr - точки которые расчитываются для каждого, a-dim - угол поворота размера (в моем случае 20‰) з.ы. приложил файло - красным покрасил размерчики отрисованные программой
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы... Последний раз редактировалось Vladimir_Sergeevich, 04.04.2014 в 15:29. |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
замени adim/ на adim /
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Ни в жизнь бы не догатался там косяк искать. Спасбо
![]()
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы... |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Я на подобные "грабли" наступал достаточно часто (особенно со старыми клавиатурами), так что опыт есть
![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
инженер-проектировщик КИПиА Регистрация: 30.08.2008
Минск
Сообщений: 159
|
vla-put-rot*
или vla-put-a* думаю может помоч (мне помогало) Offtop: gomer, сообщение напоминают тот случай когда папы играются с вертолетиками своих дтей
__________________
https://www.linkedin.com/in/podolinsky |
|||
![]() |
|
||||
Регистрация: 21.07.2008
Луцьк
Сообщений: 179
|
|
|||
![]() |
|
||||
Регистрация: 05.09.2007
RUSSIA
Сообщений: 166
|
Добрый день.
Есть программка, отрисовывающая выноску по параметрам дуги. Но пользователь попросил, чтобы выноска была в пространстве листа. Выноска, как она получается - во вложенном файле. Проблема в том, что она аннототивная и при использовании команды СМЕНАПРОСТР с масштабом полный алес-капут. Может кто подскажет как корректно перенести выноску на лист программно? Заранее благодарен. |
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
Ух а ведь и правда не работает (я про вариант гомера) - он у меня 1 раз отработал (когда говорю такое сам себе не верю - но вроде сам видел - не уж-то померещилось??) и все (я и подумал, что гомер чего-то приболел совсем) - интересно в чем там заковырка.
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
инженер-проектировщик КИПиА Регистрация: 30.08.2008
Минск
Сообщений: 159
|
возник вопрос в продолжение темы танцев с viewport
сталкивался ли кто-нибудь с такой ситуацией создаю программно layout (задаю ему только название) вставляю в layout видовой экран, включаю его, устанавливаю ему target (вычисленный в координатах модели из параметров блока) и он волшебным образом смещает вид от указанной точки на величину своего dxf 12 кода в описании этого кода "View center point (in DCS)", что за DCS пока что не нашел заметил что он не меняется на разных файлах, НО меняется - при смене принтера по умолчанию и переоткрытии файла entmod'ом этот код в '(0 0 0) не меняется где его можно обнулить PS вопрос снят, был неправильный подход к решению задачи ![]() Последний раз редактировалось kakt00z, 25.04.2014 в 12:49. |
|||
![]() |
|
||||
Созрел вопрос, а можно ли средствами автолиспа добавить в настройки автокада путь к вспомогательным файлам? например "M:\дороги\_font for autocad"
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы... |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Можно. Вариантов масса:
1. Анализировать (getenv "ACAD") и при необходимости добавлять свой путь (пути) 2. Анализировать (vla-get-supportpath (vla-get-files (vla-get-preferences (vlax-get-acad-object)))) и добавлять свой путь (пути) 3. Залезать в реестр (ИМХО наименее удобный способ).
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Думаю №2 самое удобное будет, руки дойдут - займусь. просто, глядя на объектную модель в справке, направления так и не понял без подсказки.
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы... |
||||
![]() |
|
||||
Регистрация: 05.03.2012
Санкт-Петербург
Сообщений: 20
![]() |
Уважаемые форумчане! Интересует такой вопрос, сперва принципиально (возможно/нет), после (или в процессе) вставки динамического блока командой из лиспа, выбрать конкретный заранее известный параметр из таблицы выбора этого блока?
|
|||
![]() |
|
||||
Регистрация: 05.03.2012
Санкт-Петербург
Сообщений: 20
![]() |
Спасибо за ответы. Поскольку с вла знаком чуть более, чем нисколько, получился весьма громоздкий текст для этого одного действия:
Код:
![]() Последний раз редактировалось Кулик Алексей aka kpblc, 20.05.2014 в 16:25. |
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
Цитата:
Да по сути никак - только что лишние переменные создаете (вполне можно применять функции друг к другу) - вот копия с Вашего поста: Код:
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
http://lee-mac.com/dialogposition.html
там и пример диалога, и его загрузки
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
слаботочка Регистрация: 30.09.2011
Сообщений: 1
|
Доброго времени суток. Подскажите, пожалуйста:
Есть шаблоны с таблицами, данные в таблицы загружаю через связь с данными из экселя. В случае, когда текст в ячейке экселя длиннее ячейки када, ячейка меняет высоту, шаблон с настроенными листами плывет и приходится ручками все править, что не очень удобно. Собственно вопрос: есть ли возможность с помощью лиспа определять ширину строки в таблице и переносить часть текста, не уместившуюся в заданную ширину, ячейкой ниже, возвращая ячейке исходную высоту? Соответственно смещая и весь ниже следующий текст. В лиспе новичок, но если подскажите где копать, буду очень признателен. ![]() |
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
В объектной модели автокада - конкретно в классе AcadTable.
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 30.03.2012
Сообщений: 101
|
Алексей, спасибо, конечно! Но я пример с car привел просто так. То есть функция передаваемая в качестве параметра в foo должна быть любой и агрумент любой. Тут всё таки вопрос глубже. В теории видимо дело. Правильно ли я понимаю, что при связывании формальных параметров (f x) превращается в (car '(1 2 3))? Должно же быть так? Почему тогда car не находится системой и выдаётся ошибка error: bad function ?
|
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Потому что в твоем случае функцию надо применить (т.е. apply) к списку аргументов. Мне так каэцца
![]() P.S. А в чем более общая задача-то состоит?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 30.03.2012
Сообщений: 101
|
Общая задача состоит в том, чтобы работал функционал ) То есть функция (foo), одним из параметров которой является функция, передаваемая как параметр. К примеру (foo '+ '(1 2 3)) уже в твоем варианте работать не будет. Я хочу понять, почему правильная синтаксически с точки зрения языка конструкция выдаёт ошибку. Особенность ли это реализации именно AutoLISP'a. Вот тут http://homelisp.ru/help/classic_funct.html#FUNCTION приведен точно такой же пример и он почему то работает. Подозреваю, что _Дима знает ответ )
|
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
См. в "Библиотеке" функцию dwgru-error-catch и примеры ее использования.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
Друзья я приболел - и не заглядывал в интернеты, gomer ответил все верно. Первопричина разночтений лежит глубже. Есть два принципиальных отличия в различных диалектах лиспа - это наличие или отсутствие (ну или отсутствия по умолчанию) т.н. замыканий - проще говоря какие значения имен будут использоваться во время выполнения функции - которые заданы на момент ее выполнения, либо которые заданы на момент определения функции (естественно только "внутренних" имен, а не аргументов). У каждого из них свои плюсы и минусы - я однозначный сторонник замыканий, (которые к моему сожалению не поддерживает автолисп), но это только мое мнение. Для того, чтоб частично устранить проблему отсутствия замыканий, там где без них "тяжко" используют "стандартный" прием - передают функцию как символ - которую принимающая функция выполнит посредством (apply ...), но если ей будет необходимо - она сможет ее "замкнуть" посредством парсинга и "подмены" имен на необходимые значения. Этот прием практически не используеться в автолиспе (по крайней мере в сегменте dwg.ru - я не встречал, ну я от безисходности пару раз делал - если не понимать для чего они (замыкания) нужны, то и алгоритм планируешь без них - парадокс Блаба - а испорченным различными знаниями головам - это информация мешает "творить нормально" - извращаются). Отсюда и разница в синтаксисе например CommonLisp и Scheme (mapcar 'fn lst) против (map fn lst).
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Wolkodaw, пять минут:
http://forum.dwg.ru/showthread.php?t=20823
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Помогите дураку пожалуйста!
надо сжатие арибутов поменять у блоков. написал так: Код:
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы... |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
mkung, а чем не нравится (setvar "ctab")?
Vladimir_Sergeevich, так ты сначала получи указатель на описание блока... Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 05.09.2007
RUSSIA
Сообщений: 166
|
Ну, мне кажется это немного не то...
Вот получил я наконец-то активный вьюпорт на листе: Код:
ActiveSpace к нему не применяется видимо. Хочется сделать как-то поаккуратнее, поскольку командный вариант: Код:
Команда: Выберите дугу:_PSPACE Команда: Укажите начало выноски: Повторный вход в LISP невозможен. Неверная точка. Укажите начало выноски: Последний раз редактировалось mkung, 24.06.2014 в 14:44. |
|||
![]() |
|
||||
получил !BLKDEF
#<VLA-OBJECT IAcadBlock 21b35494> далее (vla-GetAttributes BlkDef) ; ошибка: ActiveX Server возвратил ошибку: неизвестное имя: GetAttributes ... что то не понял, как добраться до описания отрибута внутри описания блока? одна из мыслей: описание блока - это коллекция примитивов, поэтому надо vlax-for item? ... где то в строках 12-18 пишет ; ошибка: слишком мало аргументов не могу понять где. хотя понял (wcmatch (strcase (vla-get-objectname ent) "*ATTR*")) такогй функции не знал - закоментил - заработало
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы... |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Ну правильно, писал без проверок (не успевал). Вот более верный вариант:
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
ага, лишняя скобка потерялась
![]() только в таком виде мне все равно не надо, у меня в файле надо было обработсть под 2 стони блоков, что благополучно и сделал. Спасибо за помощь ![]()
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы... Последний раз редактировалось Vladimir_Sergeevich, 24.06.2014 в 15:26. |
||||
![]() |
|
||||
Регистрация: 05.09.2007
RUSSIA
Сообщений: 166
|
Добрый день.
Пытаюсь посчитать количество вьюпортов на активном листе. Написал: Код:
Пробовал разные варианты: со скобками и без, подставлять переменную, предварительно созданную CONS - ничего не помогает. Если подставить тупо (410 . "Первый лист") - то все нормально. В чем тут дело? И второй вопрос. У меня на одном листе 2 экрана, на втором еще 3. Если моя программка отрабатывает, то длину набора выбора пишет для первого листа 3, а для всего чертежа 8. Чего туда еще добавляется? Ну и, может быть, как получить именно количество вьюпортов? |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
(ssget "_x" (list '(0 . "VIEWPORT") '(67 . 1) (cons 410 xx)))
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 05.09.2007
RUSSIA
Сообщений: 166
|
|
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
При таких условиях, как в коде, только VIEWPORT и попадут.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 05.09.2007
RUSSIA
Сообщений: 166
|
Цитата:
У меня на одном листе 2 экрана, на втором еще 3. Если моя программка отрабатывает, то длину набора выбора пишет для первого листа 3, для второго 4, а для всего чертежа (без имени листа) 8. Получаю из набора по условию в коде (через sslength) |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Если хочешь получить все ВЭ - убери группу 410. См.DXF Reference
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 05.09.2007
RUSSIA
Сообщений: 166
|
Цитата:
Но при подсчете по программе для одного листа получаемое значение на 1 больше реального количества ВЭ, а для всего чертежа - на 3. На листе без ВЭ показывает 1. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Насколько я помню, один "виртуальный" ВЭ создается при активации пространства. Но не уверен - надо в справке копаться, а у меня сейчас нет времени
![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 21.04.2009
Тюмень
Сообщений: 97
|
Цитата:
(setq object_block (vlax-ename->vla-object (car (entsel)))) (setq object_block (vlax-safearray->list (vlax-variant-value (vla-GetDynamicBlockProperties object_block)))) (setq temp (vlax-variant-value (vla-get-value (nth 0 object_block)))) разобрал полностью, и по моей логике если последнюю строчку изменить на: (vla-put-value (nth 0 object_block) 2000) динамический блок должен стать не 1000 как исходный, а 2000 мм. Но он не становится таким. Выдает ошибку ; ошибка: Ошибка Automation. Неверный ввод. Что я неправильно понимаю в изменении свойства? |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Скорее всего, первый параметр не может принимать значение 2000. И посмотри http://www.caduser.ru/forum/index.ph...D=44&TID=36703 (сейчас перекину те коды на autolisp.ru - поскольку на caduser.ru уже черт-те сколько не появляюсь).
--- Перекинул: http://autolisp.ru/2014/06/27/dynblocks-parameters/
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. Последний раз редактировалось Кулик Алексей aka kpblc, 27.06.2014 в 14:39. |
|||
![]() |
|
||||
Регистрация: 21.04.2009
Тюмень
Сообщений: 97
|
Цитата:
|
|||
![]() |
|
||||
Регистрация: 05.09.2007
RUSSIA
Сообщений: 166
|
Добрый день.
При печати из модели по умолчанию Автокад устанавливает масштаб печати "Вписать". Есть пользователи, которые печатают "не глядя" (благо просмотр удобоваримый). Можно ли программно установить скажем 1:100? Чтобы отметка "Вписать" была уже осознанным действием. Заранее благодарен. |
|||
![]() |
|
||||
BIM, С#, AutoCAD, LISP Регистрация: 15.03.2006
Дуброво
Сообщений: 657
|
Добрый день!
Подскажите, пожалуйста, как получить путь к папке из которой был запущен лисп? Допустим, есть лисп D:\LISP\Lisp.lsp Мне нужно, чтобы после запуска лиспа он смог определить своё местоположение. На выходе нужно "D:\LISP"
__________________
"Молодой человек, Вы не представляете всей широты поставленной перед Вами задачи." © Панкратова Г.Е. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Средствами lisp'a - нереально. Александр Ривилис когда-то писал приложение GetLispInfo, но оно было для бог знает какого ACAD'a, и потом не развивалось (уточню: приложение писалось по моей просьбе; но потом надобность в нем отпала. Я и не стал Александра попусту терроризировать).
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
Крайне сложно - в теории лисп вобще не факт что откуда-то загружен (он может быть сгененирован другим лиспом). Самим лиспом никак (если только сделать специальный лисп который будет следить за системой). Поищи - уже обсуждалось.
з.ы. - ух уже понаписали...
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
Регистрация: 20.03.2008
Сообщений: 2,680
|
|
|||
![]() |
|
||||
BIM, С#, AutoCAD, LISP Регистрация: 15.03.2006
Дуброво
Сообщений: 657
|
Спасибо за ответы.
Цитата:
Хотел сделать миниустановщик, как в VetCAD. Чтобы установить VetCAD, нужно загрузить файл "SetupVetCAD_XXXX.arx". Он тут же запускается и прописывает нужные пути доступа. Но насколько я понял, это уже средствами arx нужно делать. Хорошо, средствами LISP не получится. В какую тогда сторону смотреть? net или arx?
__________________
"Молодой человек, Вы не представляете всей широты поставленной перед Вами задачи." © Панкратова Г.Е. |
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
Не принципиально, можно еще COM, а еще можно установщиком вначале записать в самом лиспе (в реестре) путь к нему-же. Я обычно ставлю установщиком в %appdata%...
__________________
Когда в руках молоток все вокруг кажется гвоздями. Последний раз редактировалось Дима_, 14.08.2014 в 17:23. |
|||
![]() |
|
||||
BIM, С#, AutoCAD, LISP Регистрация: 15.03.2006
Дуброво
Сообщений: 657
|
Дима_, пока что прописываю пути явно. В начале накидал переменных с путями.
Кулик Алексей aka kpblc, нашёл твою тему по этому поводу: http://www.caduser.ru/forum/index.ph...#message127730 по прочтению темы придумал, как можно быстро побороться с возможным переименованием имени сервера. Прописываю имя сервера в переменную в начале лиспа, нужные пути получаю strcat'ом
__________________
"Молодой человек, Вы не представляете всей широты поставленной перед Вами задачи." © Панкратова Г.Е. Последний раз редактировалось kha, 14.08.2014 в 17:40. |
|||
![]() |
|
||||
BIM, С#, AutoCAD, LISP Регистрация: 15.03.2006
Дуброво
Сообщений: 657
|
Нашёл, в каком месте взять путь к каталогу, из которого произведена последняя загрузка лиспа через диалог _appload.
После загрузки приложения AutoCAD прописывает путь в реестр: [HKEY_CURRENT_USER\Software\Autodesk\AutoCAD\RXXX\ACAD-AXXX:XXX\Profiles\[имя профиля]\Dialogs\Appload] параметр MainDialog Появился ещё один вопрос - как сделать так, чтобы лисп запустился автоматически после его загрузки через диалог _appload?
__________________
"Молодой человек, Вы не представляете всей широты поставленной перед Вами задачи." © Панкратова Г.Е. |
|||
![]() |
|
||||
Регистрация: 20.03.2008
Сообщений: 2,680
|
|
|||
![]() |
|
||||
BIM, С#, AutoCAD, LISP Регистрация: 15.03.2006
Дуброво
Сообщений: 657
|
skkkk, первым делом попробовал, но что-то пошло не так.
Сейчас получилось, благодарю ![]() UPD: понял. Я писал (test), а надо было (c:test) круто! теперь можно делать макросы для кнопок чуток попроще. вместо ^C^C(load "test") test можно писать ^C^C(load "test")
__________________
"Молодой человек, Вы не представляете всей широты поставленной перед Вами задачи." © Панкратова Г.Е. Последний раз редактировалось kha, 16.08.2014 в 20:51. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Добавить самовызов функции.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Да, так
![]() Учитывая, что отвечал я с телефона, думаю - мне простительно ![]() ----- добавлено через 21 сек. ----- Только что сел за комп...
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,515
|
Фигней страдаете, господа писатели. Есть нормальный способ загрузки, придуманный автодеском давным давно. Сейчас это выглядит как связка CUIX и MNL. Это самый простой вариант, в котором есть и меню и панели инструментов с иконками. Причем команды подгружаются из строго определенного места. Более того, в cuix можно прописать нужные лиспы и они будут подгружаться автоматически. Хотя ИМХО это уже лишнее. Из mnl все что нужно и так прекрасно подгружается
|
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
gomer, http://adn-cis.org/posledovatelnost-...v-autocad.html и http://adn-cis.org/autocad-autoload-security.html видел?
![]() ![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,515
|
Видал, вот из-за таких деятелей и наворотили непотребностей. а ведь все так красиво начиналось... а кончилось фондом помощи детям зимбабве... а кто теперь эти реакторы пользует? Еще раз повторюсь, чтоб не возникало вопросов типа а откуда ж у меня лисп загрузился, нужно разобрать авгиевы конюшни в системе и грузить все из одного места, обычно это
Код:
|
|||
![]() |
|
||||
Регистрация: 20.03.2008
Сообщений: 2,680
|
С этой стороны не все ли равно, где прописать слово test: в макросе на кнопку или в теле файла *.lsp?
И зачем же каждый раз подгружать лисп? Я вижу, правда два оправданных варианта: 1. Тестирование и отладка кода происходит не во встроенном VLIDE, а в блокноте. Тогда нажатие на кнопку будет каждый раз подгружать измененный код и запускать его на исполнение. 2. Запуск функции необходим при старте Автокада. Дабы не лезть в acad.lsp или acaddoc20XX.lsp, добавляем файл в автозагрузку - и он грузится при старте и тут же исполняется (например, создаются слои, стили размеров, вставляются форматки и т.д.) В случае с кнопкой для рядового пользователя подгружать лисп стоит лишь в том случае, если он еще не загружен. Конечно, загрузка происходит очень быстро и незаметно, но это как-то плохо, не по Фен-Шую что ли... |
|||
![]() |
|
||||
BIM, С#, AutoCAD, LISP Регистрация: 15.03.2006
Дуброво
Сообщений: 657
|
skkkk, чтобы было по Фен-Шую можно поставить проверку на загрузку лиспа: ^C^C(if (= c:test nil) (Load (findfile "test.lsp")) (c:test)).
Хотя да, смысл теряется. Макрос проще выглядит без автозапуска лиспа: ^C^C(if (= c:test nil) (Load (findfile "test.lsp"))) test Как только появляется молоток, сразу же всё вокруг кажется гвоздями ![]() За это спасибо, всё голову ломал, как бы от редактирования acaddoc20XX.lsp уйти.
__________________
"Молодой человек, Вы не представляете всей широты поставленной перед Вами задачи." © Панкратова Г.Е. Последний раз редактировалось kha, 18.08.2014 в 18:42. |
|||
![]() |
|
||||
Прошу критики и помидоров, дабы понять, в том ли направлении мыслю в целом.
Код:
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы... |
||||
![]() |
|
||||
1. почему не надо отключать эхо? привзку отключать тут не надо
2. как то не приходило в голову, что у кого то рука поднимется на такое кощунство 3. все привязки делаются только в модели ибо там же и ось и вся ситуация 4. слизано с полещука - что бы функция возвращала nil в случае когда условие не выполняется. перечитал, подумал, наверно соглашусь, лишее... з.ы. проверил 2: Укажите точку: [Другая ось]неверное значение аргумента: AcDbCurve 2130622808 можно спокойно задать другую ось и продолжать ваять
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы... |
||||
![]() |
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,515
|
|
|||
![]() |
|
||||
Идею понял, но... кроме entsel в самом начале и getpoint 3 раза пользователь ничего не вводит, ему на координаты что ли смотреть?
кстати, ради интереса закомментил - разницы никакой не обнаружил, значит можно совсем убрать
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы... |
||||
![]() |
|
||||
А что понимается под правильной призязкой? на мой взгляд, в данном случае, не надо задавать никаких спец режимов привязки, отличных от "рабочего" набора привязок.
Я понимаю, что бывают ситуации, когда надо только один конкретный вид привязки (и даже делал такое), но не считаю этот случай таковым
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы... |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Я несколько раз пытался понять, чего надо получить... Оказалось выше моего понимания. Может, такой код будет более устойчивым (код из #2231 у меня работал "как бог на душу положит"):
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. Последний раз редактировалось Кулик Алексей aka kpblc, 25.08.2014 в 15:54. |
|||
![]() |
|
||||
мать моя женщина... Алексей, я десятка 2 привязок посадил - ничего не увидел странного... а твой шедевр я еще месяц раскуривать буду
![]() поясни, что ты имел ввиду под "бог на душу", представить не могу, желательно с пояснениями что и зачем добавлено.
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы... |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Vladimir_Sergeevich, у меня твой код через раз на ровном месте (то при попытке выбора первой оси, то при попытке ввода точки) выдавал ошибку. Кстати, я у себя тож одну ошибку нашел (уже исправил). А логика-то работы проста как 3 копейки:
1. Получаем первую ось. Если пользователь нажал Esc или правую кнопку (то есть ни шиша не выбрал), то просто уходим с выполнения 2. Дальше аналогично запрашивается вторая точка. Если пользователь нажал правую кнопку, то вместо точки запрашивается "вторая ось". 3. Дальше, если в п.2 выл выбран объект (а не точка), повторно запрашиваем точку. Заодно гарантированно преобразовываем объекты в ActiveX (можно было и в другом месте это сделать, но я оставил как есть - писалось-то все "на коленке") 4. По полной аналогии с п.1 запрашиваем точку вставки и угол поворота текста. 5. Вставляем текст в пространство, в котором находится "ось". Если пользователь нажмет Esc в любом запросе, или укажет непонятно чего - код выполняться не будет. P.S. По-хорошему надо бы контролировать тип примитивов "осей", но мне уже лениво ![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 05.03.2012
Санкт-Петербург
Сообщений: 20
![]() |
Просмотрел много тем про работу с атрибутами блоков. С тем, как в лиспе присваивать им новые значения, примерно понял. Но не могу этого проверить для своих нужд. А именно:
Есть мелкий работающий лисп, вставляющий несколько блоков. Для первого блока точка вставки указывается кликом, для остальных точка вставки пляшет уже от нее приращением координат. Первой точкой всегда служит угол рамки чертежа, которая тоже является блоком (динамическим). В исходном лиспе она никак не фигурирует, т.е. она просто есть в модели изначально и все. И вот появилось желание дополнить эту рамку атрибутом с номером листа И прописывать этот атрибут в процессе работы моего лиспа. Загвоздка вышла с тем, как обратиться к атрибуту именно того блока, на который был сделан клик. Вот в начале я получаю эту точку: Код:
Код:
И далее мне нужно обратиться к атрибуту блока с известным названием и известной точкой, лежащей на нем. Можно ли определить нужный блок вот так: Код:
|
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
результат функции (entsel ...) содержит как точку указания, так и ename выбранного блока.
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
Регистрация: 20.03.2008
Сообщений: 2,680
|
Цитата:
Цитата:
Код:
Код:
в итоге вся конструкция примет вид: Код:
|
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Код:
1. Пользователь может кликнуть совсем не на точке, "лежащей на блоке", а промахнуться 2. Кликнет не на блоке "название", а на другом. 3. Пользователь может нажать Enter. 4. Пользователь может нажать ESC. В любом случае все остальные действия будут бессмысленны. Правильно будет действовать только сам программист, да и то пока не забыл. А пользователь имеет право делать всё не так, и программист это должен учитывать. И писать код со всеми необходимыми проверками до "исполнения по существу". Код:
Далее смотреть код нет смысла. |
|||
![]() |
|
||||
Коллеги, кто поможет написать простенький ЛИСП?
Я начал прорабатывать блок-схему процесса но запутался и сам разобраться не могу. Описание: В модели содержатся несколько сотен и даже тысяч блоков, обычных и динамических. Часть блоков имеет набор атрибутов, предназначенных для создания спецификации. Имена блоков соответственно уникальные, но не знаю имеет ли большое значение - из каких символов и какая длина имени блоков - имена абсолютно разные и по длине и по типу применяемых символов... Важно учесть, что обработка блоков должна по идее выполнятся поштучно (поочередно), если блок динамический и можно применять групповой выбор, только если блок статистический. Критерии обработки: 1) Блок должен содержать атрибут "марка" (причем у динамического блока имя одно и то же, а значение атрибута "марка" разное) 2) Блок не должен содержать атрибут "номер" со значением "б/п" (эти блоки нужно пропускать всегда) 3) Блокам с одинаковым значением атрибута "марка" должны быть присвоены одинаковые значения атрибута "номер" 4) Блоки, с пустым значением атрибута "номер" должны получить новое значение, при этом: 4.1 Изначально нумерация может быть хаотической, поэтому при первом запуске ЛИСП должен очистить все значения атрибутов "номер" не содержащих "б/п" на пустые значения. 4.2 После очистки ЛИСП присваивает в порядке возрастания всем блокам новые значения атрибутов "НОМЕР" в числовом формате 1.2.3.4.5.6.... и т.д. с условием соблюдения предыдущих пунктов 1-2-3 5) При повторном запуске ЛИСП проверят какой список значений получился во всех значениях атрибутов "номер": 5.1. Если список содержит пропуски типа 1.2.3_._.5.6. и нет новых блоков с пустым значением атрибута "номер" - переписать поочередно максимальные значение на пустующие. 5.2. Если имеются блоки с пустым значением атрибута "НОМЕР" (были добавлены новые блоки) - им присвоить очередные значения. Пример файла во вложении. Учитывая, что в лиспе пока вообще ни бум-бум... прошу объяснить с самого начала пошагово с реальными примерами. Последний раз редактировалось Sirius2w, 07.09.2014 в 13:46. Причина: Исправился. |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Sirius2w, есть спец.раздел. Называется "Поиск исполнителей". У этой темы и у этого раздела задачи иные.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Простите Алексей, но я результатом не планирую пользоваться единолично - хочу что бы и обсуждение было в широком доступе и результат тоже.
Так можно? Тем более условия вознаграждения тут не обсуждаем вообще. Только техническую сторону. Последний раз редактировалось Sirius2w, 05.09.2014 в 17:07. Причина: каюсь )) |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Sirius2w, ты же просишь не помочь тебе в разработке (объяснить скользкие моменты), а написать за тебя. Почему-то меня обуревают сомнения, что кто-то согласится...
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Цитата:
Прогресс конечно есть - не совсем ноль, начал к примеру с этого: (defun c:ATConsecutive_numbering () а как дальше - вообще не понятно. |
||||
![]() |
|
||||
Все, что нашел с помощью поиска не совсем подходит - нумерация блоков не учитывает, что блоки с одинаковым значением атрибута "марка" должны иметь одинаковый номер..((
Последний раз редактировалось Sirius2w, 09.09.2014 в 13:20. |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Лишняя открывающая скобка перед первым setq
----- добавлено через ~4 мин. ----- Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 25.10.2011
Сообщений: 132
|
Подскажите как из одного набора (selection set) получить другой набор, отфильтровав его
Например есть набор objSet Код:
Код:
|
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Основной вопрос - а потом что планируется делать с этими "поднаборами"? Может, будет проще сразу получать списки указателей на объекты и делать все чего хочется уже со списками?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 25.10.2011
Сообщений: 132
|
Цитата:
1. Список отрезков на слое "lay1" 2. Список отрезков на слое "lay2" 3. Список полилиний (тоже с каким-нибудь свойством) Потом с этими списками работать: анализ, дополнительные построения. Объекты желательны сразу в виде Active-x (vla-object), потому что, я смотрю, там методов хватит на все задачи и читать их проще. Фильтры от ssget мне показались самыми доступными для того, чтобы выбрать по свойствам. Но без них пока я вижу только один способ: получить один общий набор, пройтись по нему, преобразовав каждый примитив во vla-object, потом условия задавать на наличие нужных свойств. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Получаешь набор, преобразовываешь его в список и потом список уже фильтруешь. Хотя, не видя задачи, что-либо советовать сложно.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Нарисуй по окружности, отрезку и дуге в каждом листе и в модели. Перейди в лист, войди внутрь ВЭ и выполни такой код:
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Offtop: Как бы нет, но... В общем, можешь считать это моей придурью: я предпочитаю не работать такими методами.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
В порядке оффтопа
Offtop: Обычно с подобными "наборами" потом что-то надо делать: удалять, перемещать, менять свойства и т.п. ИМХО намного проще пройтись по такому "набору" чисто программными методами и сделать все "втихаря". Была бы видна конечная задача - можно было бы голову поломать. А так - это гадание на кофейной гуще.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Цитата:
Цитата:
Код:
----- добавлено через ~5 мин. ----- Если нужны списки, то немного по другому Код:
__________________
Как использовать код на Лиспе читаем здесь Последний раз редактировалось VVA, 13.10.2014 в 09:51. |
|||
![]() |
|
||||
Регистрация: 25.10.2011
Сообщений: 132
|
Спасибо
Это я уже опытным путем выяснил ![]() У меня еще вопрос: На этой странице в конце пример. Но он выдает ошибку "Automation Error. Problem in loading VBA" С чем это связано? |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Например, с тем, что у тебя "не тот" VBA. Обрати внимание: справка для AutoCAD 2015, и VBA-коды гарантированно будут работать только в 2015. С остальными версиями - как повезет.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 25.10.2011
Сообщений: 132
|
А если нужно, чтобы 1 список состоял из линий на слое "LAY1" и цветом красным, а другой - из линий на слое "LAY2"?
Просто мне кажется, что через ssget и фильтры запись намного короче (и читать проще). Я уже выше отписал как это можно сделать, и после этого перевести каждый selectionset в список объектов. ----- добавлено через ~2 мин. ----- Я у Полещюка сначала про эту функцию (vla-Eval) вычитал. Т.е. под 2005 автокад работает, под 2015 работает. А под 2011 нет нужного VBA ? Последний раз редактировалось tehkonst, 14.10.2014 в 23:25. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Вот чего не знаю, того не знаю: VBA не использую примерно с 2007 года.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Я хоть убей не понимаю необходимости использования vla-eval вместо обычного eval.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Скорее всего, это имя (или часть имени) переменной.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 10.08.2013
Сообщений: 11,499
|
Т.е, например, в определение функции
Код:
|
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Имя переменной / функции в лиспе не может содержать, насколько я помню, символы ";", "(", ")" и " ". Остальные, кажется, вполне допустимы. Ну и зарезервированные имена лучше не переопределять )))
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 20.03.2008
Сообщений: 2,680
|
Сергей812, тоже задавался в свое время этим вопросом. Пришел к однозначному выводу: двоеточие в имени функции или переменной есть не что иное, как система обозначений, принятая неким автором или сообществом авторов кодов для обеспечения (в том числе и себя же в последующем) понимания логики кода. Многие вместо двоеточия используют тире. Еще один пример: знаменитый Lee Mac предваряет свои функции префиксом LM:. Больше ничего это не значит. Исключение, по-видимому, составляет C:, вроде что-то еще было, но не припомню.
Вот, кстати, вспомнил про двоеточия в методах функции ssget. Насколько я разобрался, комбинировать можно ТОЛЬКО методы с двоеточием. И так и не смог разобраться, что означают и каким образом применять затронутые описанием у Полещука, как недокументированнные, методы, наследуемые от соответствующих функций ObjectARX ("M", ".", "#", ":O", ":$" и т.д.). Кто знает, о чем речь? |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Цитата:
И классический пример в AutoLisp Tutorial где все функции с префиксом GP: и пояснение Цитата:
|
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
tehkonst, намек: ты про зарезервированные слова наверняка слышал...
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Цитата:
И конечно нельзя "штатные" имена применять. Цитата:
Вот у меня для ввода точки куча функций: Код:
|
|||
![]() |
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,515
|
раз уж снова пошел такой срач
Цитата:
|
|||
![]() |
|
||||
Регистрация: 20.03.2008
Сообщений: 2,680
|
Цитата:
|
|||
![]() |
|
||||
Конструктор Регистрация: 10.03.2014
Якутск
Сообщений: 18
|
Цитата:
![]() А как можно сделать так чтобы (command "_rectang" pause pause) повторялось до тех пор пока пользователь не нажмет enter или space? |
|||
![]() |
|
||||
Конструктор Регистрация: 10.03.2014
Якутск
Сообщений: 18
|
Это не совсем то что мне нужно
Мне надо прервать _rectang без прекращения работы лиспа, чтобы лисп дальше выполнялся (defun c:.... () ........ (while (not ("Проверка нажатия enter или space")) (command "_rectang" pause pause) ) ........ ) |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Открываешь экземпляр MS EXcel, в нем получаешь указатель на коллекцию рабочих книг - и потом уже собственно открытие файла.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 20.03.2008
Сообщений: 2,680
|
Цитата:
Цитата:
Код:
|
|||
![]() |
|
||||
Регистрация: 27.01.2012
Сообщений: 242
|
|
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
kurstep, так ты свой вариант покажи
![]() ----- добавлено через 39 сек. ----- Туда же (первая ссылка по результатам поиска): http://forum.dwg.ru/showthread.php?t=8147
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 20.03.2008
Сообщений: 2,680
|
Вот и рассказал бы, как правильно, чем обзываться
![]() Почему я не могу для запуска цикла сначала их "заБУлить", а потом "заТОчить"? Чем чревата такая смена типа? Первый алгоритм, который пришел мне в голову. Может, я пропустил тот урок? ![]() Расскажи, пожалуйста, как правильно? |
|||
![]() |
|
||||
Регистрация: 24.10.2014
Сообщений: 3
|
приветствую. надеюсь, правильно понимаю, что вопросы новичков по лиспу можно задавать здесь.
посоветуйте, в какой книге удобно сведены в таблицы dxf-коды примитивов с описаниями возможных значений? а то как доходит дело до чего-то нового, пол дня парюсь что куда писать. конкретно сейчас меня интересует создание размеров. может и не через entmake это удобно делать, подскажите как принято. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Цитата:
Цитата:
ИМХО принято так, как удобно программисту. Можно через entmake, можно через vla, можно через командные методы - вариантов масса.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Конструктор Регистрация: 10.03.2014
Якутск
Сообщений: 18
|
Вот скриншоты, в настройках все по умолчанию я ничего не менял
Вот кусок кода (foreach item (_dwgru-conv-pickset-to-list ss1) (setq xx (vl-list* (vl-sort (mapcar 'cadr (vl-remove-if-not '(lambda (x) (= (car x) 10)) (entget item))) '<) xx)) (setq yy (vl-list* (vl-sort (mapcar 'caddr (vl-remove-if-not '(lambda (x) (= (car x) 10)) (entget item))) '<) yy)) ) |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Попробуй заменить ' на function. Например, так:
Код:
![]() P.S. Меня интересовало состояние меню "Debug", ну да ладно.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Конструктор Регистрация: 10.03.2014
Якутск
Сообщений: 18
|
Цитата:
![]() Цитата:
|
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Вот веришь - я тупо заменил ' на function и отформатировал код. Не больше.
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
конструктор Регистрация: 21.07.2007
Петрозаводск
Сообщений: 2,103
|
Цитата:
Цитата:
http://help.autodesk.com/view/ACD/20...6-D3C3C349475B |
|||
![]() |
|
||||
Цитата:
Код:
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы... |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Это справедливо только при создании выровненного (Aligned) размера...
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
дык, такой и задуман был... параллельный как то даже не рассматривался, он мне в программном исполнении не нужен. и это всего лишь пример. Еще тут игрался с размером повернутым
з.ы. вспомнил про один вопрос, не так давно возникал... Ситуация такая: надо примитиву задать толщину (370 группа). когда она "по слою" entget её вообще не выдает, соответственно subst её найти не может и entmod получает исходный список... В таком случае надо дописывать проверку наличия данной группы и добавлять её другим способом? (я, что бы долго не думать, пошел через vla-put...)
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы... Последний раз редактировалось Vladimir_Sergeevich, 05.11.2014 в 11:36. |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Как материал для размышления (код сперт с "САПР на базе"):
Код:
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 24.10.2014
Сообщений: 3
|
с созданием размеров через entmake вроде разобрался, не смог понять только одно - как выбрать аннотативный масштаб для размера? в dxf-reference не могу нужных кодов найти, вроде перенес максимум значений из заранее созданного размера, но всё равно не выходит.
Код:
|
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Голову ломать немного лениво: http://autolisp.ru/2011/03/17/howto-...tyle-or-block/
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 24.10.2014
Сообщений: 3
|
Цитата:
я подразумеваю использование программы с определенным шаблоном чертежей, в котором уже содержится нужный мне аннотативный размерный стиль, мне нужно создать размер в этом стиле. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Создаешь стиль и потом устанавливаешь ему аннотативность, или размер - и потом уже аннотативность для объекта. Какая в принципе разница?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Offtop: Сто лет уже так не поступал...
Может, дело в отсутствующем progn ?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 10.08.2013
Сообщений: 11,499
|
|
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Я копирую описания блоков через ObjectDBX - как-то мне такой подход больше понравился.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
В таком случае "тащится" многовато мусора.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
КИП, АСУ ТП, слаботочка Регистрация: 02.09.2010
Москва-Тюмень
Сообщений: 422
|
Приветствую!
ПРошу подсказать пути решения. Если последним объектом в чертеже является блок с атрибутами, к примеру, "AN_1", и его запоминаем по ENTLAST, добавляем новые объекты в чертеж, а потом "вдруг" обнаруживаем появление дополнительных объектов - атрибутов последнего блока ("AN_1"). Как с этим бороться? Пока придумал такое - вставлять любой текстовый объект, после выполнения программы его удалять. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
А этот блок вставляется руками или программно? Если программно, то получить указатель именно на него вообще не вопрос.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Здравствуйте!
Есть такая конструкция: Код:
Но есть одно неудобство - чертёж каждый раз масштабируется (аналогично _zoom extend). В старых версиях Автокада этого масштабирования кажется не было и было намного удобнее. Проблема упоминается здесь: http://forum.dwg.ru/showthread.php?t=36250 http://forums.autodesk.com/t5/pointi...i/td-p/4399367 Я пробовал сообразить что то такое Код:
Или вообще стоит избавится от command и написать как то по-другому, но мне важнее результат и что бы это было на автолиспе. PS если удастся сделать то сразу надо наверное будет добавить подобную конструкцию: Код:
|
||||
![]() |
|
||||
Регистрация: 20.03.2008
Сообщений: 2,680
|
Цитата:
Код:
Цитата:
Код:
Последний раз редактировалось skkkk, 18.11.2014 в 15:03. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
ucsfollow, кажется, надо поменять. Могу ошибаться
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
|
||||
![]() |
|
||||
Конструктор Регистрация: 10.03.2014
Якутск
Сообщений: 18
|
Здравствуйте!
Недавно нашел здесь на форуме lisp VVA по сортировке текстовых примитивов Код:
И написал lisp который делает набор по списку координат Код:
Так вот когда пытаюсь отсортировать текстовые примитивы выбранные f_multi_set, функция f_sel_txt_x сортирует их неправильно. (f_sel_txt_x (f_multi_set (список точек)) -1) Подскажите пожалуйста что не так? ![]() |
|||
![]() |
|
||||
Цитата:
Вот это видео правда сделано на 2010 Автокаде, но 2012 ведёт себя так же: http://tinyurl.com/m5enjsb При выполнении _.plan _c , т. е. план в текущей системе координат, чертёж зуммируется полностью. При этом в чертежах, особенно генпланы, бывают отдельные примитивы случайно или по необходимости отнесённые далеко от основного чертежа. Тогда затем приходится долго зуммировать до нужного фрагмента. Если это делать часто - неочень удобно. "_.zoom" "_p" - выручает. Но при этом сбивается поворот относительно системы координат, а это аннулирует все удобства UCSFOLLOW = 1. Это как раньше были кульманы у которых вращался угольник. Мне нужно что бы при этом вращалась и моя голова. Это обеспечивается установкой UCSFOLLOW = 1. То есть у меня например ось под углом 60 градусов. Я выбираю ПСК по объекту: ucs > new > object. При этом происходит смена ПСК и сразу же и поворот вида ортогонально новой ПСК, что иногда очень нужно. Но при этом же происходит и масштабирование, что не удобно и чего в старых версиях кажется не было. Если UCSFOLLOW = 0 то такой проблемы нет, но и "голова не вращается". Хотел написать скрипт. Но основная проблема в том что (command "_.zoom" "_p") сбивает поворот вида. |
||||
![]() |
|
||||
Регистрация: 20.03.2008
Сообщений: 2,680
|
Это точно 2010? Судя по видео, там есть автозавершение функций в комстроке, а оно появилось, вроде в 2012-м, по крайней мере у меня в 2011-м этого нет. Вряд ли в 2010-м было... Или я не знаю, как его включить?
Заявляю со всей ответственностью: в 2011-м по факту выполнения _USC _OBJ масштабирования не происходит. Сказать что-то больше я просто не могу, т.к. не имею под рукой Автокада 2012 ![]() |
|||
![]() |
|
||||
Да, точно он, 2010. Автокомплит в нём есть, чему я несказанно рад. Странно что в Автодеск его не додумались его включить раньше. Этой вещью давно пользуется всё прогрессивное человечество -) В любом случае спасибо за наблюдение. Будет под рукой 2011 - проверю.
|
||||
![]() |
|
||||
Я его ни как не включал. Пользуюсь клавишей TAB и у меня работает. Вспомнил: у нас стоял 2011. На нём это то же работало, клавишей TAB.
Но у меня не выводится список комманд. Я просто перебираю табом, но меня это категорически устраивает (я и так примерно помню нужные комманды, работаю уже давно без меню). |
||||
![]() |
|
||||
Регистрация: 10.08.2013
Сообщений: 11,499
|
Добрый день. Предистория: есть файл шаблона autocad с настроенными листами с форматами. На каждом листе есть блок основной надписи с именем "Основная_надпись_ЕСКД", расположенный на слое "Формат_ЕСКД". Требуется: вставить сверху (можно было в атрибутах - но это переделывать много сотен файлов) в определенное место на блоке текст вида "Авторский лист ХХХ".
Загвоздка: в зависимости от формата координаты местоположения блока основной надписи, естественно, разные. Написал следующий код: Код:
p.s. ( vl-load-com ) вызывается ранее, поэтому нет в функции. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
(setq n -9) - это к чему?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Файлик приложи. Навскидку я не понимаю, почему не работает.
P.S. osmode в принципе можно не снимать. А при entmake не помешает учитывать пространство (лист/модель), в котором объект надо создавать.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Два варианта кода. Первый пишет на всех листах один и тот же текст, второй - автоматически счетчик добавляет.
(defun c:Вставить_номер_авторского_листа (/ lincnamefile lnum lfile lsetblk n b1 lp lpx lpy lsosmode) (vl-load-com) (setq lincnamefile (strcat (vl-filename-directory (vla-get-fullname (vla-get-activedocument (vlax-get-acad-object)))) "\\" "Increment.txt" ) ;_ end of strcat ) ;_ end of setq (if (= (findfile lincnamefile) nil) (progn (setq lnum 1 lfile (open lincnamefile "W") ) ;_ end of setq (write-line (itoa lnum) lfile) (close lfile) ) ;_ end of progn (progn (setq lfile (open lincnamefile "R") lnum (+ (atoi (read-line lfile)) 1) ) ;_ end of setq (close lfile) (setq lfile (open lincnamefile "W")) (write-line (itoa lnum) lfile) (close lfile) ) ;_ end of progn ) ;_ end of if (if (setq lsetblk (ssget "_X" (list '(0 . "INSERT") '(8 . "Формат_ЕСКД")))) (foreach ent (vl-remove-if-not (function (lambda (x) (= (strcase (vlax-get-property (vlax-ename->vla-object x) (if (vlax-property-available-p (vlax-ename->vla-object x) 'effectivename) "effectivename" "name" ) ;_ end of if ) ;_ end of vlax-get-property ) ;_ end of strcase "ОСНОВНАЯ_НАДПИСЬ_ЕСКД" ) ;_ end of = ) ;_ end of lambda ) ;_ end of function ((lambda (/ item tab) (repeat (setq tab nil item (sslength lsetblk) ) ;_ end setq (setq tab (cons (ssname lsetblk (setq item (1- item))) tab)) ) ;_ end of repeat ) ;_ end of lambda ) ) ;_ end of vl-remove-if-not (setq lp (cdr (assoc 10 (entget ent)))) (princ (strcat "\nx=" (rtos (car lp) 2 14) "; y=" (rtos (cadr lp)) "; space=" ) ;_ end of strcat ) ;_ end of princ (if (not (entmakex (append (list '(0 . "MTEXT") '(100 . "AcDbEntity") '(100 . "AcDbMText") ) ;_ end of list (mapcar (function (lambda (x) (assoc x (entget ent)) ) ;_ end of lambda ) ;_ end of function '(67 8 410) ) ;_ end of mapcar (list (cons 10 (list (- (car lp) 22.5) (+ (cadr lp) 47.8))) '(40 . 2.) '(71 . 1) '(72 . 5) (cons 1 (strcat "Авторский лист " (itoa lnum))) '(41 . 185.) '(7 . "штамп") '(11 1.0 0.0 0.0) '(50 . 0.0) '(73 . 1) '(44 . 1.) '(210 0. 0. 1.) ) ;_ end of list ) ;_ end of append ) ;_ end of entmakex ) ;_ end of not (princ (strcat "\nCan't write " (itoa lnum) " value")) ) ;_ end of if ) ;_ end of foreach ) ;_ end of if ) ;_ end of defun (defun c:testssget (/ lsetblk n b1 lp lpx lpy) (vl-load-com) (setq lsetblk nil) (setq lsetblk (ssget "_X" (list '(0 . "INSERT") '(8 . "Формат_ЕСКД")))) (setq n (sslength lsetblk)) (while (> n 0) (setq b1 (ssname lsetblk (- n 1))) (if (= (vla-get-effectivename (vlax-ename->vla-object b1)) "Основная_надпись_ЕСКД") (progn (setq lp (cdr (assoc 10 (entget b1)))) (setq lpx (car lp)) (setq lpy (car (cdr lp))) (princ (strcat "\nX=" (rtos lpx) " Y=" (rtos lpy) "\n")) (setq n -9) ) ;_ end of progn ) ;_ end of if (setq n (- n 1)) ) ;_ end of while ) ;_ end of defun Код:
Я не добавлял метки начала/конца отмены, это уж сам ![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 10.08.2013
Сообщений: 11,499
|
Кулик Алексей aka kpblc, спасибо, буду разбираться. Второй вариант. Так как смысл этой программки - в одной папке лежит куча файлов *.dwg, объединенных через подшивку. И когда приходит информация со стройки о очередном изменений - делается копия проекта и выпускаются новые авторские листы, каждый из которых должен иметь свой уникальный номер в пределах проекта. И таких папок еще по корпусам немало. И народ просто путается в запарке, в какой папке какой следующий номер можно взять.
И поскольку каждый вызов команды - это один лист, то метки отмены не вижу смысла ставить - ведь текстовой файл не "откатиться" сам назад. А вот что лисп не проверяет и не удаляет эту надпись на листе, если существует-это мой косяк) |
|||
![]() |
|
||||
Регистрация: 10.08.2013
Сообщений: 11,499
|
Разобрался вроде - оказалось, ssget "_X" работает не с активной вкладкой, а со всем чертежом. И возвращает набор из всех блоков основной надписи во всех листах. Соответственно, всегда получал координаты только первого блока вне зависимости от активной вкладки. Как вариант - можно было делать проверку не только на имя блока, но и выдергивать из 410 группы название листа и сравнивать с ( getvar "CTAB").
Появился один вопрос: если переменная для хранения набора локальная - то при выходе из функции ей автоматически будет присвоено значение nil? Чтобы закрыть открытый набор... |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Цитата:
![]() Да.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 10.08.2013
Сообщений: 11,499
|
Ключ "_A" не дал эффекта выбора текущего пространства.. справку читаю - там вообще убрали этот ключ. В книге "AutoLisp и VisualLisp в среде AutoCAD" разница между ключами описывается как: "_A" эквилентно "_X" с пустым фильтром.
|
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Насколько я помню, ключ "_А" давал автоматическую фильтрацию по текущему пространству...
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
При очередном вызове сборщика мусора (прямом или автоматическим).
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Цитата:
Цитата:
Код:
Код:
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
VVA, кажется, в каких-то версиях AutoCAD ключ "_А" обрабатывал именно текущее пространство. Похоже, я ошибался
![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 10.08.2013
Сообщений: 11,499
|
Цитата:
Код:
|
|||
![]() |
|
||||
автоматизация и организация черчения Регистрация: 17.11.2009
Sterlitamak
Сообщений: 135
|
Здравствуйте!
Как же тяжело и долго даётся мне visual lisp, с autolisp было немного попонятней. Будьте добры подскажите, как сделать предпоследнее выражение, оно пропущено в коде Заранее спасибо, Код:
__________________
слесарь САПР |
|||
![]() |
|
||||
автоматизация и организация черчения Регистрация: 17.11.2009
Sterlitamak
Сообщений: 135
|
Сергей812, огромное спасибо
Вы сэкономили мне несколько часов поисков ![]() Вот изобретаю свой велосипед лиспик для программного создания блоков. Понимаю что есть уже готовые лиспы, но разбираться в них не позволяет мой уровень знаний. На основе него планирую создание полноценного блока. Этот блок (так то он стандартный "_Dot", но хочу его создавать программно) в свою очередь будет учавствовать в программном создании стиля мультивыноски (код подсмотрел у А. Кулика).
__________________
слесарь САПР |
|||
![]() |
|
||||
Регистрация: 10.08.2013
Сообщений: 11,499
|
А чего искать? Если надо перебрать все элементы в наборе - то нужен цикл, для activeX это обычно vlax-for. А работа с свойствами примитива - vla-put-%Имя свойства% (установка) или vla-get-%Имя свойства% (получение).
----- добавлено через ~16 мин. ----- И чего то меня терзают смутные сомнения - а нельзя ли добавлять сразу в набор при программном рисовании примитивов? Тогда не надо вспомогательного слоя создавать, делать потом выборку.. Сохранил текущий слой, переключился в нулевой... |
|||
![]() |
|
||||
автоматизация и организация черчения Регистрация: 17.11.2009
Sterlitamak
Сообщений: 135
|
Сергей812, да можно и сразу добавлять, в обычном лиспе я бы так и сделал, но в методах ActiveX вообще не силен.
Полещука почитываю, но тяжко даётся. Поэтому и хотя бы как-нибудь нужно было поместить в набор, благо в этом же учебнике примеры на глаза с vla-Select с выбором по слою попались. Вот в учебнике есть это, но не расписано, что и для чего, какие массивы и по какому принципу создаются, инфа скудная увы, (vla-Select actsel acSelectionSetAll nil nil (vlax-safearray-fill (vlax-make-safearray vlax-vbInteger '(0 . 1)) '(0 8)) (vlax-safearray-fill (vlax-make-safearray vlax-vbVariant '(0 . 1)) '("Line" "_LVR_"))) Буду потихоньку разбираться, считаю все-таки у vlisp плюсов больше по сравнению с lisp.
__________________
слесарь САПР |
|||
![]() |
|
||||
В продолжение темы о блоках. я делал _ArchTick через dxf.
Код:
А сейчас возник вопрос: насколько будет жизнеспособно создание полилинии методами activx (и, скажем, не только их), сохранив границы описания блока в dxf? или я уже слишком размечтался...
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы... |
||||
![]() |
|
||||
Конструктор Регистрация: 10.03.2014
Якутск
Сообщений: 18
|
А как условие остановки написать? Я этого не могу понять
![]() И какое значение при первом проходе вместо ksicir поставляется? И как осуществляется поиск решения? Мне кажется нужно написать условие типа ksicir(i-1) не должно отличаться от ksicir(i) больше чем на 0.001 ![]() |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Curiosity, почитай разбор рекурсии: http://elpanov.com/index.php?id=10
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Геодезист Регистрация: 09.02.2012
Сергиев Посад
Сообщений: 6
|
Здравствуйте люди добрые.
Вот и я пришел к мысли что нужно изучать лисп, т.к. пользуюсь автокадом давно вот и решил разобраться и начать писать программки для себя. Пока я лиспе полный "0" Поставил перед собой задачу, наверное для ГУРУ это простая задача, написать лисп который вычитает,или складывает из одного числа, записанного как текст, другое число, также текст. Результат действия третье число. тоже текст. Алгоритм действия пользователя: 1 Тыкаю мышкой на первое число 2 выбираю действие (+ или -) 3 Тыкаю мышкой на второе число 4 Тыкаю мышкой куда нужно поставить результат Так вот первая проблема это как переменной задать выбранное число? Не допру какая функция отвечает за "тык мыши"? |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Тебе не "тык мышой" надо, а получение примитива. entsel в помощь.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
Вариант 1: назначить функции функции от 1-го аргумента (это будет описание ошибки в виде строки) имя *error* - где произвести необходимые манипуляции по восстановлению.
Код:
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
Геодезист Регистрация: 09.02.2012
Сергиев Посад
Сообщений: 6
|
Цитата:
![]() Про решение моей задачи есть тема http://forum.dwg.ru/showthread.php?t...EA%F1%F2%EE%E2. Взяв за основу буду разбираться и доводить ее для своих целей. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 12.01.2015
Сообщений: 261
|
В 2015 версии появилась новая функция COMMAND-S.
Ее надо использовать вместо VL-CMDF и COMMAND, если функция вызывается с заранее заданными аргументами и не подразумевается никаких действий пользователя во время ее вызова. Синтаксис функции command-s: (command-s [cmdname [arguments ...]]). Синтаксис функции command: (command [cmdname [arguments ...]] ... [cmdname [arguments ...]]). При адаптации древних Lisp'ов при тупой замене command на command-s выполняется только первая команда остальные команды игнорируются с продолжением работы без прерывания и сообщения об ошибке. Более детально лезть в код лень. Что посоветуете? P.S. В 2015 с command в работе лиспа нареканий не обнаружил. |
|||
![]() |
|
||||
Регистрация: 20.03.2008
Сообщений: 2,680
|
Боюсь, что кроме как бороться с ленью тут ничего не посоветуешь... На мой взгляд, самый изящный вариант выхода описан здесь, но все коды придется доработать.
В смысле? Вроде как command в 2015-м не работает. Сам проверить не могу - нет 15-го, это я по сообщениям форума сужу. Были также предложения просто заменить во всех лиспах command на vl-cmdf, но поведение их порой отличается, и на результатах работы программы сказаться может в худшую сторону. Довольно редко, но я с этим сталкивался. Последний раз редактировалось skkkk, 12.01.2015 в 13:49. |
|||
![]() |
|
||||
Регистрация: 21.04.2009
Тюмень
Сообщений: 97
|
Помогите, пожалуйста, с сортировкой списка:
Есть набор динамических блоков в автокад. Блоки преобразованы во VLA-объекты. Необходимо отсортировать список из VLA - объектов (названий блоков), но по их длине. Никак не могу понять как привязать коэффициент перебора номера блока k: (vl-sort-i ars_list_blocks '< (vlax-variant-value (vla-get-value (car (vl-remove-if-not '(lambda (x) (= "ars_distance" (vla-get-propertyname x))) (vlax-safearray->list (vlax-variant-value (vla-GetDynamicBlockProperties (nth k ars_list_blocks)))))))))) где ars_list_blocks-список, созданный функцией list, возвращает значение, типа (#<VLA-OBJECT IAcadBlockReference 19733bf4> #<VLA-OBJECT IAcadBlockReference 19744bf5> #<VLA-OBJECT IAcadBlockReference 19538gh4>) |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
на выбор:
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Минуту. Ты просил:
Я так понял, что нужно было именно имя блока. А если нет - то получай соответствующее значение определенного свойства дин.блока и сортируй по нему. Принцип не меняется ни на йоту.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 21.04.2009
Тюмень
Сообщений: 97
|
Хорошо, попробую, спасибо
![]() Пол-дня бьюсь, никак не выходит((( голову скоро сломаю... Как заменить vla-get-effectivename на код по извлечению длины? Задача состоит в том, чтобы отсортировать список ИМЕН (VLA-адресов) блоков, но по их длине (свойство "ars_distance"). Получается что-то вроде двойной сортировки. Последний раз редактировалось Wolkodaw, 14.01.2015 в 12:55. |
|||
![]() |
|
||||
Регистрация: 12.01.2015
Сообщений: 261
|
Я не программист, английского не знаю. В середине 90-х пересел от
кульмана к компьютеру. Каюсь, первое время расстояние на мониторе мерял линейкой. Познакомился с lisp'ом, dcl в объеме книги Ю. А. Кречко В. В. Полищук "Автокад 13: новые возможности" Москва "Диалог-МИФИ" 1996. Связки DCL-LSP по параметрическому вычерчиванию прослужили без проблем от R12 по AutoCAD 2014. Беглая проверка на ACADVER = "20.0s (LMS Tech)" показала их работоспособность. По совету skkkk изучил тему "Mapcar, foreach и AutoCAD 2015". Очень понравилось решение VVA (#8) и идея пакетной обработки roaa (#13). В результате родилось следующее: Замена command на функцию adapt С учетом синтаксиса функции command: (command [cmdname [arguments ...]] ... [cmdname [arguments ...]]) На вход adapt подается список: Код:
Код:
затраты на преобразование кода (strcat (rtos x 2 n) "," (rtos y 2 n)). Можно ли обойтись без этих затрат? Но продолжает грызть вопрос: нужна ли адаптация если нет вложений command в mapcar или foreach? ----- добавлено через ~15 мин. ----- Прошу прощения. На вход adapt подается список: Код:
Последний раз редактировалось Кулик Алексей aka kpblc, 15.01.2015 в 10:23. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
В какой "отдельный файл"? В текстовый?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Это было неочевидно.
Есть команда _.wblock, есть вариант выполнять через ObjectDBX копирование объектов (vla-CopyObjects). Что больше нравится? ![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 05.09.2007
RUSSIA
Сообщений: 166
|
|
|||
![]() |
|
||||
Регистрация: 20.03.2008
Сообщений: 2,680
|
А почему бы сразу не создавать этот набор методами ActiveX? Но если уж так хочется "превращений" (может, там у ssget фильтр какой-нибудь незаурядный по плану) , то, наверное, как-то так:
Код:
![]() Совершенно не понимаю, что означает эта строка Либо туговато соображаю с утра, либо одно из двух. Что за цифры 2 и 3? Что за координаты? Координаты вершин четырехугольника неправильной формы? Видовой экран должен быть непрямоугольным? Трапецевидным? Тогда в него нужно "превращать" полилинию, если я ничего не путаю. Можно приложить файл dwg с изображением желаемого эффекта? Offtop: Одни Гарри Поттеры, блин ![]() |
|||
![]() |
|
||||
Регистрация: 15.04.2014
Сообщений: 14
|
skkkk
Я имел в виду следующее. В автокаде можно разделять экран на несколько видовых экранов (два вертикально, 3 вертикально, горизонтально) в модели. Но чтобы мне удобно поделить модель на 2 видовых экрана мне приходиться создавать их большое количество а потом пользуясь инструментом "объединить видовые экраны" создавать 2 видовых экрана со смещенным центром. Рассматривая учебник по написанию программного кода я обнаружил функцию (Vports) которая может показать значения координат видовых окон. А вот самому задать эти значения у меня не получается ![]() Последний раз редактировалось Dima_90, 27.01.2015 в 08:52. |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Цитата:
Но в этом уже давно нет нужды. Если множество Layout с любыми плавающими ВЭ. И нет никакой необходимости "создавать большое количество", а потом "объединять". Подумайте об организации своей работы, а не об обработке списков. |
|||
![]() |
|
||||
Регистрация: 15.04.2014
Сообщений: 14
|
ShaggyDoc
Не совсем понял Вашу мысль. Я согласен с тем, что подготовить чертежи к выпуску, работая с листами намного проще и удобней в большинстве случаев (особенно если добавлять в ЛИСТ несколько видовых экранов). Но в моих проектах (электрика) существует множество дискомфорта с подобной организацией работы. Может быть я не совсем понятно написал что же я хочу сделать, поэтому распишу подробно мой случай. У меня стоит на рабочем месте 2 монитора разной диагонали и разрешения. Я при работе растягиваю окно Автокада на 2 монитора и делю пространство модели на пополам по вертикале. В моем случае получается что рабочая область находиться на одном мониторе, а вспомогательная область на другом. НО т.к разрешение мониторов разное, то получается что автокад при делении на пополам (по пикселям) модель, не по полам делит изображения на два монитора (граница деления проходит на мониторе с большим разрешением). Чтобы решить данную проблему я делю пространство модели на очень большое количество по вертикали, потом эти видовые экраны модели объединяю таким образом, что полоса деления модели по "полам" проходит между двумя физическими мониторами. Затем я сохраняю этот новый видовой экран модели и могу в данном файле в пару кликов его подгружать. Но в другой файл я не нашел как его импортировать. Из-за этого приходиться в каждом новом файле его создавать заново утомительным способом. И вот недавно я нашел функцию Vports, которая если взять в скобочки, то даст размеры видовых экранов модели. Вот теперь я хочу создать несколько строчек программного кода который у функции (Vports) поменяет данные на те, которые я укажу. Потом это можно будет завязать на кнопку и делить экран под мои мониторы за один клик. Моя проблема состоит в том, что у меня не получается в функцию Vports записать список моей информации. |
|||
![]() |
|
||||
Регистрация: 05.09.2007
RUSSIA
Сообщений: 166
|
Спасибо - работает.
Да я бы с радостью. И нашел уже vla-select, но что-то пока с safearray не въезжаю... Задача вобщем-то примитивная - создать наборы объектов по существующим слоям и записать в отдельные файлы DWG. Последний раз редактировалось mkung, 27.01.2015 в 14:42. |
|||
![]() |
|
||||
Регистрация: 10.08.2013
Сообщений: 11,499
|
А разве нельзя запись в макрос (рекордер операций) последовательность действий и вызывать в новом файле?
|
|||
![]() |
|
||||
Регистрация: 15.04.2014
Сообщений: 14
|
Сергей812
Записать макрос когда можно и мышкой и клавиатурой и лентой пользоваться не получается, т.к при повторении в новом файле макрос сбивается. Возможно получиться если вручную все прописывать, но это хлопотно и не универсально (на других ПК с другими мониторами его надо будет переписывать). А вот если как то получаться в эту функцию (Vports) мои значение задать то это будет намного проще. Может надо через ключи какие то, или переменные посреднические прописать. Подробнее о данной функции, чем в учебнике, страницы которого я выкладывал, информации нигде не нашел. |
|||
![]() |
|
||||
Регистрация: 20.03.2008
Сообщений: 2,680
|
Цитата:
ShaggyDoc, анахронизм анахронизмом, а до сих пор поддерживаются они еще Автодеском. Тут прочитал, что в 2015-й версии добавили к этим экранам возможность перемещать границы мышью. Об организации работы, конечно, думать надо, и очень основательно, но ведь можно найти и случаи, когда такая модель работы будет очень кстати. Из спортивного интереса попробовал разобраться с этими VPORT'ами. При настроенной на четыре видовых экрана модели получил конфигурацию видовых экранов модели: Код:
Код:
И вот что это? Глюк моего Автокада 2011 или еще какие-то точечные пары лишние в списке? Терпение и труд все перетрут ![]() |
|||
![]() |
|
||||
Регистрация: 15.04.2014
Сообщений: 14
|
skkkk
Я не силен в программировании, но читать немного умею программные коды. Помню в одном из случаев по каким то причинам так же не присваивались значения к функции, и в этом случае вводили переменную, прописывали что там могут быть целые числа, потом присваивали к переменной список точечных пар через оператор List, а уже потом получалось значения этой переменной применить к функции. Может в этом случае так же надо. Сам я пробовал подобное написать, но что то ничего не вышло. |
|||
![]() |
|
||||
Регистрация: 27.01.2015
Сообщений: 2
|
День добрый граждане, большая просьба помочь с написанием макроса.Изо дня в день выполняю одни и те же действия,захотелось упростить себе работу.Итак на входе имеем файл,в котором имеется контур объекта,выполненный замкнутый полилинией,на вершинах которой расположены блоки,все блоки имеют одно имя,по сути одинаковые.Нужно сделать следующее: полилинию сделать красным цветом(что не сложно) а на вершинах проставить черные точки,ну или окружности заполненные черным цветом.Что делаю я-захожу в редактор блоков одного из блоков, заштриховываю черным цветом,сохраняю-в итоге все блоки черного цвета.
Макрос пока получается такого вида ^C^C-блокред bl_119 _hpname;SOLID;_bhatch Но дальше пока ничего неполучается(. |
|||
![]() |
|
||||
САПР Регистрация: 29.09.2011
СПб
Сообщений: 283
|
В вершинах полилинии расставляет штриховки солидом черного цвета на текущем слое непрерывным типом линии с весом 0.0
Выделяешь нужную полилинию, вызываешь макрос. В '(40 . 1.3) вместо 1.3 поставь нужный тебе радиус. Код:
__________________
На работе было скучно:shout: |
|||
![]() |
|
||||
Регистрация: 27.01.2015
Сообщений: 2
|
Огромное спасибо за отклик,но автокад выдает следующее "ошибка: синтаксическая ошибка"P.S. акад 2009
|
|||
![]() |
|
||||
Регистрация: 01.08.2011
Сообщений: 90
|
добрый день! понадобилось мне из region сделать pline. А так как этих регионо у меня много (порядка 4000) - обычные способы, типа взорвать, или boundary создать - не вариант. Порывшись в интернете на зарубежном форуме нашел lisp для этого дела, вот только беда - он не поддерживает мультивыбора, т.е. опять же, надо все регионы выбирать по очереди. Помогите, пож, его переделать, если это вообще возможно
Код:
|
|||
![]() |
|
||||
Регистрация: 10.08.2013
Сообщений: 11,499
|
Найти пример перебора выделенных элементов (набора) на лиспе и скрестите)
Код:
Код:
Код:
|
|||
![]() |
|
||||
Регистрация: 01.08.2011
Сообщений: 90
|
|
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Ясно, разница между командами и функциями неочевидна, хотя VVA ее отлично описал: http://dwg.ru/pub/9
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 12.01.2015
Сообщений: 261
|
В функциях Кулик Алексея aka kpblc из темы "Проверка файла и dimpost" с autolisp.ru
(defun _lispru-error-sysvar-save-by-list (lst / res) * Сохранение состояния системных переменных (defun _lispru-error-sysvar-restore-by-list (lst) * Восстановление состояния системных переменных. не понял как они работают при сбойном завершении программы. Есть ли решение проблемы восстановления переменных в этом случае? |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Для этого надо писать обработчик ошибок (функцию *error*) или использовать vl-catch- функции (на autolisp.ru я показывал варианты и одного, и другого).
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 05.09.2007
RUSSIA
Сообщений: 166
|
Несколько вопросов:
1. (повтор) как программно к конфигурации печати ( например DWG To PDF.pc3) подключить файл описания принтера (например DWG To PDF New.pmp)? 2. Как из программы вызвать "проводник" - окно сохранения(открытия) файла? 3. Нужно сохранить файл перед обработкой. Как это сделать быстрее? Если использовать SaveAs - активной становится копия и при большом файле геморройно открывать старый-закрывать новый. Если через SSGET "_X" и потом WBLOCK - то можно ли быть уверенным, что чертеж будет идентичным? Заранее благодарен. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Цитата:
startapp 1. (command "_.save") 2. (vla-save ... 3. Похожую задачу делал на http://adn-cis.org/forum/index.php?t...sg7171#msg7171 , но результат оказался никому не нужным. Код оставил просто "на память". Теоретически - да. Практически - еще вопрос.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 05.09.2007
RUSSIA
Сообщений: 166
|
Цитата:
|
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Сходи по ссылке, почитай обсуждение.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
Это "локализация по месту" имени res - чтоб не засорять пространство имен - vlax-for устроен, так сказать, не в концепции лиспа - это чисто итеративная функция, а в функциональном стиле подобную "встроить" поленились - по факту функция берет vla коллекцию "VLA_ITEM" и возращает список ее item'ов - я тоже приодически использую подобнцй костыль - только "VLA_ITEM" у меня вынесен как аргумент.
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
а у любого лиспа любую скобку(и) убери он уже по другому заработает, а в "пустоте" запускается только-что созданная функция.
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Или так:
(apply (function (lambda (/ res) (vlax-for sub VLA_ITEM (setq res (cons sub res) ) ) (reverse res) ) '()) ЗЫ пишу с планшета, так что код не проверял и не тестировал. Могут быть косяки ![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Цитата:
![]() P.S. Еще один вариант: Код:
Ну и еще один (просто работать не хочу - сил нет ![]() Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 12.01.2015
Сообщений: 261
|
В прошлом веке познакомился с lisp'ом в объеме книги Ю. А. Кречко В. В. Полищук "Автокад 13: новые возможности" Москва "Диалог-МИФИ" 1996. В книге четко прописано ограничение: "... хотим добавить новый примитив, то должны использовать команды отрисовки или редактирования Автокада. Это ограничение связано с желанием защитить ГБД от неграмотного программиста: ...". Благодаря воспитательному эффекту форума обнаружил две новые для себя функции: entmake и entmakex. Безусловно такой подход на порядок, два увеличивает скорость работы lisp'а, существенно облегчает проблему отслеживания значений системных переменных. Но страх испортить ГБД остался.
На сколько защищена работа этих функций от действий "обезьяны с гранатой"? |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
А кто выступает в роли "обезьяны"? Если программист, но ничего не поможет. Если пользователь - то это более безопасно.
P.S. Кстати, прорекламируюсь-ка, пожалуй ![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 12.01.2015
Сообщений: 261
|
Алексей, спасибо за оперативный ответ. От ошибки не соответствия dxf кода типу данных не застрахован и квалифицированный программист.
(entmakex '((0 . "LINE") (10 0. 0. 0.) (11 100. 10. 0.) (8 . "СлойОтрезка") (62 . 1) (6 . "Continuous") (370 . 25) (210 0. 0. 1.) ) Например после кода 8 вставлены координаты кода 11. Что будет в этом или подобном случае? |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
В данном случае - скорее всего, ничего. Будет создан отрезок на слое "СлойОтрезка" (если слой не существует на момент вызова кода, слой будет создан с настройками по умолчанию). Для других примитивов (в частности, LWPOLYLINE) порядок следования кодов может оказаться критичным.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
При работе в лиспе - вообще не критично, я думаю. Примитив (если его возможно создать) моментально создается в БД чертежа. Если допустима операция по модификации - то и изменения вносятся.
P.S. Есть разница между установкой свойств через entmod и через ActiveX, но в данный момент они некритичны, мне так каэцца ))
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
О, пока сообразил и не забыл: ты отдаешь себе отчет, что примитив отрезка у тебя будет создан только в текущем документе и только в текущем пространстве? То есть если ты находишься в модели, то он будет создан в модели. если активно пространство листа - то в листе. А если ты оказываешься в режиме редактирования блока - то только внутри описания блока? При этом результат может оказаться немного неожиданным, если ты вдруг вошел в контекстное редактирование блока.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Просто в режим контекстного редактирования блока можно войти и "почти случайно" ))) Постарайся учесть такое развитие ситуации.
Учитывая, что ты работаешь только в пространстве модели, не забывай про принудительное указание групп 67 и 410.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Цитата:
Но с тех пор очень многое изменилось. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 12.01.2015
Сообщений: 261
|
Редактирование через базу данных выполняется в следующей последовательности:
(setq nm (car (entsel)) ;Извлечение имени примитива (или иным способом) sp (entget nm) ;Список из базы данных sa (assoc dxf_код sp) ;Извлечение интересующего члена списка (Код параметр) sn (cons dxf_код ...) ;Формирование нового члена (Код Измененный_параметр) sp (subst sn sa sp) ;Замена старого члена на новый ) (entmod sp) ;Обновление базы данных При использовании entmake(x) по логике следует тоже применить entmod. Просмотрев примеры я не обнаружил в них обновления базы данных. Правильно ли я понимаю, что функции entmake, entmakex выполняют действия функции entmod. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Цитата:
По какой логике? Нет. Не путай создание и модификацию уже созданного.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
конструктор Регистрация: 21.07.2007
Петрозаводск
Сообщений: 2,103
|
Подскажите, какой путь решения на ваш взгляд лучше у такой задачи: есть mtext, в нём несколько строк, разделённых "\P", надо получить список строк, например "abc\Pdef\Pjhi" -> ("abc" def" "jhi"). Можно работать только с исходной строкой vl-string-search, можно преобразовать vl-string->list и дальше работать со списком кодов, или надо совсем не так?
|
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 12.01.2015
Сообщений: 261
|
Разыскал бумажный вариант Полещук Н.Н. Visual LISP и секреты адаптации AutoCAD. - СП.: БХВ-Петербург. Разобрался.
PS Правильно, модификация ![]() ----- добавлено через ~8 мин. ----- Что может entmake сверх того что выполняет entmakex? |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Wolkodaw, ты бы хоть примерно написал, чего хотишь получить...
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 12.01.2015
Сообщений: 261
|
Выкладываю свой первый результат наставлений Учителя (посты 2434, 2436, 2438, 2440, 2442 и 2447). Алексей, если найдется время, взгляни, дай замечания и ответь на вопросы:
1. В каких случаях не допускается применение entmakex вместо entmake? 2. Ограничение на точечную пару с кодом -1 прописано в книге Н. Полещука. Распространяется ли это ораничение на точечные пары с кодами 330 и 5? 3. Не понимаю точечную пару с кодом 100. Когда следует ее включать с список? Замена command на entmakex Код:
|
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Посмотри DXF Reference: в 5 группе хранится Handle объекта (задается самим AutoCAD). 330 - т.н. "мягкий" указатель на созданный объект (тоже от AutoCAD'a). -1 : тоже связано с указателями, насколько я помню (пишу с планшета). Так что задавать эти параметры бесполезно.
Группа 100 необходима при создании сложных примитивов типа полилиний - это точно. Касаемо текстов - кажется, для однострочных его можно пропустить, а для многострочных он обязателен. И разница между entmake и entmakex только в возвращаемом значении в случае успеха: один возвращает список (аналог entget), второй - указатель на созданный примитив. А так больше вроде бы ничего у них и не различается.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Проектирование мостов Регистрация: 29.01.2014
Новосибирск
Сообщений: 431
|
Товарисчи, подскажите решение в лиспе.
http://forum.dwg.ru/showpost.php?p=1...&postcount=733 Интересует циклическое повторение ввода данных вручную, до нажатия пользователем Enter или Esc |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
RNB, тебя научить надо? Тогда добро пожаловать (в качестве начального варианта): http://autolisp.ru/2009/09/13/error-catch/ + http://autolisp.ru/2012/03/16/user-request/
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Алексей, еще вопрос про DXF 100: есть ли где то инфа про то, где и сколько таких групп надо?
Например, тут их по две: Код:
Код:
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы... |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Vladimir_Sergeevich, скажу честно: я почти всегда создаю через ActiveX - это нередко удобнее (особенно при работе внутри описания блоков или в неактивном документе).
Правда, это не касается размерного стиля - если его создавать или модифицировать лиспом, то кроме как entmake / entmod, ничего не срабатывает (я на autolisp.ru на эту тему как-то высказывался).
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 12.01.2015
Сообщений: 261
|
Огромное спасибо за ответы!
И еще вопрос по коду 62 (cons 62 (atoi (getvar "cecolor"))) - неудачное решение, getvar может вернуть строку "BYLAYER" или "BYBLOCK". Кроме того, кажется где-то в 2002-2005 версии, встречал возврат не целым числом, а словом с именем цвета. Первое, что приходит в голову - cond с нудным перечислением случаев. Где посмотреть варианты решения? |
|||
![]() |
|
||||
Цитата:
Самое интересное, что для групп 50 и 51 в ActiveX свойства есть только для одного (по крайней мере для 50 я в справке не откопал) и даже если поменять 51, картинка не менялась, хотя значение, вроде как, запоминалось.
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы... |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
trushev, насколько я помню, если не указывать 62 группу, то примитив создается с текущим цветом (cecolor).
Vladimir_Sergeevich, вариантов на самом деле несколько: 1. Менять свойство Normal для vla-представления примитива. Возможно, потом понадобится выполнить vla-update для примитива 2. Для замены DXF-групп я уже давно использую код http://autolisp.ru/wp-content/upload...-autoregen.lsp + http://autolisp.ru/2013/11/19/partia...-ent-to-ename/ Как правило, хватает.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Проектирование мостов Регистрация: 29.01.2014
Новосибирск
Сообщений: 431
|
Цитата:
Код:
Последний раз редактировалось RNB, 27.02.2015 в 08:10. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
vl-catch-all-apply (если обратиться к справке) применяет функцию к списку аргументов:
(vl-catch-all-apply 'function list) Т.е. (vl-catch-all-apply (function (lambda() .... ) - просто другая форма записи (ИМХО - отлаживать такой код проще). Я не знаю, что хочется получить. Но как вариант: Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Проектирование мостов Регистрация: 29.01.2014
Новосибирск
Сообщений: 431
|
|
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
(arx) - и сверяй результаты
Средствами lisp - никак. Когда-то Александр Ривилис писал arx-приложение, показывающее загрузку lsp. (atoma-family 1) - может быть, оно сработает как надо
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 05.09.2007
RUSSIA
Сообщений: 166
|
; ошибка: no function definition: ATOMA-FAMILY
Понял... atoms-family Вроде и работает, но (if (member "C:TEXTFIT" (atoms-family 1)) (princ "YES!!!") (princ "NO!!!")) - пишет "YES!!!" (if (member "C:TXT2MTXT" (atoms-family 1)) (princ "YES!!!") (princ "NO!!!")) - пишет "NO!!!!" хотя функция определена (EXPRESSTOOLS) Последний раз редактировалось mkung, 27.02.2015 в 13:45. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Советую почитать http://autolisp.ru/2015/01/21/mleader_create_order/ - при создании мультивыноски командными методами можно наступить на очень обидные грабли.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Проектирование мостов Регистрация: 29.01.2014
Новосибирск
Сообщений: 431
|
Цитата:
|
|||
![]() |
|
||||
Проектирование мостов Регистрация: 29.01.2014
Новосибирск
Сообщений: 431
|
2 вопроса.
1. Код:
2. Подскажите как программно выделить все объекты на одном слое. Ну или как заморозить все слои кроме текущего. ----- добавлено через ~9 мин. ----- UPD На вопрос 1 ответ нашел. Проблема в решетке в названии слоя. |
|||
![]() |
|
||||
Регистрация: 20.03.2008
Сообщений: 2,680
|
Выделить все объекты слоя указанного объекта:
1. Во всех пространствах: Код:
Код:
Код:
Код:
Последний раз редактировалось skkkk, 04.03.2015 в 02:17. Причина: (vl-load-com) |
|||
![]() |
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,515
|
все просто: запомнили, выключили, включили. главная фишка в другом. автокад никогда не заморозит текущий слой, так что можно смело морозить все...
обнуление cmdecho просто скрывает предупреждение автокада, что он не может заморозить текущий слой, а заодно и все остальные действия command |
|||
![]() |
|
||||
Проектирование мостов Регистрация: 29.01.2014
Новосибирск
Сообщений: 431
|
|
|||
![]() |
|
||||
Регистрация: 02.02.2015
Сообщений: 22
|
Здравствуйте уважаемые. Осваиваю autolisp.
Есть задача, периодически менять текст в документе. Выделяю текст, нахожу имя примитива и сохраняю его в файл. Потом считываю строку из файла и пытаюсь изменить текст, но ничего не выходит. Как я понял проблема в типе переменной. До сохранения в файл переменная была типа ENAME. После чтения STR. Подскажите можно ли преобразовать тип переменной, что бы можно было модифицировать текст? Если нет, то как еще можно решить данную задачу? |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
trushev, dxf reference утверждает, что это идентификатор вершины. Правда, почему у LWPOLYLINE он всегда равен 0 (проверял в ACAD2014) - пока непонятно.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 10.08.2013
Сообщений: 11,499
|
|
|||
![]() |
|
||||
Проектирование мостов Регистрация: 29.01.2014
Новосибирск
Сообщений: 431
|
|
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
RNB, прочитай публикацию "Как использовать лисп, опубликованный на форуме" - там все написано.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Проектирование мостов Регистрация: 29.01.2014
Новосибирск
Сообщений: 431
|
|
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
(defun <ИмяФункции> (Параметры) <...>) : вызывается как (<ИмяФунции> Параметры)
(defun c:<ИмяКоманды>() <...>) : вызывается как (c:<ИмяКоманды>)
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 02.02.2015
Сообщений: 22
|
Здравствуйте.
Хочу сделать такую функцию: пользователь указывает примитив, нажимает кнопку с функцией, функция должна узнать слой в котором находится примитив, и дать пользователю возможность выбрать объекты. Проблема в том что не работает такая вот конструкция: Код:
Если кто знает как это победить, помогите пожалуйста. |
|||
![]() |
|
||||
Alexll, три раза прочитал - ничего не понял...
(ssget "_I") - соберет то что было выделено до начала выполнения кода. Если надо собрать примитивы по слою как у выделенного объекта, то что то типа такого: Код:
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы... |
||||
![]() |
|
||||
Регистрация: 02.02.2015
Сообщений: 22
|
Недавно начал осваивать LISP поэтому тут даже вопрос не в наличии готовых программ, а в обучении. А заодно и что то полезное для себя сделать.
(ssget "_I") действительно собирает то что было выделено. Но после этого не поступает второго запроса на выбор (вторая строка). LISP как будто объединяет эти два запроса. Если перед выполнение программы ничего не выделено, то он запрашивает выделение. Если если было что то выделено, то второго запроса на выделение не следует. Но при том оба набора qq и qq1 существуют, но они одинаковые. А вот допустим если написать код setq qq (ssget)) setq qq1 (ssget)) то после первого запроса на выделение, происходит второй. И я получаю два разных набора. |
|||
![]() |
|
||||
(ssget) без опций при активном выборе срабатывает как (ssget "_I") и сбрасывает выбор (судя по экспериментам). В итоге у тебя получается два одинаковых набора.
попробуй между строками прописать (sssetfirst nil nil)
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы... |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Насклько я помню, не всегда: регулируется значением системной переменной PICKFIRST
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Алексей, а как часто PICKFIRST ставят в "0"? В моем понимании, это чаще случается случайно по непонятным пользователям причинам и вызывает панику у них же.
Сам в нюансы работы ssget особо не вникал, использовал только с конкретными опциями и кучей фильтров.
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы... |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Vladimir_Sergeevich, это как карта ляжет...
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Возник вопрос о граблях ActivX...
Читал умную книжку и вычитал, что "...нужно заботиться о выделении памяти..." (это было про создание безопасных массивов)... По логике, потом ведь надо это пространство памяти освободить (вычистить) или автокад сам этим занимается? И еще вопрос, на какой стадии надо начинать отслеживать/замерять объем памяти требуемой для программы, что бы все не рухнуло?
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы... |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
В принципе в ACAD была функция (gc) - но ее вызов лично у меня никакого результата не давал. ACAD, как правило, сам занимается чисткой памяти.
Другой вопрос, что при обращении к сторонним приложениям надо принудительно эти приложения либо закрывать, либо релизить (см. vlax-release-object) для освобождения памяти основного процесса. Цитата:
![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Тут я не совсем четко сформулировал... допустим на начальных стадиях изучения Lisp я работал сугубо командными методами и спустя пол года подошел к программному методу. тут я думаю вообще можно особо не заморачиваться такими вещами (надеюсь я прав?). Последние пару лет потихоньку начинаю использовать объектные методы и вот тут, наверно, уже надо как то заглядывать вперед. Пока что у меня в арсенале точно нет таких, где бы я создавал safearray и прочие преобраозования типов.
это например, когда считываю .xlsx делаю (close "....")
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы... |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
При чтении *.xls* через Excel последовательность будет такова:
Создать указатель на объект MS Excel (может быть, его придется создавать) Создать указатель на коллекцию Workbooks Открыть документ Создать указатель на WorkSheets Создать указатель на WorkSheet Прочитать данные Освободить указатель на WorkSheet То же, WorkSheets То же, WorkBooks То же, Excel Ну, по крайней мере, примерно так: я с Excel напрямую уже давненько не работал, подробностей не помню
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Ну это-то понятно. Вопрос в другом: можно получить указатель на внешний объект и засунуть его в локальную переменную функции. При выходе из функции указатель не обнулится, а просто потеряется - что не есть гуд.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 10.08.2013
Сообщений: 11,499
|
не лисп, но в тему - Работа с COM-объектами
|
|||
![]() |
|
||||
вот я примерно про это и спрашивал, что память загадить можно и все рухнет, вопрос только когда это произойдет...
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы... |
||||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Цитата:
Цитата:
Цитата:
Конечно, сейчас памяти "немеряно" и с этим можно никогда не столкнуться. Но память сейчас на 90% занята всякими "рюшечками и бантиками" и для серьезных программ это надо учитывать. А ещё лучше всегда "мыть руки с мылом", т.е. обходиться минимумом глобальных, "обнилять" ненужное, не надеяться на автоматическую сборку мусора. |
|||
![]() |
|
||||
Такое тоже есть, только для активного документа делал, а именно dxf сгенерированного робуром. Здесь обходился вообще без глобальных переменных.
И все таки не понял одного момента: локальные переменные тоже надо обнулять, или при завершении функции они сами в мусор сваливаются?
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы... |
||||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Цитата:
Но указатель на такой объект может быть в лисповской локальной переменной. Я обычно делаю так: Код:
|
|||
![]() |
|
||||
Регистрация: 10.08.2013
Сообщений: 11,499
|
Цитата:
|
|||
![]() |
|
||||
Регистрация: 05.09.2007
RUSSIA
Сообщений: 166
|
Цитата:
(command "_insert" "Vyn" po 1 1 0 bl_name V) "_insert" – стандартная команда Автокад вставки блока; "Vyn" – имя вставляемого блока; (Если папка, в которой находится блок не прописана вспомогательных путях Автокад, в качестве имя нужно указать полный путь к файлу “D:\MyLisp\Vyn.dwg”) рo – базовая точка вставки блока; 1 – масштабный коэффициент по оси X; 1 – масштабный коэффициент по оси Y; 0 – угол поворота блока в радианах; bl_name – значение верхнего атрибута; V – значение нижнего атрибута; Вот только вместо установки атрибутов при данном варианте вылазит окно редактирования атрибутов. |
|||
![]() |
|
||||
может поможет _-insert?
хотя у меня окно вылетает только при вставке с палитры, а с инсерта в текстовом режиме. может какие то настройки системы влияют?
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы... |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
attreq в 0 - и используй командные методы
Или entmake / entmakex / ActiveX, ему фиолетово на эти переменные
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 10.08.2013
Сообщений: 11,499
|
|
|||
![]() |
|
||||
Регистрация: 05.09.2007
RUSSIA
Сообщений: 166
|
Цитата:
----- добавлено через ~2 мин. ----- Спасибо. Уже сделал командными методами, но этот вариант мне о-о-чень интересен! |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
mkung, attdia - за окно, а attreq - за запрос значений атрибутов.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 31.01.2007
Новосибирск
Сообщений: 1,040
![]() |
Вопрос к спецам по лиспу, как думаете...интересно просто в плане реализации (возможно/невозможно):
есть параметрический объект СПДС Графикса...арматурный стержень...фактически - отрезок, обладающий доп свойствами. Хотелось бы его удлинять и обрезать, но понятно что стандартные команды Автокада этого не делают. Возможно ли решить проблему с помощью лиспа? Растягивание же работает... Последний раз редактировалось Konstruktiv54, 20.03.2015 в 07:39. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Если СПДС GraphiCS установлена и загружена, то этот объект перестает быть прокси. Некоторые его свойства можно будет менять (ну или по крайней мере пытаться). Правда, для этого понадобится читать массу документации
![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 10.08.2013
Сообщений: 11,499
|
|
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Не преобразовывает, это точно. Но "закрытые" свойства становятся доступными )
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Подскажите пожалуйста, как проще добраться до точки центра и радиуса дугового сегмента полилинии lwpolyline: через dxf (есть там свойство 42 bulge и что он показывает я не очень понял) или activX (к чему я больше склоняюсь)?
Для activeX скорее всего надо копать в сторону vlax-curve-getSecondDeriv. только вот есть ли вторая производная у круга? что то я слабоват в математике стал...
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы... Последний раз редактировалось Vladimir_Sergeevich, 20.03.2015 в 18:11. |
||||
![]() |
|
||||
Регистрация: 20.03.2008
Сообщений: 2,680
|
Цитата:
Цитата:
|
|||
![]() |
|
||||
Регистрация: 02.02.2015
Сообщений: 22
|
Научите как из AutoLisp работать с базой данных.
Сам не программист, в AutoLisp то же новичок. Хотел написать программку облегчающую жизнь, данные сбрасывал в текстовый файл. Но очень уж неудобно работать с текстовым файл. Просмотрел команды AutoLispa и не увидел в нем специальных команд для работы с базами данных. Подскажите с какими базами проще работать SQL, Excel? И если можно то ссылки или примеры. Спасибо. |
|||
![]() |
|
||||
Регистрация: 10.08.2013
Сообщений: 11,499
|
Вы польстили Excel - он не разу БД не был)
А в целом-какая задача, в каком виде вводятся данные и выводятся. Кстати, текстовой документ с регулярной структурой можно легко импортировать в тот же эксель. И вы хоть что-то написали, или все закончилось на уровне хотелок?) |
|||
![]() |
|
||||
Регистрация: 02.02.2015
Сообщений: 22
|
Начал работать в проектировании года три назад. Узнал о AutoLispe с пол года назад. Как с ним работать понял пару месяцев назад. Написал штук пять небольших функций облегчающих жизнь, и вывел их на кнопочки.
Теперь возникла более глобальная идея, засунуть структуру проекта в файл, что бы не приходилось после каждого изменения вручную перелопачивать проект. Как это сделать, пока не представляю, но вариант с записью в десяток текстовых файлов рассматривал. Подумал что лучше это будет организовать через какую то базу данных. Так что в целом задача засунуть проект в базу данных, что бы данные измененные в одном месте, менялись во всем проекте.... |
|||
![]() |
|
||||
Регистрация: 10.08.2013
Сообщений: 11,499
|
В костроке autocad наберите _field.
----- добавлено через ~8 мин. ----- Если нужно оформление одинаковое оформление - то подшивка и настроенные листы, например. Если нужно сразу во многих местах чертежа иметь одинаковые значения - то дублирующиеся значения в виде полей, ссылающихся на то же пользовательское свойство чертежа. Не надо считать-что только лисп и программирование в целом является панацеей от всего. |
|||
![]() |
|
||||
Регистрация: 02.02.2015
Сообщений: 22
|
Да, штука хорошая. То же только недавно узнал. В нашей конторе никто ничем подобным не пользуется, поэтому спросить не у кого.
Но и "поля" я могу только использовать когда исходное значение в таблице. А вот когда значение написано отдельной текстовой строкой делать "ссылку" на эту строку у меня так и не получилось. Может посоветуете литературу какую по автокаду? А то чувствую у меня много пробелов. |
|||
![]() |
|
||||
Регистрация: 10.08.2013
Сообщений: 11,499
|
Этот форум почитайте для начала)
Offtop: Если эта строка - например, мультитекст в чертеже.. То в полях выбираете тип "объект", а затем через дополнительную кнопку-саму строку. Там вывалится список свойств выбранного объекта.. выбрать там значение |
|||
![]() |
|
||||
Проектирование мостов Регистрация: 29.01.2014
Новосибирск
Сообщений: 431
|
Такой вопрос возник. Знает ли кто, какой командой AutoCad выполняет редактирование текста мультивыноски?
----- добавлено через ~1 ч. ----- UPD. Разобрался. При выделенной мультивыноске _MLEADERCONTENTEDIT ----- добавлено через ~3 ч. ----- Спасайте, товарищи. Мозг сплавил. Как сделать так, чтобы после выполнения лиспа остались выделенные объекты? |
|||
![]() |
|
||||
Регистрация: 10.08.2013
Сообщений: 11,499
|
Может так ?
|
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Или через sssetfirst
![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Проектирование мостов Регистрация: 29.01.2014
Новосибирск
Сообщений: 431
|
Получилось и через _pselect и через sssetfirst
Собственно, добился от мультивыноски, чтобы она работала как надо с заменой слоя. Выкладываю варик с _pselect. С удовольствием выслушаю замечания Код:
|
|||
![]() |
|
||||
Регистрация: 10.08.2013
Сообщений: 11,499
|
копаться вглубь лень, но строчка 3 - почему не проверяете, существует ли уже данный слой? Проверяется одной строчкой вида (tblsearch "LAYER" %Имя слоя%) - если вернула nil, то тогда создаем. Иначе - просто делаем слой активным через "CLAYER". Естественно, перед этим значение нужно сохранить (setq lOldLayer (getvar "CLAYER")) и в строке 18 восстановить из этой переменной.
|
|||
![]() |
|
||||
Проектирование мостов Регистрация: 29.01.2014
Новосибирск
Сообщений: 431
|
Цитата:
Но и в этом варианте, думаю, достаточно будет _layerp, без переменных |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 02.02.2015
Сообщений: 22
|
Прежде чем написать вопрос, я поискал. Большая часть тем ссылается на пару существующих программ lispа. Но дело в том, что те программы создавались для других целей, и для того что бы узнать атрибуты в некоторых случаях надо подключать до пяти функций.
Поэтому и задал такой вопрос, в надежде что кто то скажет что типа "....эта команда выдает атрибуты блока по его имени". |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Такой команды нет. Получить указатели на атрибуты конкретного вхождения блока возможно - и любой пример это показывает.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 10.08.2013
Сообщений: 11,499
|
блок по сути -это контейнер, куда можно напихать примитивов, определений атрибутов и т.д. Так как структура данных никак не фиксирована - то получить и как-то работать с ними можно только последовательно.. начиная с верхнего уровня - вставки блоки..
|
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
gomer, я отвечал на вопрос
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 02.02.2015
Сообщений: 22
|
Итак, товарищи, почитал по форуму еще раз, теперь скажите прав я или нет.
получается что имя атрибута блока, всегда следует за блоком. И зная имя блока, с помощью команды entnext мы можем узнать имя атрибута. А уж из имени атрибута достать все его данные не сложно. Вопрос в том, всегда ли соблюдается это условие, что за именем блока следует имя атрибута? и не бывает ли это каким то образом перемешано? Если этот способ получения атрибутов блока надежный, то он меня устраивает. |
|||
![]() |
|
||||
Регистрация: 10.08.2013
Сообщений: 11,499
|
Дальше идут не какие то примитивы - а атрибуты)
Цитата:
|
|||
![]() |
|
||||
Помогите идеей пожалуйста. Есть чертеж трубы, создаваемой спец прогой, на нам надо найти два одинаковых числа и одно из них заменить. в общем случае все работает, за одним исключением.
1.нахожу в таблице отметку в поле Н8 (0 TEXT) 2.нахожу оба текста с этим значением (ssget "_X" (list (cons 0 "TEXT") (cons 1 val_h8))) ;;тут val_h8 - текстовая строка 3.изменяю тот, что не в таблице (их однозначно два и проверяю по точке вставки. например программа выдает 125,24, а надо Н8=125,24) Есть один момент, когда это не срабатывает: когда отметка 125,20. В таблице она пишется как есть с двумя знаками, а на разрезе, где надо добавить "Н8=" хвостовые ноли подавляются и соответственно "125,20" /= "125,2" Как еще можно реализовать подобный поиск? з.ы. (rtos x 2 2) так же выдает без подавления - проверил сразу... хоть впору сначала все числа обработать, что бы везде до 2х знаков было.
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы... |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Используй нечто типа (strcat "H8=" <Текстовая строка>)
Здесь <Текстовая строка> - прямо тот текст, который получаешь откуда надо.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
да я не о том спрашиваю. (strcat "H8=" <Текстовая строка>) есть у меня, тут ситуация хитрая:
напрямую найти отметку на разрезе я не смогу априори, ибо она может иметь любые координаты и любое значение. Но эта отметка дублируется в таблице. Из таблицы я нахожу значение этой отметки и, уже зная это значение, ищу два одинаковых текста. Зная координату того текста, что в таблице, его отбрасываю из рассмотрения и редактирую второй - тот что на разрезе. А ломается всё, только в частном случае, когда на разрезе у отметки обрезаны хвостовые ноли. з.ы. добавил картинку : 1 - отметка в таблице (по шапке её можно найти) 2 - та же отметка на разрезе. её то и надо править 3 - что должно получится в результате
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы... Последний раз редактировалось Vladimir_Sergeevich, 02.04.2015 в 09:19. Причина: добавил рисунок |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Преобразовывай в float, а потом в строку через rtos. Не то?
----- добавлено через ~14 мин. ----- Во, пока вспомнил: в "Готовых программах" были решения по преобразованию числа в строку с заданной точностью. Поищи.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. Последний раз редактировалось Кулик Алексей aka kpblc, 02.04.2015 в 09:38. |
|||
![]() |
|
||||
не то. (ssget "_X" (list (cons 0 "TEXT") (cons 1 val_h8))) ищет по строке из "1". Когда они одинаковы - находит оба и можно обработать.
если бы (rtos 125.50 2 2) выдавал "125,5" то прокатило бы, но он выдает "125,50" Код:
А ставить (rtos 125.50 2 1) приведет к тому, что перестанет работать случай равенства изначального. ("1" - 125,34, "2" - 125,34 проходя через rtos получится условие 125,3 /= 125,34) з.ы. вся загвоздка в нахождении отметки на разрезе, когда на разрезе и в таблице нет полного соответствия. Цитата:
порядок поиска не позволяет так сделать. неизвестно заранее какая точность округления должна быть
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы... Последний раз редактировалось Vladimir_Sergeevich, 02.04.2015 в 10:10. |
||||
![]() |
|
||||
Проектирование мостов Регистрация: 29.01.2014
Новосибирск
Сообщений: 431
|
Цитата:
если (rtos 125.50 2 1) = (rtos (125.50+0.0499999) 2 1) = (rtos (125.50-0.0499999) 2 1), то (rtos 125.50 2 1) иначе (rtos 125.50 2 2) |
|||
![]() |
|
||||
RNB, да как же объяснить что бы все уже поняли?
в #2556 есть рисунок. "1" - это то что я могу найти это может быть как 125,30 так 125,32 "2" - это то что надо найти и изменить. он, соответственно, принимает значения 125,3 или 125,32 Аллилуйа! Код:
Код:
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы... Последний раз редактировалось Vladimir_Sergeevich, 02.04.2015 в 10:39. Причина: добавил результат |
||||
![]() |
|
||||
Проектирование мостов Регистрация: 29.01.2014
Новосибирск
Сообщений: 431
|
Так "если (rtos 125.50 2 1) = (rtos (125.50+0.0499999) 2 1) = (rtos (125.50-0.0499999) 2 1)" и проверяет на 0 во втором знаке после запятой. Если оно выполняется, то ищем (rtos 125.50 2 1), если нет, то ищем (rtos 125.50 2 2)
|
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Ну блин, сказано что искать, сказано - где. И все равно...
http://forum.dwg.ru/showthread.php?t=15429 http://forum.dwg.ru/showthread.php?t=15661
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 20.03.2008
Сообщений: 2,680
|
|
|||
![]() |
|
||||
ну у меня стоит <1> Интересная конечно переменная, раньше с такой не сталкивался
![]() ну и, в конкретном случае, использование vl-princ-to-string выглядит лучше, чем изменение системной переменной (это же её еще надо запомнить и вернуть обратно) а эту функцию я оттуда и помню, правда давненько я ту ветку изучал, сразу и не припомнил
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы... |
||||
![]() |
|
||||
Регистрация: 20.03.2008
Сообщений: 2,680
|
|
|||
![]() |
|
||||
судя по всему она хранится в чертеже. у меня в шаблонах она равна 1. А в dxf, которые экспортируются из других прог она у меня 0 по умолчанию.
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы... |
||||
![]() |
|
||||
начинающий инженер-гидротехник Регистрация: 18.04.2010
Санкт-Петербург
Сообщений: 910
|
День добрый.
Для подписи закладных на чертеже использую код Lee Mac, который когда-то нашёл на theswamp. Лисп берёт данные из блока и чертит мультивыноску с этими значениями. Сейчас решил "модифицировать" лисп, чтобы текст, прописываемый в мультивыноске зависел от одного из атрибутов (в коде это at5). Но условие почему-то не срабатывает. При любом значении at5 выполняется второе выражение условия. Подскажите, что делаю не так. Код:
|
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Перед (if (= at5 0) поставь точку останова и проверь,чему у тебя равны соответствующие переменные
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Хочу критики и советов.
Пишу на досуге большую страшную прогу, но есть сомнения в рациональности подхода. Задача примерно такая: получаю 3 точки и по ним отрисовываю кучу всего. При этом необходимо просчитывать много других точек (пояснения в коде): Код:
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы... |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Я бы загнал все в цикл и внутри него уже делал. ИМХО получится проще, быстрее и короче.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
не совсем понимаю как это сделать. с одной точки максимум цепочка до 4 значений идет. разве что каким то боком прописать:
(foreach 'item (<список из rez sourse angle dist>) (setq pt_lst (sad-add-or-subst pt_lst rez (polar (cdr (assoc sourse pt_lst)) angle dist))) ;;тут rez sourse - номера кодов списка причем не явно , а cdr cadr и тд из item Ты об этом? Код:
![]()
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы... Последний раз редактировалось Vladimir_Sergeevich, 09.04.2015 в 13:59. Причина: начал описывать очередной вариант |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Ну примерно так. Хотя я подозреваю, что структуру списка можно сделать более удобной и простой - но для этого надо смотреть, где и как он формируется.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Весь список у меня состоит из пар кода и точки. на стадии получения исходных данных задаются коды 1 2 - начало и конец трубы 0 10 20 30 - уровни размерных линий
далее идет анализ содержимого, и получаем ключ (тип трубы) для дальнейшей работы и в границах cond для каждого случая прописано расширение списка в соответствии с нужными размерами и прочими потребностями. Собственно в #2575 и выложил расширение списка для последнего варианта. Дальше уже по этому списку ведутся построения размеров, а в одном из вариантов и полилиний дополнительных (те самые точки 101-116)
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы... |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Offtop: Скажу честно: у меня сейчас мозг затрмучен своими задачками, подробно вникнуть не могу
![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
И еще хочу попросить критики на такое творчество:
Код:
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы... |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Я бы задавал. Только с "перегрузкой": http://autolisp.ru/2009/10/21/lisp-overloading/
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Вот как я рисую полилинию.
Код:
1. Могут быть заданы Ширина, вес, тип линии. Слой всегда текущий, если нужен иной - устанавливается до вызова. 2. Все действия завернуты в ловушку ошибок. При сбое по каким-то причинам вернется NIL и сообщение 3. Список координат "нормализуется". Назначение функций с именами ru-xxx понятно из их названий. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Из-за того, что у меня иногда идет обновление или полное изменение функционала (при условии сохранения, я предпочитаю задавать один-два параметра. Ну, например, для создания той же LWPOLYLINE будет всего 2 параметра: первый - список оординат вершин, второй - список из необязательных параметров типа '(("lw" . <Вес>) ("lt" . <Тип>) ("color" . <ICA-цвет>) ...) Если во втором списке что-то пропущено, берем либо текущее значение, либо "по умолчанию" - зависит от назначения функции.
Но это дело вкуса ![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
Ну если критики - уже не раз писал, и "разжевывал", что использование append в цикле - это не православно.
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
Offtop: Исторически так сложилось, еще с первого курса пошло
![]() Дима_, по поводу append нашел только это: "для добавления одного элемента append, да еще и в цикле логарифмически увеличивает время выполнения". Это все интересно, но... видел еще пяток таких же способов формирования списка и как то альтернативы не попадалось и у самого не придумывается. (Да и не думаю, что придется строить линии больше десятка точек... по крайней мере пока что были максимум по 4) Дочитал там же замечание, что основной инструмент будет cons, но: Код:
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы... Последний раз редактировалось Vladimir_Sergeevich, 13.04.2015 в 07:34. |
||||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
В общем еще раз - список это не изменяемая стуктура. Функция cons не создает новый список а свзязывает "голову" с "хвостом" - то есть просто говорит - за данным элементом идет такой-то - в случае если "такой-то" это список - то мы можем пробежаться по данной цепочки от начала до конца, при том что в разных точках программы мы можем ссылаться на разные начала одного и того-же списка. В конец неизменяемого списка добавить ничего нельзя, функция append, создает новый список пересчитывая тем-же cons'ом свои аргументы. То есть на каждой итерации мы пересчитываем весь список заново, а если у нас программа чуть посложней и хранит ссылки на свои предыдущие шаги - то хранит она и соответственное количество одинаковых списков - да если и не хранит у Вас основное время не программа, а автоматический сборщик мусора работает.
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
Переработал функцию:
Код:
Алексей, прикрутил список необязательных параметров. Что то мне понравилась эта идея, переписал все три своих функции рисования ![]()
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы... Последний раз редактировалось Vladimir_Sergeevich, 14.04.2015 в 15:27. |
||||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
Я пишу несколько в другом стиле - сами судите - лучше Вам такая версия или нет - Вам пользоваться.
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
Дима_, я о том спрашивал, что исключил append из кода совсем. У меня нет таких глубоких знаний, как у Вас, о внутренностях и механике Лиспа и к советам стараюсь прислушиваться.
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы... |
||||
![]() |
|
||||
Есть вопрос по поводу (sssetfirst nil ss), а именно о подсветке примитивов внешних ссылок/блоков.
Собственно вершинки то показывает, но хочется немного другого. Например, выполняя _trim, при указании примитива внешней ссылки, примитив подсвечивается (становится пунктирным), как сделать так же программно?
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы... |
||||
![]() |
|
||||
ПенсионЭр Регистрация: 26.06.2009
Сообщений: 361
|
Здравствуйте!
Создаю макрос простановки направлений и длин фрагментов полилиний. Пока сваял вот такое (не без помощи VVA - http://forum.dwg.ru/showthread.php?t=121171 : Код:
1. макрос работает и без объявления переменных. Улучшится ли работа макроса, если их (переменные) объявить в строке "defun ()"? 2. Стоит ли выключать в начале и включать в конце привязки? 3. В М-тексте градусы обозначаются буквой "d". Как сделать замену на значок градуса (верхний кружок)? 4. В функции entmake создания М-текста непонятны строки с dxf-кодом 100. Ну, вторая строчка прямо указывает на М-текст. А первая?Что она означает? И, если это разные понятия, то почему обозначены одним dxf-кодом? 5. Что выполняет строчка (cons 41 19.35)? 6. Как дополнить макрос, чтобы он, кроме полилиний, работал и применительно к отрезкам? 7. Почему-то разные М-тексты получаются разной высоты. У одного фрагмента полилинии, например, высота букв 2.0, у другого 2.2, у третьего - 1.8. Как добиться однообразия? 8. Укажите на явные "ляпы" и потенциальные трудности, чтобы знать, в каком направлении "копать" дальше в освоении AutoLISP. Спасибо. p.s. вдогонку: можно ли что-то добавить, чтобы при указании фрагмента полилинии, он подсвечивался? Последний раз редактировалось MrBrown, 17.04.2015 в 16:01. |
|||
![]() |
|
||||
ПенсионЭр Регистрация: 26.06.2009
Сообщений: 361
|
gomer,
3. Это сочетание я знаю и часто пользуюсь им в автокаде. Но, как "прикрутить" его в макросе к этой строчке: Код:
5. Это понятие я нашел и перевел. Но не увидел разницы работы макроса при изменении значения (cons 41 ...). Поэтому и спросил. 6. Значит, для линий - отдельный макрос? Или же какая-то отдельная VL- функция, которую можно "прикрутить" к уже существующему макросу? ________________________ через 15 минут: догадываюсь, что по пункту третьему можно сделать функцию замены "d" на значок градуса. И потом, при формировании м-текста её как-то использовать. Или есть способ проще? Последний раз редактировалось MrBrown, 17.04.2015 в 15:53. |
|||
![]() |
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,515
|
(strcat (rtos (dtr (- (/ pi 2) (angle vx1 vx2)))) "%%d")
не обязательно отдельный, но что такое ветвление, надеюсь не нужно рассказывать. Цитата:
зы неужели так трудно догадаться, что для отрезков "соседние точки" - это начальная и конечная точка отрезка, которые находятся элементарно по кодам 10 и 11??? |
|||
![]() |
|
||||
ПенсионЭр Регистрация: 26.06.2009
Сообщений: 361
|
gomer, благодарю за помощь, за ответы и подсказки. Ну да, VLISP-это для меня пока ещё волшебство на грани "Грааля"
![]() Про коды отрезков знаю, но мне хочется "тыкать курсором" не в концы отрезка, а в его середину. А макрос - не хочет (пока не хочет). _________________________ Обозначение градуса - не работает. Возможно я не точно выразил мысль. На приложенной картинке - результат работы макроса. Это м-текст, состоящий из двух строк. Вот в первой строчке находится эта злосчастная буква "d". А её надо заменить на значок градуса. Как? Последний раз редактировалось MrBrown, 17.04.2015 в 16:32. |
|||
![]() |
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,515
|
Цитата:
во первых, это совсем не макрос, во-вторых, макрос - сущность неодушевленная, она не может хотеть или не хотеть, мочь и не мочь она тоже не может. программа делает только то, что вы в нее заложили: не заложили обработку отрезков, вот она их и не обрабатывает. Еще раз повторяю ВЕТВЛЕНИЕ!!! Вы ж научиться хотите, а не чтоб вам написали задаром? |
|||
![]() |
|
||||
ПенсионЭр Регистрация: 26.06.2009
Сообщений: 361
|
gomer,
Offtop: "Вы ж научиться хотите, а не чтоб вам написали задаром?" - увы, приходится учиться на старости, халява не проходит (http://forum.dwg.ru/showthread.php?t=120470). Я просто вынужден освоить хотя бы основы, чтобы более-менее ориентироваться в несложных кодах. А эти основы приходится изучать, анализируя практические коды с приложенными комментариями. Полещук с Кудрявцевым и иже с ними - это, конечно, весьма полезно, но, сами понимаете, из-за одной-двух программок в два десятка строчек штудировать всего "Маркса" (читай "Полещука") - это на грани научного мазохизма. И я благодарен вам, всем мастерам AutoLISP, помогающим нам, независимо от реальной причины и мотива того или иного "чайника", обратившегося за помощью на форум. Спасибо. |
|||
![]() |
|
||||
ПенсионЭр Регистрация: 26.06.2009
Сообщений: 361
|
Здравствуйте! Анализируя коды, обратил внимание, что мастера автолиспа одну строку кода комментируют одним знаком ";", а общие комментарии - тремя, вот так: ";;;". Хотя и одного достаточно. Это что, такой стиль или элемент культуры программирования?
Последний раз редактировалось MrBrown, 20.04.2015 в 09:50. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
А кто как, я думаю.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
В Notepad++ есть подсветка синтаксиса и Коментарии с ;; там затеняются, а с ; нет.
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы... |
||||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Стиль каждый вырабатывае сам. На стиль влияет и разная подсветка (затенение) в разных редакторах кода, и автоматическое форматирование. Каждый может выработать свой стиль. Особенно важно выработать стиль именования функций и переменных. И всё это является элементами культуры программирования.
|
|||
![]() |
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,515
|
Цитата:
На самом деле есть 5 видов комментов: ";", ";_", ";;", ";;;" и ";||;". 1.1 Строчный комментарий - краткое пояснение строки, пишется в конце комментируемой строки. Выравнивается посередине строки. 1.2 Строчный комментарий - вставляется автоматически vlide при форматировании и засирает и без того непонятный код. Выравнивается в конец строки кода. 2. Надстрочный комментарий - однострочный коммент, пишется над комментируемой строкой. Используется когда для п.1 не хватает места. Выравнивается по позиции комментируемой строки. Часто бывает псевдомногострочным. 3. Заголовочный однострочный комментарий - используется для описания функций и больших кусков кода. Выравнивается по началу строки. Часто бывает псевдомногострочным. 4. Заголовочный многострочный комментарий - используется для описания функций, больших кусков кода и коротких вставок внутри строки кода. Выравнивается только начало. Код:
|
|||
![]() |
|
||||
![]() Код:
з.ы. Сам дурак ![]()
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы... Последний раз редактировалось Vladimir_Sergeevich, 21.04.2015 в 10:55. |
||||
![]() |
|
||||
Регистрация: 20.03.2008
Сообщений: 2,680
|
Цитата:
----- добавлено через ~13 мин. ----- Во блин, пропустил целую страницу обсуждения ![]() Цитата:
gomer, откуда дровишки? Интересная информация, и я даже склоняюсь к тому, чтобы пользоваться подобными соглашениями, мне нравится. Может, вообще стоит создать темку для обсуждения культуры программирования, форматирования, оформления, в которую собрать все принятые соглашения и правила написания кодов? Может, уже такая и была... Самого иногда бесит бардак в кодах функций, особенно в тех, что писались первыми и понятия не было еще ни о какой культуре. Сижу порой и думаю, что я хотел изобразить пару лет назад столь замысловатым поворотом кодов ![]() ![]() Последний раз редактировалось skkkk, 21.04.2015 в 12:47. |
|||
![]() |
|
||||
Вопрос: можно ли из лиспа создать новый каталог без участия пользователя? Сколько искал: все в интерактивном режиме через кнопочку и ручной ввод.
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы... |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Алексей, благодарю! Как то я пропустил mkdir, хоть и перечитал весь раздел методов по новой.
![]()
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы... |
||||
![]() |
|
||||
И снова я с глупыми вопросами...
Допиливал одну программку и захотелось к ней прикрутить прогресс-бар. проштудировав Полещука написал рабочий вариант через dcl. И все бы хорошо, но создание нового документа вышибает dcl. это нормально? Код:
Диалог и функции управления прилагаются, если интересно.
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы... |
||||
![]() |
|
||||
Возможно ли обновить внешние ссылки для неактивного документа?
Никак не пойму почему для активного документа такая конструкция работает, а для неактивного ни в какую Код:
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы... |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
А зачем это делать? Если ссылка была изменена, она автоматически обновится при открытии документа.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Суть в следующем:
-создаю пачку чертежей -сохраняю с нужным именем и в нужные каталоги -вставляю в каждый перекрестные ссылки и подоснову (cond по имени файла) -сохраняю изменения -вот здесь надо воткнуть обновление ссылок, потому что без обновления подоснова (вставленная ссылка) видна только в одном чертеже, а надо что бы она утащилась на все чертежи -дальше настройка слоев подосновы (без обновления ссылок обрабатываются только в одном чертеже) -сохранение и закрытие все документов Задним местом чую, что можно все закрыть и открыть снова... но так же проще было бы з.ы. вторая неделя уже пошла, как ковыряю это место. Условие точно выполнятся. получение false проходит корректно, а при true вылетает ошибка "отсутствует описание". уже и в ловушку ошибок завернул - тупо пролетает мимо этого участка и хоть убей.
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы... Последний раз редактировалось Vladimir_Sergeevich, 07.05.2015 в 14:03. |
||||
![]() |
|
||||
инженер-проектировщик КИПиА Регистрация: 30.08.2008
Минск
Сообщений: 159
|
если команда vla-Reload не запрашивает документ, то подозреваю она заточена на активный...
и конечно тогда она не найдет в активном документе описание блока из другого документа... можно попробовать sendcommand |
|||
![]() |
|
||||
kakt00z, даже если sendcommand пройдет в неактивный документ, как обновить ссылку? _externalreferences работает только в оконном режиме, а других способов я не знаю (по крайней мере в cui их нет).
Цитата:
p.s. vla-put-property тоже не спрашивает документ, но получая указатель на объект в неактивном документе меняет свойства там где надо, а не в активном. (в моем случае -LineWeight для слоев)
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы... Последний раз редактировалось Vladimir_Sergeevich, 08.05.2015 в 10:05. |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Vladimir_Sergeevich, ИМХО тебе надо будет сначала поменять VISRETAIN. Потом уже менять настройки слоев для ссылок. Перегружать ссылку при этом не надо.
ПРавда, я не знаю всей задачи.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Кулик Алексей aka kpblc, судя по описанию переменной, её надо будет менять во всех кроме того, куда вставлена подоснова, потому что мы её обнуляем уже в настройках текущего чертежа, Тот что дают изыскатели остается неизменным и обновляется ими же. Таким образом "главной таблицей" будет план с подосновой, или же в в других чертежах при VISRETAIN 0 "главной таблицей" останется изыскательская?
(это делается что бы все линии топоосновы были с весом 0, а топографы в своем отчете кромку асфальта делаю 0,3 и еще всякие мелочи бывают)
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы... |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Vladimir_Sergeevich, добро пожаловать в тему "Подготовка подосновы".
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 10.08.2013
Сообщений: 11,499
|
Да чего вы так английского боитесь-вам же на нем не разговаривать, а просто понимать с листа)
ssget Цитата:
|
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Кто сказал, что обязательно с одним? ))
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 10.08.2013
Сообщений: 11,499
|
|
|||
![]() |
|
||||
Регистрация: 12.01.2015
Сообщений: 261
|
Цитата:
У Полещука не нашел. Если не сложно дать информацию где найти. |
|||
![]() |
|
||||
Регистрация: 10.08.2013
Сообщений: 11,499
|
|
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
И не только этого )))
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 14.05.2015
Сообщений: 33
|
Добрый день! Подскажите как решить следующую задачу: вставляю блок тройника, но не знаю как проверить ориентацию (верный угол поворота блока), как лучше удлинить мультилинию до точки пересечения pp?
![]() ![]() Код:
Последний раз редактировалось Кулик Алексей aka kpblc, 14.05.2015 в 13:32. |
|||
![]() |
|
||||
Регистрация: 20.03.2008
Сообщений: 2,680
|
|
|||
![]() |
|
||||
Регистрация: 12.01.2015
Сообщений: 261
|
|
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Inferi, картинок не видно. Тебе что мешает их в пост прикрепять?
![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 05.09.2007
RUSSIA
Сообщений: 166
|
Подскажите - как назначить объекту цвет RGB (например 40,87,130)?
Через свойство Color, я так понял, только индексные цвета. Через свойства TrueColor и EntityColor - 32 разрядное число, которое не понятно как получить. Чего-то не догоняю. ![]() Прошу помощи. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Поищи по форуму - решения по преобразованию rgb в truecolor были. Во, пока отвечал, нашел:
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 05.09.2007
RUSSIA
Сообщений: 166
|
За код спасибо!
Но все равно что-то не получается... Код:
Вроде в примере у Полещука последние 2 строки так же написаны.... Смущает, что там -1036280892 вместо tc vla-get-TrueColor тоже выдает число такого же порядка А вычисление дает 2643842 Чего-то я, видимо, еще не понимаю. |
|||
![]() |
|
||||
Регистрация: 20.03.2008
Сообщений: 2,680
|
|
|||
![]() |
|
||||
Регистрация: 05.09.2007
RUSSIA
Сообщений: 166
|
Цитата:
Эти функции дают результат отличающийся от функции kpblc, совпадают с тем, что я вычисляю на калькуляторе по правилу, но... Беру в свой пример значение из примера Полещука: Код:
Код:
Если подставляю это значение, то ; ошибка: Ошибка Automation. Отсутствует описание. То есть эти функции вычисляют явно не то значение, которое ждет vla-put-EntityColor Как получить то, что нужно функции vla-put-EntityColor? ![]() Последний раз редактировалось mkung, 26.05.2015 в 13:43. |
|||
![]() |
|
||||
проектирование железных дорог Регистрация: 12.04.2010
Самара
Сообщений: 60
![]() |
Здравствуйте!
Под рабочие цели написал такой вот код с разбивкой полилинии по пикетажу и подписями этого пикетажа. Возникает проблема что на пустом чертеже все работает хорошо а при запуске на чертеже с масштабными планами текст не становится перпендикулярно линии разбивки, а идет с одним углом поворота. Если у кого нибудь есть какие мысли подскажи что делаю не так. Заранее спасибо!!! Код:
|
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Во-первых, где файл, на котором неправильно срабатывает?
Во-вторых, не советую преобразовывать углы в градусы - они и в радианах прекрасно обрабатываются (константу pi еще не отменили) В-третьих, попробуй пошагово пройти и посмотреть, чему у тебя равны переменные в каждый момент. В-четвертых, командами создавать текст? Ты отважный человек...
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
__________________
tc71 |
||||
![]() |
|
||||
проектирование железных дорог Регистрация: 12.04.2010
Самара
Сообщений: 60
![]() |
Цитата:
2. если не преобразовывать углы то как выводить текст если не командами. 3. Пошагово делал. на новом чертеже все работает отлично, а на масштабнике почему то ugl берется один и тот же. Цитата:
|
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Вот ты ни фига не объяснил.
Программно Значит проверяй вычисления.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Проверяй количество ответов в опциях команды _TEXT с учетом того, назначил ли постоянную высоту при создания стиля.
|
|||
![]() |
|
||||
проектирование железных дорог Регистрация: 12.04.2010
Самара
Сообщений: 60
![]() |
Цитата:
Не могу я понять почему в одно файле все хорошо а в другом все не так как хочется))) |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Цитата:
А "не так, как хочется" - потому, что допускается "ChildErrorNumer2" - неправильное использование команды. Если уж зачем-то создавать текст именно командным методом, надо это также вынести в отдельную функцию. Например так : Код:
Обратите внимание на разное количество аргументов и порядок их следования для команды TEXT. Но надежней всего писать текст объектным методом, также сделав специальную функцию. Например так: Код:
|
|||
![]() |
|
||||
Инженер Регистрация: 27.04.2009
Deutschland
Сообщений: 208
|
Я себе вот такую функцию написал, тоже текст программно вставляет.
![]() Ее можно использовать и без параметров - вот так: (at_text nil), тогда она будет запросит точку вставки и сам текст, а остальные параметры подставит по умолчанию. В моем случае слой "Scrift", высота 30, угол поворота 0°, выравнивание по центру. После функции я вписал то, что у меня идет как загрузка расширений и находится в других файлах, ну чтобы для полноты картины так сказать (чтобы заработала). Код:
|
|||
![]() |
|
||||
Господа товарищи, заболел новой идеей! Суть такова: на плане сгенерировнным робуром надо:
1) Найти группы объектов (это я сделал в первом приближении) 2) Преобразовать эти группы в анонимные аннотативные блоки. Насколько это реализуемо и в какую сторону рыть? Для наглядности прикладываю пример рисунка: прямоугольниками обведены те самые группы объектов, которые надо преобразовывать (элементы кривых в плане) собственно их рисовал программно по ним же и идет выбор "_WP" P.S. Аннотативность нужна до зарезу, с анонимностью спорно, но желательно, ибо осей может быть много и каждый должен быть индивидуальным.
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы... |
||||
![]() |
|
||||
Регистрация: 21.03.2013
Самара
Сообщений: 29
|
Извиняюсь за дилетантщину, но надеюсь, тут все к этому привыкли, поэтому всё же осмелюсь спросить.
В лиспе небезызвестной pltools, в команде MPL есть такие строки: Код:
А вот родная автокадовская команда OFFSET при новом вызове помнит, какое расстояние вводили в прошлый раз, и при очередном запуске предлагает значение, которое весит в памяти. Можно ли это в лиспе реализовать, и если можно то как? Вот объявил я глобальную переменную, ну скажем velichina. Задал её при первом вызове команды, и хочу, чтобы при новом вызове предлагалось текущее значение. Если пишу "\nКоличество опорных точек <velichina>: ", то он так же и выдаёт <velichina>. Пишу с восклицательным знаком, и выдаёт с восклицательным. Как заставить выводить значение переменной, а не её имя? |
|||
![]() |
|
||||
Регистрация: 21.03.2013
Самара
Сообщений: 29
|
kakt00z, большое спасибо за подсказку.
Данный код имеет огрех. Если значение переменной уже отличается от 100, и составляет, к примеру 50, то запрос будет выглядеть так: Количество опорных точек <50.0000>: Но при нажатии Enter, в переменную всё равно вносится значение 100 Победил следующим образом: dL - глобальная переменная dl1 - локальная переменная Код:
|
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
А если примерно так:
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Ага, целого. А запрашивается real, хранится real. В любом случае, в качестве иллюстрации будет достаточно, я думаю.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 05.09.2007
RUSSIA
Сообщений: 166
|
Добрый день.
Можно ли из Автокада работать с объектной моделью другого запущенного приложения? Например, получить ссылку на файл из системы документооборота? Если да - то как "залезть" в чужую модель? Заранее благодарен. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Цитата:
----- добавлено через 35 сек. ----- Поищи примеры работы с файлами Excel - в качестве примера покатит, думаю.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 05.09.2007
RUSSIA
Сообщений: 166
|
Цитата:
(vlax-dump-object (vlax-get-or-create-object "LotsiaPDM.Application")) ; Объект не поддерживает интерфейс ITypeInfo ----- добавлено через ~4 ч. ----- Программист ЛОЦИИ написал на С# как добраться до нужного пути к файлу: Цитата:
Последний раз редактировалось mkung, 02.07.2015 в 15:31. |
|||
![]() |
|
||||
Регистрация: 16.10.2013
Сообщений: 395
|
извините за глупый вопрос, но сам не разобрался:
как сделать, чтобы при вызове команды, присваивался определенный параметр автоматически? например, я набираю "-слой", и мне предлагается несколько вариантов параметров, а мне необходимо, чтобы сразу выбирался параметр "С" (создать), т.е. по команде "-слой" сразу же создавался новый слой, а я вводил только его имя. (пробовал код Крыса: (command "_.-layer" "_n" "Layer2" ""), но он у меня почему-то не работает ) |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
mkung, боюсь, что никак. Если не удается создать объект (или получить на него указатель), то дальше можно особо не рыпаться.
----- добавлено через 20 сек. ----- posetitel, Download -> "В.Свет Язык макрокоманд".
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
можно - в поиск по словам autolisp excel (просто это самый частый подобный вопрос).
ops. - это я кажется с десяток другой сообщений пропустил з.ы. нет всего пять
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
Регистрация: 05.09.2007
RUSSIA
Сообщений: 166
|
|
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Тогда попробуй использовать vla-invoke-method, vlax-invoke, vlax-put-property, vlax-get-property. Названия методов и свойств, а также количество и возможные значения параметров надо будет брать из руководства по программированию для Лоции.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
mkung, можно, если эта сисема имеет com-модель. Подробнее у Полещука "10.4 Пример работы с внешним приложением". Ну и в довесок, на форуме были примеры экспорта/импорта из экселя
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы... |
||||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
|
|||
![]() |
|
||||
Регистрация: 21.03.2013
Самара
Сообщений: 29
|
Сначала у меня это не заработало. Потом на пару недель замотался. А сейчас вернулся к этому, и заменив
Код:
Код:
Может быть, предполагалось, что должно функционировать как-то иначе, но в любом случае у меня заработало. Спасибо за подсказку. |
|||
![]() |
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,515
|
что значит не заработало? второй вариант имеет уязвимость, так как (null dl)==> nil не означает (numberp dl) ==> T. кроме этого момента эти варианты эквивалентны
|
|||
![]() |
|
||||
Регистрация: 12.01.2015
Сообщений: 261
|
Согласно описанию функция работает с символами LISP.
У меня список с вложенными списками. На простом примере получаю ожидаемый результат: Код:
Но на более сложном списке с 22 подсписками с суммарной длиной порядка 6000 символов замены на новый элемент не происходит. Не могу поймать свою ошибку. Или у функции есть ограничения? |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Ты в качестве "старого" значения попробуй подставлять не вбитое вручную, а полученное через nth или assoc значение. Ну и проверь на повторы - тоже бывают забавные случаи.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 21.04.2009
Тюмень
Сообщений: 97
|
Добрый день! Возможно ли на лиспе сделать сортировку списка vla-объектов по координате х левого нижнего угла? Пробую функцией vl-sort, но как туда записать метод vla-GetBoundingBox, которая не возвращает значение, ума не приложу. Кто-нибудь может подсказать как можно сделать?
|
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Или так:
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Геодезист Регистрация: 09.11.2014
Сообщений: 7
|
почитал форум, как понял "переменные во вне документном пространстве" такая, больная темка на данный момент)
у меня не совсем про это вопрос, но новую тему создать не решился) возникло непонимание.. необходимо вынести во вне документное пространство переменную со списком характеристик примитива('ов). но при попытках сделать это через vl-bb-set или vl-propagate выходит ошибка "неверный импорт\экспорт между док-ми <имя объекта......>" возникает она из за наличия в списке пар с dxf-кодами -1 и 330.. т.е. в которых после кода стоит "<имя объекта.....>", если их убрать никаких проблем не возникает, и переменная со списком спокойно передается и считывается в другом документе. подскажите, что это и с чем едят или направьте куда) |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
dxf reference - там написано, что в какой группе лежит.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
330 (по умолчанию) - указатель на "владельца" примитива.
Вообще говоря, я не очень понимаю, зачем надо хранить полное представление примитива во внедокументном пространстве. Может, проще выполнить нечто типа _.wblock в указанный файл, а в переменную просто загонять полное имя созданного файла? Ну и при необходимости его и обрабатывать. P.S. Хотя для работы с неактивным документом можно и без этого обойтись.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Геодезист Регистрация: 09.11.2014
Сообщений: 7
|
Действительно, сами имена объекта и id владельца мне в списке не нужны.
Но они неотъмлемая часть списка извлекаемого entget. И получается проще их просто удалить. Просто думал, может есть какая то хитрость или что то простое в решении. Спасибо. |
|||
![]() |
|
||||
Регистрация: 20.03.2008
Сообщений: 2,680
|
Столкнулся в 2011-м Автокаде с такой незадачей: если в имени слоя присутствует знак диаметра, то при обращении к этому имени лисп видит вместо знака диаметра вопросительный.
В связи с этим, обращение к этому слою через имя провоцирует ошибку. Например: Код:
Цитата:
|
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Нну... Полагаю, тут дело в "нехватке" стандартной кодировки.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Не использовать символы типа диаметра )))
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Без файла и конкретной задачи - пока нет.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 20.03.2008
Сообщений: 2,680
|
Это можно. Оставил в файле только то, что лаконично необходимо и достаточно для понимания смысла, который вложил во все это автор. Теперь мне приходится программно работать с объектами на таких слоях, вот в частности мой код несколькими постами выше не срабатывает.
|
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
ПОпробовал нечто типа
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 20.03.2008
Сообщений: 2,680
|
Алексей, знаешь, я и проверять почему-то сразу даже не стал через (entget), подумал, что раз уж продвинутая объектная модель не умеет кодировки понимать, куда уж там... А вот тебе, бабушка, и автолиспов день!
В общем, не мудрствуя, обнаружилось, что конструкция Код:
![]() Offtop: А вы всё vla-vla-vla... ![]() |
|||
![]() |
|
||||
Регистрация: 20.03.2008
Сообщений: 2,680
|
Посмотреть опции команды MTEXT, а лучше -MTEXT, например, здесь и прописать их в тех же строках, начинающихся с (command.... Опции - в кавычках, предваряя знаком подчеркивания (например, "_J"), а переменные (strok) - без кавычек. Возможно, придется чуток поэкспериментировать.
![]() |
|||
![]() |
|
||||
Регистрация: 10.08.2013
Сообщений: 11,499
|
перед копированием и в источнике, и в редакторе lisp перейдите на русский.. а потом лишь копируйте... такая же ерунда в редакторе VBA - думаю, поможет)
|
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
http://adn-cis.org/search.html?query=secure
http://adn-cis.org/acad2016-news.html http://adn-cis.org/webinar-acad2016-news-report.html
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Не советую поступать именно так.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 12.01.2015
Сообщений: 261
|
|
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Neo, теоречически - получаешь список первых элементов, убираешь дубликаты, а потом проходишь по всему списку и группируешь остатки.
----- добавлено через ~6 мин. ----- Как пример: Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Где проверить: http://autolisp.ru/2009/09/20/execution-speed-check/
И у применения function есть еще один плюс: можно поставить точку останова внутри анонимной функции. Иногда полезно.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 23.04.2015
Сообщений: 163
|
Доброго дня. Можно ли как-нибудь без полного открытия файла чертежа достать из него системную переменную? Пока делаю так
Код:
Но для больших файлов долго выходит, хочется как через ODBX или наподобие, только чтоб с переменными работало. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Ну так открывай через ObjectDBX, получай указатель на объект документа, а потом (vla-getvariable УказательНаДокумент НазваниеПеременной)
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Инженер-гидрограф Регистрация: 15.09.2011
г.г. Ленинград
Сообщений: 170
|
Привет.
Есть код автор ув. akka_KPbIC Код:
По размыслив почитав vla-семейства, попытаюсь написать, как я понимаю твое решение: 1. Создал две функции преобразований списка координат в список чисел и обратно. 2. Далее, выбираем полилинию и если это полилиния, то идем далее 3. Потом не плохой ухват, запуск цикла функцией foreach и тут внутри цикла есть доп.вопросики: а. Внутри цикла это не пример? а необходимый код? б. Из vertex я могу достать X и Y, они мне нужны для корректировки, у меня будет формула их изменения. 4. После того как координаты изменились у вершин полилинии можно строить новую полилинию, но вопросик где прописано постройка новой полилинии? Вроде пока всё. Да, чуть не забыл, кто не в курсе вопрос стоял в том, что есть полилиния (простая), изменяя координаты вершин полилинии (любые математические действия), строим рядом новую полилинию. Спс.
__________________
AutoCAD Civil 3D 2012г. 32-разрядная. |
|||
![]() |
|
||||
Инженер-гидрограф Регистрация: 15.09.2011
г.г. Ленинград
Сообщений: 170
|
Есть полилиния, необходимо построить новую, изменяя координаты вершин исходной полилинии. Координаты изменяются по формуле (какие-то математические действия с координатой X и Y). Полилиния м.б. много вершинная от 2 до ...
Вот ещё что, у меня полилиния нового формата не LWpolyline, а просто Polyline При выборе полилинии равенство подтверждается Код:
Идем далее Код:
bit почему именно до 3, какую роль они играют в твоем решении (примера)? В моем случае одна формула будет для всех X и одна для всех Y ![]() ![]()
__________________
AutoCAD Civil 3D 2012г. 32-разрядная. Последний раз редактировалось Pavel_GP, 15.10.2015 в 13:02. |
|||
![]() |
|
|||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Pavel_GP, так тебе надо строить новую или менять существующую? Разница принципиальная: у меня код меняет существующую полилинию. Попробую ответить по пунктам
![]() Цитата:
Верно Цитата:
Пополам. Результат вычислений где-то надо бы сохранить, для этого служит coords Цитата:
Цитата:
Это как раз пример. Если у тебя вычисление новой координаты выполняется какой-то функцией типа (eval-new-coords x y), то и пиши (setq coords (cons (eval-new-coords (car vertex) (cadr vertex)) coords)) - этого по идее должно быть достаточно.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
||||
![]() |
|
||||
Инженер-гидрограф Регистрация: 15.09.2011
г.г. Ленинград
Сообщений: 170
|
Спасибо, что разжевал всё подробно
![]() Верно новую. Будут вопросики отпишу. Пока тестю.
__________________
AutoCAD Civil 3D 2012г. 32-разрядная. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Если новую, то сразу вопросы: слой, тип и вес линии откуда брать? Elevation, Thickness, слой? Как учитывать кривизну элементов? Предустановленную ширину сегментов (возможно, переменную)?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Инженер-гидрограф Регистрация: 15.09.2011
г.г. Ленинград
Сообщений: 170
|
Цитата:
Подскажи плз функцию выбора, как в функции offset, когда пользователю предоставляется выбор кликнуть мышкой с какой стороны построить. У меня сложный расчет изменения координат вершин, (я пытаюсь создать программку на подобие оффсета, только расстояние у меня будет не на плоскости на эллипсоиде, поэтому и приходится формулой преобразовывать координаты вершин), будет задействован угол (перпендикуляр к полилинии).
__________________
AutoCAD Civil 3D 2012г. 32-разрядная. Последний раз редактировалось Pavel_GP, 15.10.2015 в 16:33. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Во-первых, есть метод vla-offset. Во-вторых, для вычисления первой и второй производной в любой точке любой кривой есть функции vlax-curve-getfirstderiv и vlax-curve-getsecondderiv. Описание есть в справке
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Инженер-гидрограф Регистрация: 15.09.2011
г.г. Ленинград
Сообщений: 170
|
Все хорошо, но мне не нужно чтоб при вводе смещения объект сразу смещался, я задаю величину смещения для дальнейшей обработки его в формуле вычисления координат вершин.
Цитата:
![]() С можешь отредактировать нижнюю часть своего решения? ( см. #2726) Работаю пока над основной формулой вычисления внутри foreach
__________________
AutoCAD Civil 3D 2012г. 32-разрядная. Последний раз редактировалось Pavel_GP, 16.10.2015 в 08:56. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Так создавай новую полилинию, через vla-addlightweightpolyline, задавай полученному примитиву нужные свойства. Принцип не изменится: получить примитив, собрать координаты, создать новый.
P.S. В принципе, можно и через ename сделать - возможно, так даже будет более интересно.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Инженер-гидрограф Регистрация: 15.09.2011
г.г. Ленинград
Сообщений: 170
|
Спс. тут я понял.
Вопрос: Мне необходимо получение угла( это все нужно в формулу получения новых координат вершин, которая определяется внутри foreach), после выбора стороны смещения Код:
и куда его вставить в твое решение?
__________________
AutoCAD Civil 3D 2012г. 32-разрядная. |
|||
![]() |
|
||||
Инженер-гидрограф Регистрация: 15.09.2011
г.г. Ленинград
Сообщений: 170
|
Привет.
Код:
Как составить такой вариант список углов (угол (/ (угол+угол1) 2.) (/ (угол1+угол2) 2.) .... уголn) Спс.
__________________
AutoCAD Civil 3D 2012г. 32-разрядная. Последний раз редактировалось Pavel_GP, 19.10.2015 в 14:54. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
(append angl_1 (list (car angl_1)))
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Инженер-гидрограф Регистрация: 15.09.2011
г.г. Ленинград
Сообщений: 170
|
Это замыкать (1 2 3 4 1)
Я просил такой тип (a (/ (a+b) 2.) (/ (b+c) 2.) ... (/ (g+n) 2.) n), где второй список это среднее между 1 и 2 углами и т.д. а последний угол это просто угол. ![]() Пример: Полилиния из двух сегментов список такой (a ((a+b)/2) b) (три угла) Полилиния из пяти сегментов список такой (a ((a+b)/2) ((b+c)/2) ((c+d)/2) ((d+e)/2) e) (шесть углов)
__________________
AutoCAD Civil 3D 2012г. 32-разрядная. Последний раз редактировалось Pavel_GP, 19.10.2015 в 16:55. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Pavel_GP, ты отредактировал пост позднее, чем я дал ответ.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Инженер-гидрограф Регистрация: 15.09.2011
г.г. Ленинград
Сообщений: 170
|
Вместо car ты наверное хотел поставить cdr
![]() ----- добавлено через 54 сек. ----- Сорь, мысли гуляют пытаюсь внятное подать
__________________
AutoCAD Civil 3D 2012г. 32-разрядная. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Ты сначала просил дополнить список - поставить в конец первый элемент. Я дал решение.
P.S. С Цитата:
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Инженер-гидрограф Регистрация: 15.09.2011
г.г. Ленинград
Сообщений: 170
|
Спс.
1. Куда вставить функцию, где ее применить? 2. Если применить вот так ( setq ugol (tt angl_1)), то не правильный тип аргумента 2D/3D, скорее всего ругается функция angle. 3. Если убрать комментарий (;; (tt ....)), то требуется выбрать объект. см. вложение.
__________________
AutoCAD Civil 3D 2012г. 32-разрядная. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Pavel_GP, я в комментарии специально показал пример вызова. Скопируй код и вызывай так, как написано в комментарии.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Инженер-гидрограф Регистрация: 15.09.2011
г.г. Ленинград
Сообщений: 170
|
Отлично!!!
![]() ![]() ![]() Только можно отредактировать чтобы не запрашивал выбрать объект, я его уже выбираю до функции. Спасибо. А есть у тебя lisp функции offset (которая родная в автокаде)? ![]()
__________________
AutoCAD Civil 3D 2012г. 32-разрядная. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Цитата:
Нет. У тебя более чем достаточно информации для того, чтобы сделать нужный тебе функционал самостоятельно.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Инженер-гидрограф Регистрация: 15.09.2011
г.г. Ленинград
Сообщений: 170
|
1. Посмотри плз код и помоги с расстановкой глобальных переменных.
2. Если начать следующее построение, то после построения полилинии цепляются к ней (строятся все заново) прошлые построения. Спс. Пысы: Если не трудно где добавить и что, чтобы полилиния строилась красного цвета толщиной вес 0.3 ![]() ----- добавлено через ~19 ч. ----- Цитата:
Цитата:
Код:
__________________
AutoCAD Civil 3D 2012г. 32-разрядная. Последний раз редактировалось Pavel_GP, 22.10.2015 в 13:07. Причина: Вопросы сняты |
|||
![]() |
|
||||
Инженер-гидрограф Регистрация: 15.09.2011
г.г. Ленинград
Сообщений: 170
|
Привет. Нужна функция сумма чисел в списке.
Пример: lst (1 2 3 4) 10, могут быть и не целые. Спс. Вопрос снят. Код:
__________________
AutoCAD Civil 3D 2012г. 32-разрядная. Последний раз редактировалось Pavel_GP, 26.10.2015 в 09:30. |
|||
![]() |
|
||||
Инженер-гидрограф Регистрация: 15.09.2011
г.г. Ленинград
Сообщений: 170
|
Ув. akka_KPblC, поправь плз код согласно вложения: Красный цвет углов, это как щас строит, Зеленый цвет, как пока нужно.
__________________
AutoCAD Civil 3D 2012г. 32-разрядная. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Pavel_GP, я не вникал в твой алгоритм, я всего лишь его адаптировал. Сними комментарии со строк 7 и 27 - попробуй. Похоже, я скинул какой-то из тестовых вариантов.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Инженер-гидрограф Регистрация: 15.09.2011
г.г. Ленинград
Сообщений: 170
|
Цитата:
Извини откорректировал вложение. ----- добавлено через ~3 мин. ----- 1. Если тебе это поможет, то углы между вершинами автокад вычисляет от оси Х против часовой стрелки 2. Еще дополню, а углы которые я нарисовал - это азимуты от оси Y по часовой стрелки. 3. В ком. (7,27) я подставляю значения либо pi или 2pi., но они на алгоритм не влияют, мне кажется дело в этой функции. 4. Еще дополню, в ком (7) знак сменить на "+", вместо pi поставить коэффициент (к), который будет равен либо 0 либо pi, в зависимости от стороны смещения вправо=0, влево=pi. Отсюда следует при выборе справо, угол (между двумя вершина) будет равен Азимуту, но при угле=0, Азимут=180. Азимут это результат твоей функции. 5. Когда вычисляем среднее между Азимутами, нужно учесть, что если значение у крайних азимутов больше 360° (6.283185307179586), то (у каждого которого > 360°) перед вычислением среднего, от полученного значения отнять 360°
__________________
AutoCAD Civil 3D 2012г. 32-разрядная. Последний раз редактировалось Pavel_GP, 26.10.2015 в 16:34. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Pavel_GP, ты про углы в курсе? Что pi = 180°, а (* 2. pi) = 360°? У тебя абсолютно непонятные требования - и при этом ты почему-то не показываешь свой код. И не показываешь, на каком месте у тебя "спотык".
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Инженер-гидрограф Регистрация: 15.09.2011
г.г. Ленинград
Сообщений: 170
|
Семен Семеныч
![]() Код:
1. Загрузи dwg (см. вложение). 2. Прими по запросу систему координат. 3. параллель 75 4. для удобства работы смещение ввожу 50 Как такого "стоптыка" нет, По моему мнению не правильные значения получает azimut_s строка 152 ----- добавлено через ~4 ч. ----- Добавлю: 1. Строки 72-117, расчет вспомогательного коэффициента при выборе стороны смещения. Я лично не могу сейчас додуматься, как конкретно программно при выборе стороны смещения (вправо/влево), программа понимала что, где вправо, а где влево. Поэтому я прописываю такие вычисления, скорее всего все намного проще. 2. 94 просмотра вложения, ни одного ответа ![]()
__________________
AutoCAD Civil 3D 2012г. 32-разрядная. Последний раз редактировалось Pavel_GP, 27.10.2015 в 13:08. Причина: вставил скобку ( - k и и закрывающую ) ;_end of - (в функции tt) |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Особенность движка - это не количество скачиваний, а количество просмотров страницы
Цвет чего?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Pavel_GP, у меня уже второй день на работе завал. С тобой поделиться задачками?
![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Инженер-гидрограф Регистрация: 15.09.2011
г.г. Ленинград
Сообщений: 170
|
Ты лучше по делу бы сказал, а языком чесать каждый может
![]() Слова твои ничем не подкреплены, опять болтовня... Подскажи решение, если есть что сказать?
__________________
AutoCAD Civil 3D 2012г. 32-разрядная. |
|||
![]() |
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,515
|
Цитата:
![]() зызы от меня тебе только один совет: не все, что ты видишь, достойно подражания и не все выглядит так, как ты это себе представляешь |
|||
![]() |
|
||||
Инженер-гидрограф Регистрация: 15.09.2011
г.г. Ленинград
Сообщений: 170
|
no comments...
Я не думал, что на таком специфическом форуме могут быть тролли и флудерасты, которые кроме своего носа ничего не видят, даже название топика, жаль... ![]()
__________________
AutoCAD Civil 3D 2012г. 32-разрядная. |
|||
![]() |
|
||||
Пастух Регистрация: 16.07.2012
Питер
Сообщений: 318
|
Вы, вроде как, грозились разобраться самостоятельно. Вам дали алгоритм. К чему теперь эти вопросы?
Цитата:
Код:
__________________
Автоматизация должна быть автоматической. |
|||
![]() |
|
||||
Конструктор Регистрация: 04.04.2007
Киев
Сообщений: 536
|
|
|||
![]() |
|
||||
Пастух Регистрация: 16.07.2012
Питер
Сообщений: 318
|
Ну вам-то виднее, как синтаксис дают. Странно, что вы тогда не можете решить простейших задач.
Вы хотели с переменными? Вот вам с переменными. С Глобальными! Код:
__________________
Автоматизация должна быть автоматической. |
|||
![]() |
|
||||
Регистрация: 20.03.2008
Сообщений: 2,680
|
Offtop: Когда мы с братом или с сестрой в детстве ссорились или даже дрались, бабушка поговаривала: "Один задириха, другой неспустиха"
![]() Чтобы понять, в каком это диапазоне, нужно понять, что это вообще такое. А это - подстрока (начиная с 16-го символа) строки, образованной переводом переменной CDATE в строку посредством функции rtos с округлением до 8 знаков после запятой. И если посетить в Сети буквально пару-тройку страниц по теме, то можно понять, что эти два последних символа обозначают сотые доли секудны текущего времени. Соответственно интервал, подразумеваемый ProPeller'ом - от "00" (что соответствует значению "ПоБлоку") до "99". Правда, в зависимости от значения переменной DIMZIN строка, например "10" может превратиться в "1", что в данном случае не критично, ибо нужны случайные числа, но она также может превратиться и в просто "" при "00", а такое значение переменной CECOLOR системой отвергнется. Не универсальное, однако, решение - в одном случае из ста вылетит с ошибкой, если DIMZIN установлен в 8, как по умолчанию. |
|||
![]() |
|
||||
Пастух Регистрация: 16.07.2012
Питер
Сообщений: 318
|
Дык я и хотел помочь. Написал бы ему нормальный рандом в диапазоне от 0-255 и было бы счастье, а мне сказали мол "дай алгоритм" и все тут. Вот я и дал.
Offtop: Просто на работе куча таки "пассажиров", которые сначала делают вид, что все поняли, а потом начинаю с вопросами бегать. Это у меня уже рефлекс наверное. Я так-то не злой))
__________________
Автоматизация должна быть автоматической. |
|||
![]() |
|
||||
Пастух Регистрация: 16.07.2012
Питер
Сообщений: 318
|
Цитата:
Например: Код:
__________________
Автоматизация должна быть автоматической. |
|||
![]() |
|
||||
Конструктор Регистрация: 04.04.2007
Киев
Сообщений: 536
|
Цитата:
Вот, к примеру, рандом в php int rand ( int $min , int $max ) Вот в C++ int a = random(N); //генерит число в промежутке [0; N) |
|||
![]() |
|
||||
Пастух Регистрация: 16.07.2012
Питер
Сообщений: 318
|
К сожалению нет.
Может вас спасет вот эта программка, будет как Цитата:
__________________
Автоматизация должна быть автоматической. Последний раз редактировалось ProPeller, 28.10.2015 в 16:30. |
|||
![]() |
|
||||
Инженер-гидрограф Регистрация: 15.09.2011
г.г. Ленинград
Сообщений: 170
|
Кулик Алексей, как время будет пересмотри в другой вариант по примеру
Код:
Пример на выходе (у1 у1 у2 у2 у3 у3 .... уn уn), где у - углы. Если 2 сигмента то 4 угла и т.д. Спс. ----- добавлено через ~21 ч. ----- Ребята, Пока основной учитель занят, подскажите как получить: Пример (lst (1 2 3 4 5 6...n)), преобразовать в (lst (1 1 2 2 3 3 4 4 ... n n)), ну если кому не трудно. спс.
__________________
AutoCAD Civil 3D 2012г. 32-разрядная. Последний раз редактировалось Pavel_GP, 29.10.2015 в 14:28. |
|||
![]() |
|
||||
Регистрация: 12.01.2015
Сообщений: 261
|
|
|||
![]() |
|
||||
Пастух Регистрация: 16.07.2012
Питер
Сообщений: 318
|
Цитата:
Код:
__________________
Автоматизация должна быть автоматической. |
|||
![]() |
|
||||
Инженер-гидрограф Регистрация: 15.09.2011
г.г. Ленинград
Сообщений: 170
|
Цитата:
получилось вот так Код:
![]()
__________________
AutoCAD Civil 3D 2012г. 32-разрядная. |
|||
![]() |
|
||||
Инженер-гидрограф Регистрация: 15.09.2011
г.г. Ленинград
Сообщений: 170
|
Добро!
![]() ----- добавлено через ~3 ч. ----- Мне необходимо к каждому элементу списка (+ или -) коэффициент (пример к=pi) Код:
Объединяем в один код Код:
есть список (lst (1 2 3...n)), необходимо получить на выходе (1 2 2 3 3...n) Решение: Код:
__________________
AutoCAD Civil 3D 2012г. 32-разрядная. Последний раз редактировалось Pavel_GP, 30.10.2015 в 13:04. |
|||
![]() |
|
||||
Пастух Регистрация: 16.07.2012
Питер
Сообщений: 318
|
Цитата:
Код:
Код:
__________________
Автоматизация должна быть автоматической. |
|||
![]() |
|
||||
Инженер-гидрограф Регистрация: 15.09.2011
г.г. Ленинград
Сообщений: 170
|
Вопрсик:
Есть список координат (lst ((x1 y1) (x2 y2) (x3 y3) (x4 y4)...(xn yn))), необходимо получить: 1. координаты пересечений между отрезками (01 02 ... 0n), где 01 ((x1 y1) (x2 y2)), 02 ((x3 y3) (x4 y4)), координаты пересечений (x_pt1 y_pt1) и т.д. 2. создать новый список ((x1 y1) (x_pt1 y_pt1) (x_pt2 y_pt2) ... (xn yn)), первый и последний списки координат не изменяются. Благодарствую. ----- добавлено через ~5 мин. ----- Цитата:
----- добавлено через ~6 мин. ----- За оптимизацию спасибо!
__________________
AutoCAD Civil 3D 2012г. 32-разрядная. Последний раз редактировалось Pavel_GP, 30.10.2015 в 15:31. Причина: изменения синего цвета |
|||
![]() |
|
||||
Пастух Регистрация: 16.07.2012
Питер
Сообщений: 318
|
Конечно можно. Просто автор обмолвился, мол (пример к=pi). Вдруг там будет присваиваться другой коэффициент.
Цитата:
Код:
__________________
Автоматизация должна быть автоматической. Последний раз редактировалось ProPeller, 30.10.2015 в 16:01. |
|||
![]() |
|
||||
Инженер-гидрограф Регистрация: 15.09.2011
г.г. Ленинград
Сообщений: 170
|
pi - это значение коэффициента k (как пример)
----- добавлено через ~2 мин. ----- Спасибо большое , не успеваю проверить убегаю - до понедельника.
__________________
AutoCAD Civil 3D 2012г. 32-разрядная. |
|||
![]() |
|
||||
Инженер-гидрограф Регистрация: 15.09.2011
г.г. Ленинград
Сообщений: 170
|
ув. ProPeller. Большое спасибо за твой труд.
![]() Немного уточню что я хотел в итоге получить, и чтоб ты смог поправить свое решение если не трудно: 1. Цитата:
2. Пример: Если полилиния состоит трех сегментов то итог : ((x1 y1) (xpt1 ypt1) (xpt2 ypt2) (xn yn)), где xpt1 ypt1 - координаты первой точки пересечения 2-х сегментов (01 и 02), xpt2 ypt2 - ... (02 и 03), а x1 y1 - координата точки первого сегмента, xn yn - координата точки последнего сегмента. Спс. ----- добавлено через ~1 ч. ----- 3. Если один сегмент, то Код:
__________________
AutoCAD Civil 3D 2012г. 32-разрядная. Последний раз редактировалось Pavel_GP, 02.11.2015 в 12:38. |
|||
![]() |
|
||||
Пастух Регистрация: 16.07.2012
Питер
Сообщений: 318
|
Мне-то не трудно, но проще один раз изложить все доступно и с желаемым результатом, чем каждый последующий раз просить доработать код. Мы тут с этими пересечениями уже целую страницу форума накатали.
Короче, мой код отсюда высчитывал координаты пересечений между отрезками 1 - 2, 3 - 4, 5 - 6 и т.д. Насколько я понял из последнего поста, нужно сделать 1 - 2, 2 - 3, 3 - 4 и т.д., тогда код будет таким. Код:
__________________
Автоматизация должна быть автоматической. Последний раз редактировалось ProPeller, 02.11.2015 в 14:49. |
|||
![]() |
|
||||
Инженер-гидрограф Регистрация: 15.09.2011
г.г. Ленинград
Сообщений: 170
|
Что-то нето...
С твоего позволения добавил скобку (append (list (car lst)) (PPT:2D->StEnd lst) (list (last lst)) ) Пример: lst ((3.72449e+006 3.00249e+006) (3.72356e+006 3.00125e+006) (3.72355e+006 3.00131e+006) (3.72475e+006 3.00041e+006) (3.72476e+006 3.00035e+006) (3.72313e+006 2.99882e+006)) на выходе получаем: ((3.72449e+006 3.00249e+006) (3.72313e+006 2.99882e+006)), должно быть четыре точки, а тут две начало и конец
__________________
AutoCAD Civil 3D 2012г. 32-разрядная. |
|||
![]() |
|
||||
Пастух Регистрация: 16.07.2012
Питер
Сообщений: 318
|
Цитата:
Код:
__________________
Автоматизация должна быть автоматической. |
|||
![]() |
|
||||
Инженер-гидрограф Регистрация: 15.09.2011
г.г. Ленинград
Сообщений: 170
|
Спс. Большое. Всё работает!
![]() Есть решение моего вопроса, мы все кто смог помочь его решили Код:
Это аналог функции оффсет только для моих условий. Что можешь посоветовать по решению такой вот проблемки: Когда я выбираю сторону отложения новой полилинии мне приходится прописать ряд функций (начиная со строки (setq ugol1...), на мой взгляд это не правильно мне кажеться что-то должно быть чтоб автокад понимал где право а где лево. Код:
__________________
AutoCAD Civil 3D 2012г. 32-разрядная. |
|||
![]() |
|
||||
Пастух Регистрация: 16.07.2012
Питер
Сообщений: 318
|
Рекомендую описание функции PPT:2D->StEnd переместить из цикла по списку (foreach), например в начало описания программы, где у тебя комментарий ;;; Вспомогательные функции, иначе функция будет переопределяться столько раз, сколько элементов у тебя будет в списке.
Не очень понятно, что у тебя и откуда. Нужно рассматривать на реальном примере. Что касается твоего примера, то тут нужна оптимизация и что-то мне подсказывает, что есть некторое количество неучтённых вариантов определения сторонности которые приведут к ошибке. Если мы на сто процентов уверены, что существует только лишь два варианта k, то я бы начал с этого, а потом стал бы думать дальше. Код:
__________________
Автоматизация должна быть автоматической. Последний раз редактировалось ProPeller, 02.11.2015 в 16:26. |
|||
![]() |
|
||||
Инженер-гидрограф Регистрация: 15.09.2011
г.г. Ленинград
Сообщений: 170
|
Цитата:
Цитата:
ProPeller подскажи, что прописать, чтобы после построения опять появлялся вопрос какое смещение ввести и указать сторону? пока не нажму отмена.
__________________
AutoCAD Civil 3D 2012г. 32-разрядная. Последний раз редактировалось Pavel_GP, 03.11.2015 в 10:37. |
|||
![]() |
|
||||
автоматизация и организация черчения Регистрация: 17.11.2009
Sterlitamak
Сообщений: 135
|
Здравствуйте! Подскажите, пожалуйста, как добраться до свойств примитивов входящих в описание блока?
До свойств самого блока добраться легко, а вот до примитивов в блоке пока не представляю как. В какую сторону копать, подскажите.
__________________
слесарь САПР |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
А не проще найти темы "Нормализация блоков" и "Подготовка подосновы"? Там вариантов "захода внутрь блока" - тьма!
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Пастух Регистрация: 16.07.2012
Питер
Сообщений: 318
|
Не совсем правильное определение. То что вы называете блоком, на самом деле является ссылкой на блок или же Reference.
Если знакомы с технологией ActiveX, то рекомендую воспользоваться следующими командами. Код:
__________________
Автоматизация должна быть автоматической. |
|||
![]() |
|
||||
автоматизация и организация черчения Регистрация: 17.11.2009
Sterlitamak
Сообщений: 135
|
Начал копать в сторону entnext, действительно можно добраться до примитивов.
Код:
ProPeller, спасибо за информацию, попробую использовать active x.
__________________
слесарь САПР |
|||
![]() |
|
||||
Конструктор Регистрация: 04.04.2007
Киев
Сообщений: 536
|
Цитата:
Команда: (setvar "cecolor" (LM:randrange 0 10)) ; ошибка: Настройка переменной AutoCAD отвергнута: "cecolor" 2 |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
автоматизация и организация черчения Регистрация: 17.11.2009
Sterlitamak
Сообщений: 135
|
Здравствуйте! Пишу в ветку для чайников, так как сам пока не могу сообразить то, каким образом решить свою проблему.
Lisp знаю неважно, а методы АктивХ вообще плохо. Поэтому решил написать сюда, может кто-то поможет советом. Есть задача, используя метод Актив Х, добраться до свойств блока, лучше конечно до атрибутов, но хотя бы просто до блока расположенного на листе. Назрело несколько вариантов Вариант 1. Активный документ-семейство блоков-подсчет количества-переборка всех блоков. Но тут запинка - не знаю как распознать на каком листе лежит тот или иной блок. Блоки нашел с листами связать не знаю как. Вариант 2. Активный документ-семейство листов-подсчет количества-переборка всех листов. Но и тут увы проблема, как на листе искать нужный блок? Искать в пространстве PaperSpace или Layout? Наоборот, листы нашел, как искать блоки на них? Вопросов море, ответов мало. Направьте заблудшего дальше, прошу. ![]()
__________________
слесарь САПР |
|||
![]() |
|
||||
Пастух Регистрация: 16.07.2012
Питер
Сообщений: 318
|
Цитата:
Перед тем как давать советы, хотелось бы узнать, по каким свойствам данный блок должен находиться (Имя, Имя листа, цвет, запах и т.д.)? Это значительно уменьшит количество советов и направит в нужное русло. Заодно можете приложить файл с этим блоком, расположенным там где его нужно искать. Там можно уже будет подсказать, как добраться до атрибутов.
__________________
Автоматизация должна быть автоматической. |
|||
![]() |
|
||||
автоматизация и организация черчения Регистрация: 17.11.2009
Sterlitamak
Сообщений: 135
|
ProPeller, спасибо за проявленный интерес, выкладываю файл.
В файле лситы с блоком основной надписи, блок динамический. Итоговая задача-максимум пройти каждый лист чертежа, найти блок "Осннадпись" и в зависимости от параметра видимости в блоке, считывать информацию из атрибута "НАЗВАНИЕ-ТЕКУЩ-ЛИСТА", запоминая ее. Затем данную инфу размещаем в таблице ведомости листов. Атрибуты считывать я научился, правда пока у простых блоков, инфу запоминать и размещать в таблице тоже. А вот оперируя методами актив Х добраться до блока пока не хватает опыта и знаний. Поэтому, прошу, подскажите каким образом оптимальнее добраться до блока.
__________________
слесарь САПР |
|||
![]() |
|
||||
начинающий инженер-гидротехник Регистрация: 18.04.2010
Санкт-Петербург
Сообщений: 910
|
Fedorino, посмотрите эту тему http://forum.dwg.ru/showthread.php?t=14548
|
|||
![]() |
|
||||
Пастух Регистрация: 16.07.2012
Питер
Сообщений: 318
|
Цитата:
Код:
__________________
Автоматизация должна быть автоматической. |
|||
![]() |
|
||||
автоматизация и организация черчения Регистрация: 17.11.2009
Sterlitamak
Сообщений: 135
|
kacugu, спасибо за ссылочку, гляну.
ProPeller, спасибо за код, а вообще возможно полноценно использовать АктивХ, т.е. добраться до блоков через семейства? Например, через семейство листов - найти нужный лист, оттуда выудить инфу о семействе блоков - затем о нужном блоке. Или сразу через семейство блоков получить инфу о нужном блоке, а из него выудить на каком он листе располагается. Таким образом до объектов можно добираться или же все же придеться использовать стандартные lisp функции?
__________________
слесарь САПР |
|||
![]() |
|
|||||
Пастух Регистрация: 16.07.2012
Питер
Сообщений: 318
|
Цитата:
Цитата:
Цитата:
Цитата:
Отсюда вывод. В связи с тем что AutoCAD хранит информацию об объектах одним целым, не разделяя её на листы и т.д., приходится искать нужные объекты посредством анализа их свойств.
__________________
Автоматизация должна быть автоматической. |
||||
![]() |
|
||||
автоматизация и организация черчения Регистрация: 17.11.2009
Sterlitamak
Сообщений: 135
|
ProPeller, информация оказалась полезной, многое встало на свои места, будем работать с вхождениями блока, а не с описаниями, которые хранятся в семействе.
Цитата:
Цитата:
Или я в чем то ошибаюсь?
__________________
слесарь САПР |
|||
![]() |
|
||||
Пастух Регистрация: 16.07.2012
Питер
Сообщений: 318
|
Да, это пространство листа. Именно листа, а не листов, к тому же именно последнего активного листа.
__________________
Автоматизация должна быть автоматической. |
|||
![]() |
|
||||
автоматизация и организация черчения Регистрация: 17.11.2009
Sterlitamak
Сообщений: 135
|
Ясно, последовательное активирование листов и поиск нужного блока, увеличат время работы программы,
по сравнению с алгоритмом поиска сразу всех блоков и анализа их свойств. Пока информации достаточно, спасибо за ликбез, нужно переварить полученное ![]()
__________________
слесарь САПР |
|||
![]() |
|
||||
Пастух Регистрация: 16.07.2012
Питер
Сообщений: 318
|
Цитата:
В том варианте который я предложил, как раз и происходит поочередная фильтрация по листам, но на скорость это не сильно влияет. Я бы даже сказал наоборот, что это наиболее быстрый вариантом поиска. Более того, даже несколько тысяч таких блоков, расположенных на разных листах, найдутся в течении 1-2 секунд. П.С. Если бы блок был не динамическим и мы бы точно знали в каком листе искать, то код сократился бы втрое.
__________________
Автоматизация должна быть автоматической. |
|||
![]() |
|
||||
Регистрация: 10.08.2013
Сообщений: 11,499
|
может, SDK поможет?
|
|||
![]() |
|
||||
начинающий инженер-гидротехник Регистрация: 18.04.2010
Санкт-Петербург
Сообщений: 910
|
Вечер добрый. Пока на работе тихо, решил допилить свой старый код. Но возникла непонятка.
В файле dcl заданы элементы: Код:
Код:
Почему такое может происходить? |
|||
![]() |
|
||||
Пастух Регистрация: 16.07.2012
Питер
Сообщений: 318
|
Цитата:
__________________
Автоматизация должна быть автоматической. |
|||
![]() |
|
||||
начинающий инженер-гидротехник Регистрация: 18.04.2010
Санкт-Петербург
Сообщений: 910
|
Добавил в приложение. Пришлось dcl файлу поменять расширение на .lsp - при загрузке возникала ошибка "некорректный файл".
Смысл лиспа: ввожу данные арматурной сетки, выбираю точку вставки, отрисовывается сетка и вставляется спецификация в виде блока. |
|||
![]() |
|
||||
Пастух Регистрация: 16.07.2012
Питер
Сообщений: 318
|
Цитата:
Код:
Код:
__________________
Автоматизация должна быть автоматической. |
|||
![]() |
|
||||
Регистрация: 24.09.2012
Сообщений: 22
|
Здравствуйте!
Имеется вот такой код для внедрения внешних ссылок: Код:
И соответственно ссылки не внедрены, файл остается открытым. Подскажите, как можно решить такой вопрос? |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Если у тебя файл не открывается, то какие претензии к коду? Проверяй и файл-получатель, и файлы ссылок на ошибки, мусор и т.п.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Доброго.
После того как поставил реактор на отслеживание и возврат SAVETIME Прокат отказывается работать. Выдает либо Код:
Возможно ли подружить Реактор привожу ниже. Код:
|
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Ну, во-первых, сделай переменные локальными. Во-вторых, ты внутри реактора меняешь системную переменную, на которую настроен этот реактор. Бесконечный цикл, здрасьте!
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Примерно так:
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Спасибо маестро.
На 2013 заработало. На 2015 есть еще какая то проблема с Прокатом Кондрата, но о ней не тут. Оказывается я изначально писал не в той теме. Я думал что пишу в топике "Обновление программы «Прокат» Василия Кондрата" ))). Продолжу по правильному адресу. |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
У тебя проблема не связана с "Прокатом", так что посты я не перенес.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Я то думал у меня совсем с памятью худо стало ))).
Наверное так имелось ввиду. Цитата:
Последний раз редактировалось Red Nova, 04.12.2015 в 17:05. |
||||
![]() |
|
||||
Регистрация: 05.09.2007
RUSSIA
Сообщений: 166
|
На некоторых компьютерах время от времени Автокад начинает загружаться с отключенной командой "ОТМЕНА".
Понятно, что за это отвечает переменная "UNDOCTL", но она "только для чтения" и SETVAR не работает. ![]() Придумал вот такую проверку с исправлением: Код:
Можно ли включать "ОТМЕНУ" поизящнее что-ли? |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Для начала отключи все дополнения, которые у тебя используются. Практически гарантирую, что проблема кроется в них.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 05.09.2007
RUSSIA
Сообщений: 166
|
Цитата:
Ну и набор софта стандартный... Как его менять?! |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
В автозагрузку добавь лисп типа
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Написано на коленке, критику приму, но переделывать не буду: некогда
Код:
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
САПР Регистрация: 29.09.2011
СПб
Сообщений: 283
|
Цитата:
И да, если список из двух элементов, то поправил: Код:
__________________
На работе было скучно:shout: Последний раз редактировалось ciril, 28.12.2015 в 16:48. |
|||
![]() |
|
||||
САПР Регистрация: 29.09.2011
СПб
Сообщений: 283
|
Первый элемент в результирующем встретится только один раз?
Последний элемент встретиться только один раз? Остальные элементы дублируются? Каждый третий элемент куда денется? Гы ![]() А так, да, сложно ![]()
__________________
На работе было скучно:shout: |
|||
![]() |
|
||||
Пастух Регистрация: 16.07.2012
Питер
Сообщений: 318
|
Цитата:
Просто коды описанные выше, это какое-то извращение прям. В них сам черт ногу сломит.
__________________
Автоматизация должна быть автоматической. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
ProPeller, ты в свой код подставь список длиной 5 символов
![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
САПР Регистрация: 29.09.2011
СПб
Сообщений: 283
|
Цитата:
![]()
__________________
На работе было скучно:shout: |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Я начинаю подозревать, что человек хочет по списку точек строить массив отрезков.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Пастух Регистрация: 16.07.2012
Питер
Сообщений: 318
|
Цитата:
Конец рабочего дня и бла-бла-бла ))
__________________
Автоматизация должна быть автоматической. |
|||
![]() |
|
||||
Регистрация: 14.05.2015
Сообщений: 33
|
Всем доброго дня! Хочу вывести две строчки рядом с курсором. Нашел много полезных лиспов, в частности очень понравилась реализация от Евгения Елпанова: http://www.theswamp.org/index.php?topic=32971.0
Вопрос следующий, можно ли малой кровью добиться, чтобы функция Евгения (eea-abc str cb cf) выводила динамически изменяющиеся строчки (как изначально реализовано через prompt): Код:
Последний раз редактировалось Кулик Алексей aka kpblc, 12.01.2016 в 16:17. |
|||
![]() |
|
||||
Пастух Регистрация: 16.07.2012
Питер
Сообщений: 318
|
Цитата:
----- добавлено через ~4 мин. ----- И куда должны выводиться и какие динамические строчки?
__________________
Автоматизация должна быть автоматической. |
|||
![]() |
|
||||
Регистрация: 14.05.2015
Сообщений: 33
|
Всем привет! Помогите применить функцию vl-remove-if-not к списку вида ("%%C100" "%%C100" "%%C100" "%%C125" "%%C125" "%%C160" "%%C200" "%%C200" "%%C200") для удаления повторяющихся элементов списка. На выходе соответственно => ("%%C100" "%%C125" "%%C160 "%%C200"). Спасибо за внимание!
|
|||
![]() |
|
||||
инженер-проектировщик КИПиА Регистрация: 30.08.2008
Минск
Сообщений: 159
|
Господа!
из списка '("A" "B" "C" "D") нужно сделать список '(("A" "B") ("A" "C") ("A" "D") ("B" "C") ("B" "D") ("C" "D")) по сути выдать перечень сторон + диагоналей многоугольника написал такой код Код:
__________________
https://www.linkedin.com/in/podolinsky |
|||
![]() |
|
||||
Регистрация: 14.05.2015
Сообщений: 33
|
Всем доброго времени суток! Прикрепляю к примитиву данные: (vlax-ldata-put <vla_примитив> "mleader_name_blk" value). Как получить pickset или просто список с условием типа (= value (vlax-ldata-get <vla_примитив> "mleader_name_blk")). Пробовал конструкцию типа:
Код:
Последний раз редактировалось Inferi, 12.02.2016 в 23:08. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Попробуй нечто типа
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Надо все-таки отдыхать иногда
![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 14.05.2015
Сообщений: 33
|
(member <выражение> <список>)
Эта функция просматривает <список> - встречается ли <выражение> и возвращает часть <списка>, начинающуюся с первого найденного <выражения>. Если в <списке> нет <выражения>, MEMBER возвращает nil. Например: (member 'c '(a b c d e)) возвращает (C D E) (member 'q '(a b c d e)) возвращает nil Работает вот так, но возвращает список имен с первого найденного выражения и до конца, а нужно пройтись по списку и выбрать только те имена которые удовлетворяют условию соответствия по ldata: Код:
Нашел решение, функция возвращает список имен примитивов с фильтрацией по ldata и его значению: Код:
ldata - строка ldatavalue -строка пример вызова: (lst_nameobj_ldatavalue ldata ldatavalue) ----- добавлено через ~12 ч. ----- Чего то совсем в тупик зашел, необходимо сравнить элементы списков, и объединить их, может кому не лень поломать голову ![]() Имеем: список 1 - (("строка1" <Имя объекта: ...>) ("строка2" <Имя объекта: ...>) ...) список 2 - (("строка1" "номер1") ("строка2" "номер2") ...) На выходе список - 3: список 3 - (("строка1" <Имя объекта: ...> "номер1") ("строка2" <Имя объекта: ...> "номер2") ...) Примечание: Список 3, полученный объединением элементов списка 1 с строками списка 2 ("номер1", "номер2"), при условии равенства первых строк "строка1"="строка1". Для примера два списка: Код:
|
|||
![]() |
|
||||
Регистрация: 06.01.2016
Сообщений: 12
|
Здравствуйте Уважаемые форумчане!!! Очень нужна ваша помощь!!! Нужно сделать выборку блоков по значению атрибута. Много примерных программ, но что-то никак не получается итог.Помогите пожалуйста чем можете, За любой совет буду благодарна!!!
|
|||
![]() |
|
||||
Регистрация: 10.08.2013
Сообщений: 11,499
|
ну так выкладывайте, что не получается)
задача сводиться к двум подзадачам: 1. Получение выборки (ssget) с чертежа с использованием фильтра: тип примитивов - вставка блока, слой - такой-то и т.д. 2. Проход по полученному списку вставок блока, и если в блоке есть указанный атрибут и значение атрибута совпадает с искомым - занести в выходной список. |
|||
![]() |
|
||||
Регистрация: 06.01.2016
Сообщений: 12
|
http://experement.spb.ru/wiki/doku.p...ickselectblock
Программка на этой странице замечательно мне подходит, но почему-то по завершению выборки не происходит(((( Помогите пожалуйста, очень нужно!!! ----- добавлено через ~7 мин. ----- http://experement.spb.ru/wiki/doku.p...ickselectblock Ссылка, по которой можно скачать программку, котоая мне идеально подходит,но по итогу выборки не происходит без какой либо ошибки. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
aaalenaaa, приведи свой код - тогда и можно будет научить. А сделать за тебя и для тебя программу - это в Поиск исполнителей.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 06.01.2016
Сообщений: 12
|
А бы очень-очень хотела научиться сама писать или хотя бы править лисп. А то у меня идей куча, чтоб свою работу в атокаде оптимизировать, а реализовать сложно. Если есть ссылки, что почитать про создание лисп - буду благодарна!!! Даже не для этого примера очень хочу разобраться, но я не программист.
А по этой теме: вот этот лисп как мне кажется должен мне подходить, только выбирать нужно все блоки с одинаковым значением атрибута, и их нужно оставлять выделенными, чтоб можно было править. И еще он почему то не работает.Почему? А то может он мне как раз подойдет. Посмотрите пожалуйста хоть работает он и что делает? Спасибо!!! Последний раз редактировалось aaalenaaa, 21.02.2016 в 16:41. |
|||
![]() |
|
||||
Регистрация: 06.01.2016
Сообщений: 12
|
Код:
Код:
Последний раз редактировалось aaalenaaa, 21.02.2016 в 16:41. |
|||
![]() |
|
||||
Регистрация: 06.01.2016
Сообщений: 12
|
Здравствуйте все!!! Опять я со своей выборкой. http://dwg.ru/dnl/9204 - Вот ссылка на лисп с этого сайта, который идеально мне подходит, но по окончанию операции выборки не происходит. В командной строке написано "выбранных объектов 0". Помогите пожалуйста!!!! Он в формате быстрозагружаемого файла, поэтому не могу открыть его для редактирования.И вот файл, в котором выборку произвожу.)Подскажите, что не так!!! Пожалуйста!!!
|
|||
![]() |
|
||||
Регистрация: 06.01.2016
Сообщений: 12
|
Написала автору, пока не ответил. Но мне по сути менять ничего не нужно, только чтоб работал как в описании. Он и работает, запрашивает все как нужно, а по итогу-выборки нет, и ошибки никакой не пишет-вот в чем вопрос!! Посмотрите пожалуйста, если есть возможность на прикрепленном файле - проверьте пожалуйста как работает!!!1
|
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Во-первых, что здесь делает C#-код? Во-вторых, научить можно только если есть конкретные вопросы. А у тебя же вопрос (точнее, запрос) только один - сделайте мне программу. Проанализируй ее, пошагово пройди, проверяй значения переменных, интересуйся описаниями и параметрами вызываемых функций - тогда и станет более-менее понятно: какие вопросы задавать и по каким конкретно строкам.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 06.01.2016
Сообщений: 12
|
Спасибо за ответ в любом случае!!!
Что ж вы так строго. Я разбираюсь потихоньку по более простым программам, сравниваю похожие, нахожу где что заменили, что на что влияет. А в конкретном примере программа на сайте есть, менять ее не надо, просто итог ее я не вижу- вот в чем вопрос-запрос -просьба. Мне не нужно, чтоб кто-то ее менял, просто скажите, у вас она работает и в моем примере она может работать? Все запросы она делает верно, и выборку замечательно проводит- а итог Нет выбранных объектов. пока только в этом вопрос! Если эт сложно проверить - так и скажите. Буду дальше искать решение. Спасибо!!! |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Проверь функцию sssetfirst и ее параметры.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 06.01.2016
Сообщений: 12
|
Спасибо, посмотрю сейчас!
----- добавлено через ~20 ч. ----- Здравствуйте уважаемые!!! Я все с выборкой - программа по выборке работает хорошо на других файлах, кроме необходимого мне. Я так понимаю проблема в том, что у меня атрибут имеет в названии два слова и между ними пробел, а первое слово входит в состав всех остальных атрибутов. При указании слова для фильтра нужно похоже заменить чем то пробел - подскажите пожалуйста, чем можно заменить пробел??? И правильно ли я определила проблему?? Не судите строго, я только разбираюсь во всем этом))) |
|||
![]() |
|
||||
Регистрация: 06.01.2016
Сообщений: 12
|
Здравствуйте уважаемые!!! Помогите пожалуйста!!! Программа по ссылке http://dwg.ru/dnl/9204 работает прекрасно со всеми моими чертежами, кроме того, который нужен. Нужный мне файл я выгружаю из геокада,через мапинфо. Атрибуты им заданы автоматом. Из них нужно производить выборку по Категории земель, их виды (значения атрибутов) следующие: Земли лесного фонда; Земли сельскохозяйственного назначения и т.п. Так вот, при запуске программы по выборке, она запрашивает блок, спрашивает по какому атрибуту производить выбор и какое значение атрибута искать. Все указываю, нажимаю применить, итог - выбран 1 объект, который я указывала как исходный(((. Ну что не так? Программа в файле, типа *.fas, открыть его я не могу, чтобы посмотреть код. В справке к программе по ссылке есть символы, для обозначения различных знаков, что можно было пыталась вставить вместо пробела в значении атрибута, типа Земли?лесного?фонда, нет итога и все. ((( Или уже скажите мне,чтоб я отстала от этого файла*.fas!!!
|
|||
![]() |
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,515
|
|
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
попробуй поискать в этой теме Выбор блоков по значению атрибутов.
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
Регистрация: 06.01.2016
Сообщений: 12
|
Огромное вем спасибо за ответы-советы.
Подскажите еще,если можете, как запустить вот этот лисп. Код:
Огромное всем спасибо за ответы-советы! Подскажите еще,если можете, как запустить вот этот лисп: Код:
|
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
В самом начале приведен пример. Если убрать комментарии, получится:
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 21.12.2010
Сообщений: 20
|
подскажите пожалуйста, как лучше нарисовать полилинию по координатам из списка двух Variant. смысл вот в чем: хочу соединить атрибуты блока полилинией. атрибуты обхожу mapcar и по условию вывожу InsertionPoint. список чищу от nill и получаю точки для полилинии. как "красивее" нарисовать линию, чтобы поменьше кода
|
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Здесь есть из чего выбрать
нарисовать полилинию из списка с координатами точек (lisp) Команда _pline и список точек переменной длины
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
Регистрация: 12.01.2015
Сообщений: 261
|
Здравствуйте! Голова совсем отупела.
Не получается ни решить вопрос ни найти решение для вложенных диалоговых окон. Как автоматически вернуться во вложенное диалоговое окно после временного закрытия окон? Есть a.dcl и управляющий им a.lsp. Открытие вложенного окна выполняется выбором строки в поле list-box основного окна. Далее во вложенном окне необходимо выполнить выбор с рисунка, для чего закрываются оба окна. После выбора возврат происходит только к первому окну. Автоматический возврат к вложенному окну не получается. Что не так? a.dcl Код:
Код:
|
|||
![]() |
|
||||
Регистрация: 27.01.2012
Сообщений: 242
|
Всем привет. Очень нужна одна функция, а как ее сотворить не имею представления... Есть два чертежа - один основной с чертежами и размерами, во втором задан нужный по шаблону размерный стиль.
Нужно сделать программу которая заменяла все размеры чертежа на размеры с нужным стилем (который во втором чертеже) - Причем желательно сделать с таким условием : если первоначальный размер имеет высоту текста 2.5 - задавать ему шаблонный аннотативный стиль 1:1 250 - 1:100 500 - 1:200 и т.д. Заранее спасибо) |
|||
![]() |
|
||||
Регистрация: 20.03.2008
Сообщений: 2,680
|
А что тут иметь? Я бы раскопал тему "Программное создание размерного стиля", подставил бы туда нужные значения (разобравшись, какие из них - нужные), и создав столько размерных стилей, сколько надо, а потом запустил бы что-либо типа такого:
Код:
Последний раз редактировалось skkkk, 10.03.2016 в 21:21. |
|||
![]() |
|
||||
Регистрация: 20.03.2008
Сообщений: 2,680
|
gomer, если я правильно понял суть замечания, то это опять же к вопросу программного создания размерного стиля. Если при попытке создания он уже есть и (возможно) переопределен, то привести все его настройки в соответствие со "стандартными". А вот если речь о переопределении вручную объектов-размеров, то это действительно может ничего не дать. Не скажу особо точно о программной правке размеров - банально не сталкивался - всегда создавал программно размерные стили, по одному на каждую из нужд и сразу наносил размеры "правильно", чтоб потом не править.
И вообще, если нужна надежная рабочая и безотказная "одна функция", то на много еще таких "Как?" и "А что если..?" придется ответить. А в конце окажется, что лучше всего было бы использовать аннотативность... |
|||
![]() |
|
||||
Регистрация: 27.01.2012
Сообщений: 242
|
Спасибо большое за ответы, но мне надо не совсем это, стиль размера у меня будет один, - нужно просто чтобы у каждого размера был свой аннотативный масштаб, если размер текста 2.5 1:1, 250- 1:100....
Вопрос в том через какую функцию добавляется аннотативное свойство и добавляются аннатотивные масштабы к объекту |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 10.08.2013
Сообщений: 11,499
|
Цитата:
|
|||
![]() |
|
||||
Шаражпроектхалтурмонтаж Регистрация: 29.10.2004
Талды-Париж
Сообщений: 6,010
|
|
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
vla-get-insertionpoint
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 19.11.2014
Сообщений: 2,604
|
Никак не пойму - можно ли сортировать vla-объекты в наборе по определенному условию? Создаю набор таким образом:
Код:
|
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Во-первых, не путай BlockDefinition и BlockReference. Во-вторых, твою задачу легче решать через обычный lisp, без применения ActiveX. ПРимерно так:
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Может, проще будет сначала все же вхождение блока получить?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 21.12.2010
Сообщений: 20
|
идея такая, что мышкой указываю на атрибут, а в отчет (электрические схемы подключения ) будет уходить "tag"+"указанный атрибут". два выбора мышкой не хочу, т.к. возможно ошибиться. пока решил, для всех блоков, создать ассоциативный список всех Handle атрибутов и самого блока, а там искать по Handle
Цитата:
UPD: to P_S OwnerID подходит лучше, спасибо Последний раз редактировалось Neo, 13.04.2016 в 11:19. |
|||
![]() |
|
||||
Регистрация: 10.08.2013
Сообщений: 11,499
|
Цитата:
|
|||
![]() |
|
||||
Регистрация: 21.12.2010
Сообщений: 20
|
|
|||
![]() |
|
||||
Регистрация: 10.08.2013
Сообщений: 11,499
|
Тогда опять же - при унифицированной системе атрибутов достаточно выбирать блоки, а уже макрос - в зависимости от его назначения - выдергивает нужные значения. И вероятность человеческого фактора меньше - это надо вообще мимо блока промахнуться в целом)
|
|||
![]() |
|
||||
Регистрация: 19.11.2014
Сообщений: 2,604
|
Я некоторые атрибуты делаю скрытыми и храню в них какие-то данные, связанные с конкретным экземпляром блока. Например атрибут "ДЛИНА", где записывается какое-то число. Чтобы извлечь это значение я получаю атрибуты блока, прохожусь по ним в цикле и если таг очередного атрибута "ДЛИНА" - считываю его значение. Немного напрягает такой способ своей нерациональностью. Было бы гораздо проще, если бы вот это числовое значение извлекалось по какому-то ключу или заранее определенному индексу. Можно ли цеплять к блокам такие данные?
|
|||
![]() |
|
||||
Регистрация: 08.02.2012
Сообщений: 16
|
Добрый день, список представляет собой следующий вид ( (сила ( координаты точки приложения) (сила ( координаты точки приложения) и тд. ......). Не получается отсортировать его по возрастанию суммы координат (x+y) точек приложения.
Т.е. Из такого списка ((5.5 (3000.0 3000.0 0.0)) (10.0 (4500.0 3000.0 0.0)) (7.6 (1500.0 3000.0 0.0))) должен получиться ((7.6 (1500.0 3000.0 0.0)) (5.5 (3000.0 3000.0 0.0)) (10.0 (4500.0 3000.0 0.0))) Пробую Код:
|
|||
![]() |
|
||||
Регистрация: 21.12.2010
Сообщений: 20
|
to Сет : да и я тоже так делаю. В принципе у меня в блоках атрибутов не так и много, и пройтись циклом по каждому много времени не займет, но согласен, что рационально как-то. А если "ДЛИНА" будет не в атрибуте, то как её задавать на чертеже?
|
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 19.11.2014
Сообщений: 2,604
|
Как задавать - способов много. У меня, например, блок строки спецификации включает в себя различные данные, формируемые на стадии создания этой самой строки спецификации. Затем эти невизуальные данные используются для групповых спецификаций и прочего. Проходить циклом по каждому атрибуту и сравнивать каждый атрибут с требуемым именем в поисках нужного - довольно корявое решение. Тут даже дело не в затратах машинного времени (в данном случае это не критично), а, я бы сказал, в эстетике программирования
![]() |
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
Да правильно, я где-то здесь (может даже и в этой теме) выкладывал реализацию словарей (Map) на основе двоичных деревьев.
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
автоматизация и организация черчения Регистрация: 17.11.2009
Sterlitamak
Сообщений: 135
|
Добрый день!
Подскажите пожалуйста, ответ на такой вопрос. При переключении между листами, лисп рисующий примитивы прерывает свою работу. Подскажите, как сделать так чтобы переключение между листами не влияло на его работу, т.е. он продолжал свою работу. Допустим лисп такой: Код:
__________________
слесарь САПР |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 25.10.2008
Сообщений: 91
|
Цитата:
Что не так я делаю? Вот команды: Команда: _appload Numer.lsp успешно загружено. Команда: ; ошибка: считан неверный символ (восьмеричный): 0 Команда: Команда: (objectAppended) ; ошибка: no function definition: OBJECTAPPENDED Команда: (vl-load-com) Команда: (objectAppended) ; ошибка: no function definition: OBJECTAPPENDED Сам lisp прикреплен |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Не знаю почему, но в файле нарушена кодировка. Должна быть Windows-1251
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 25.10.2008
Сообщений: 91
|
|
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Открыл в VLIDE, а там вместо гарантированно русских символов чертовщина какая-то. Открыл в Notepad++ и там преобразовал в Windows-1251. Все получилось нормально вроде бы )
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 25.10.2008
Сообщений: 91
|
Цитата:
Код с форума http://forum.dwg.ru/showthread.php?p=814881&#post814881 пост 1655. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Так код-то будет срабатывать только при копировании мультивыноски, насколько я вижу.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Попробуй использовать
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
"По лисповски" или по автолисповски? ИХМО - если не уверен, что написал ты раз и навсегда - лучше используй mapcar с игнорированием результатов - они конечно добавляют работы GC, но эта та мелочь которая вряд-ли будет практически заметна, но зато если понадобится, что-то добавить, что возвращает результат - то не надо будет ломать структуру.
Если совсем по лисповски - то vla-SetColumnWidth - это "обертка" не из его парадигмы (в функциональном варианте она-бы возвращала новый объект таблицы с измененным столбцом - который надо-бы было обрабатывать через "свертку" списка). з.ы. в данном примере можно рассмотреть вариант (apply 'vla-SetColumnWidth (cons comp_list_tbl x))
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
Регистрация: 21.12.2010
Сообщений: 20
|
подскажите как выделить только те объекты xref, которые остались после clip.
В чертеж вставлены xref на другие чертежи, и обрезаны clip. Составляю перечень элементов: все блоки текущего чертежа + видимые блоки xref-ов. Ко всем блокам xref-ов добрался, а как выбрать только те, что видно на чертеже? |
|||
![]() |
|
||||
Возник один вопрос. Сейчас собирал программку автоматической настройки среды для отдела.
Уперся в один момент: у нас есть пара программок, которые лежат в автозагрузке "Сервис-приложения-автозагрузка". Сколько не искал по форуму - было единственное предложение дописывать в acaddoc.lsp, чего делать не хочется (уж проще руками их добавить через окна). Расковыривая объектную модель, тоже ничего похожего на правду не нашел. Есть ли, все таки, способ добраться до списка этих приложений через AutoLisp или дело совсем гиблое?
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы... |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
http://adn-cis.org/posledovatelnost-...v-autocad.html
http://adn-cis.org/autocad-autoload-security.html
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 23.04.2015
Сообщений: 163
|
Пока разбирался тут с ssget-ом, заметил, что фактические цвета рамки выбора (переменные windowareacolor и crossingareacolor) не соответствуют таковым в окне выбора цвета, видимо, из-за прозрачности. После экспериментов со сменой цвета и проверкой в паинте выяснилось, что величины RGB компонент меньше примерно в 4 раза. Но если пробовать вычислять цвет так, то на некоторых значениях отличается на несколько единиц, а хочется, конечно, точно. Так вот, как определить "настоящий" цвет заливки?
|
|||
![]() |
|
||||
Алюминиевые фасадные системы (Инженер-Конструктор) Регистрация: 29.07.2009
Санкт-Петербург
Сообщений: 2
![]() |
Есть имя переменной взятое из файла (пр. "SAPsto")
Есть значение переменной взятое из файла (пр. "KRF-107") Вопрос: Как в LISP составить команду (setq SAPsto "KRF-107") ? Имя переменной получается из файла и может меняться. Попробовал (atoi "(setq SAPsto "KRF-107")") - не получилось. Или другой вариант той же проблемы: Есть цикл, в нем N = N+1 В первом повторении цикла должны получить (setq testN 1), где testN = test1 Во втором (setq testN 1), где testN = test2 Последний раз редактировалось ZloyEjik, 07.08.2016 в 14:24. |
|||
![]() |
|
||||
Регистрация: 10.08.2013
Сообщений: 11,499
|
Цитата:
|
|||
![]() |
|
||||
Алюминиевые фасадные системы (Инженер-Конструктор) Регистрация: 29.07.2009
Санкт-Петербург
Сообщений: 2
![]() |
Цитата:
(setq test1 "1") (setq test2 "1") (setq test3 "1") (setq test4 "1") ... (setq testN "1") Другими словами, чтобы имя переменной тоже было переменно ![]() Другими способами я уже решил задачу. (1ая через cond): (while (setq stroka (read-line sett)) (cond ( (wcmatch stroka "*SAPsto*") (setq SAPsto (substr stroka 1 (vl-string-position (ascii ";") stroka)))) ; Стойка ( (wcmatch stroka "*SAPrigF*") (setq SAPrigF (substr stroka 1 (vl-string-position (ascii ";") stroka)))) ; Ригель с фрезеровкой .... )) (2ую можно записывать не одну переменную а добавлять в один список (list) все переменные, а потом считывать) Но интересно, можно ли решить задачу через изменение имени переменной. |
|||
![]() |
|
||||
Регистрация: 10.08.2013
Сообщений: 11,499
|
не усложняйте себе задачу, потом при попытке что-то изменить сами запутаетесь) автоматизировать надо то-что невозможно или затруднено сделать стандартными средствами программы. Со списком правильная мысль, в "нормальных" ЯП были бы массивы.
|
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Цитата:
Примеры функций DwgRuLispLib: Две функции работы со списками _dwgru-assoc и _dwgru-assoc-multi
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Второй вариант обычно быстрее. И читается, как правило, проще.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,515
|
|
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Уууу, робяты, ну вы и тему подняли
![]() Копирастинг кода - зло. Если какая-то последовательность действий выполняется больше чем 1 раз, стоит рассмотреть необходимость ее выноса в отдельную функцию. Например, функция создания слоя с различными параметрами, или функция вставки блока / ссылки, или функция открытия стороннего файла dwg, или функция сохранения лога, или... Короче, общий принцип понятен. При таком подходе не надо комментировать код внутри функции, достаточно дать ее внятное описание, рассказать, какой параметр за что отвечает и теде. Функция (что бы она ни делала) работает так, как написано, и возвращает строго определенные типы результатов. Постарайтесь все же найти "САПР на базе AutoCAD - как это делается" - там много интересного.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Кому как, кому как ))) У меня сейчас больше 700 функций, копипастингом не занимаюсь принципиально. Вопрос в организации работы, я думаю. Ну, все, пофлудил - и будя
![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 20.03.2008
Сообщений: 2,680
|
Может, я не совсем правильно понял, но (даже не вникая в суть кода) разве это переменная? Все, что до знака "/" - это аргументы функции, а sp_peremen, стало быть - один из них, представленный списком. И этот аргумент может стать переменной в функции более высокого уровня, и тогда его нужно локализовать в ней, но уже после "/". При этом, по-моему, придется локализовать и все остальные переменные, которые этот список будет в себя включать. Могу ошибаться, но, кажется, нельзя локализовать все переменные, локализовав одну, содержащую в себе их в виде списка.
|
|||
![]() |
|
||||
Регистрация: 12.01.2015
Сообщений: 261
|
Постараюсь дать более подробные пояснения.
В коде выполнена попытка унифицировать считывание данных с различных диалоговых окон. Не знаю на сколько эта идея бредовая. sp_peremen аргумент функции test является списком произвольного числа произвольных имен переменных и может иметь вид: (list 'ed1 'ed2 'tg1) или (list 'ed5 'ed6 'ed7 'ls1 'tg4 'tg8) или нечто иное. sp_klpoley аргумент функции test является списком ключей полей диалогового окна. Количество элементов списка и их последовательность должны соответствовать списку sp_peremen. sp_klpoley может иметь вид: (list "ed1" "ed2" "tg1") или (list "ed5" "ed6" "ed7" "ls1" "tg4" "tg8") или нечто иное. В цикле с использованием функции "set" (не setq) выполняется присвоение переменным значений. Цитата:
Ничего не нашел по локализации вложенной функции. Скорее всего ее имя должно фигурировать в перечне локальных переменных основной функции. Но подтверждение этому не нашел. Цитата:
Значит без принудительного обнуления переменных из списка не обойтись. Либо искать другие варианты решения задачи. |
|||
![]() |
|
||||
Регистрация: 20.03.2008
Сообщений: 2,680
|
Цитата:
А чем смущает такой подход? Причем, я бы даже добавил это в локальный *error* и вызывал бы его в конце выполнения кода. |
|||
![]() |
|
||||
Регистрация: 12.01.2015
Сообщений: 261
|
|
|||
![]() |
|
||||
Регистрация: 08.02.2012
Сообщений: 16
|
Добрый день, подскажите , пожалуйста, есть ли возможность с помощью Lisp преобразовать объект в блок и программно добавить к полученному блоку атрибут? Пытаюсь выполнить следующие преобразования: пользователь выбирает полилинию-полилиния преобразуется в блок-атрибут блока пользователь выбирает с помощью выпадающего DCl списка-итог, блок состоящий из полилинии с невидимым атрибутом в нем.
|
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
_.attsync или его альтернативы (написанные самостоятельно)
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 10.08.2013
Сообщений: 11,499
|
Цитата:
|
|||
![]() |
|
||||
Регистрация: 20.03.2008
Сообщений: 2,680
|
Кулик Алексей aka kpblc, я тоже подумал об этом в первую очередь, но почему-то решил, что человек, создающий атрибуты программно, должен бы уже знать, что их нужно синхронизировать. Ведь без этого даже ручное создание не обойдется. Думаю, что тут дело в чем-то другом, хотя без кода и файла-примера сказать что-то не возьмусь.
|
|||
![]() |
|
||||
Регистрация: 14.05.2015
Сообщений: 33
|
Доброго времени суток. Помогите решить задачу:
есть динамический блок ent_vla "Отвод круглый %%C315-90%%D (подъем)" с параметром поворота "Угол1"; если блок зеркалим или поворачиваем стандартными командами автокада, то реактор выполняет присвоение значения "Угол1" = (- (* 2 pi) (vla-get-rotation ent_vla))). Пока код выглядит следующим образом: Код:
|
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Как вариант - попробовать получить (ssget "_I"), но я не уверен, что это сработает. Если не повезет с ssget, можно попытаться через ActiveX получить набор выделенных объектов и проходить уже по ним.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Аффтора темы еще примите тут на консультацию?
![]() Подскажите плиз если кто знает как получить аннотативный масштаб объекта? Пока ничего внятного не нашел. При помощи vla-get-XScaleFactor можно получить масштаб блока, но все остальное (размер, текст, заливка и т.п.) не поддаются. Код:
Последний раз редактировалось Red Nova, 09.09.2016 в 05:13. |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
cannoscale? cannoscalevalue?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Когда-то я разбирался с аннотативностью: http://autolisp.ru/2011/03/17/howto-...tyle-or-block/
Может быть, подскажет решение? Честно - сейчас слишком сильно устамши, работать не могу от слова совсем
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Когда то тоже копал в эту сторону. Докопал до сих:
Код:
Код:
з.ы. Можно покопать в эту сторону: Код:
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы... Последний раз редактировалось Vladimir_Sergeevich, 13.09.2016 в 13:58. |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Давай немного вернемся назад. Ты хочешь получить масштаб аннотативного объекта - а для каких условий? Для текущего масштаба аннотативности? Для указанного видового экрана? Выяснить, вообще какие масштабы объекту назначены?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Вот что нашел у себя в заначках. Не проверял
Код:
Проверил. Работает Цитата:
__________________
Как использовать код на Лиспе читаем здесь Последний раз редактировалось VVA, 16.09.2016 в 08:18. |
|||
![]() |
|
||||
VVA, Спасибо.
![]() Обнаружил что для империальных масштабов добавляется лишний символ обратной скобки. К чему бы это? Цитата:
Хотя пока не пробовал влияет ли это на дальнейшие действия если попытаться записать этот масштаб в другой примитив (для чего собственно и искал эту функцию). |
||||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Это не лишний символ. Двойная кавычка ("), как и обратный слеш (backslash) — символ (\) служебные символы. Если ты хочешь использовать в строке как символы, то их нужно экранировать обратным слэшем
__________________
Как использовать код на Лиспе читаем здесь Последний раз редактировалось VVA, 18.09.2016 в 17:37. |
|||
![]() |
|
||||
|
||||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
Цитата:
Код:
Код:
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Тебе команду надо? Тогда смотри опции _.-save
Лиспом? См. варианты vla-save, vla-saveas
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Конструктор Регистрация: 04.04.2007
Киев
Сообщений: 536
|
|
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,402
|
Тьфу, косяк... Сначала выставляй тогда filedia в 0, потом сохраняй, и восстанавливай filedia:
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
![]() |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
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 |