Реклама i
|
||
| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
ПОле, вставленное в атрибут блока
проектировщик
Украина
Регистрация: 08.05.2004
Сообщений: 1,123
|
||
Просмотров: 14098
|
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,431
|
ИМХО: неизлечимо. Поле привязывается к ID объекта, которое меняется при вставке из буфера. Поле надо переделывать.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
архитектор Регистрация: 10.08.2005
Ростов-на-Дону
Сообщений: 5,345
|
у меня такая фигня творится с отметками что я делал. Иногда, случается при вставке из буфера обмена блока-отметки в файл где уже есть такой же блок. Лечу или удалением предыдущей версии блока или работаю в новом чистом файле. По другому ничего не придумал
![]() |
|||
![]() |
|
||||
AutoCAD/AutoLISP Регистрация: 27.08.2003
Seattle/USA
Сообщений: 1,133
|
в 2007-М можно привесить в атрибуту переменную лиспа ( вмест объекта) - может сработать если лиспом ее менять, но с динамическим блоком , черт его знает?
__________________
Сквозь тернии к звездам.... и обратно :yes: |
|||
![]() |
|
||||
- Регистрация: 24.07.2005
Москва
Сообщений: 1,335
|
Цитата:
|
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,431
|
"Формулу" поля можно попробовать получить через .FieldCode. А значение - через .TextString (ЯТД).
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Инженер по автоматизации (строительство) Регистрация: 05.05.2006
Люберцы
Сообщений: 241
|
Крыс
Так в том то и дело, что у атрибута почему-то НЕТ свойства .FieldCode! Собственно, если это невозможно на VBA, то остается один путь: каким-то манером передать из VBA в Lisp атрибут, как объект, или передать ID объекта, а обратно получить формулу поля (назовем это так). Возможно ли такое решение? C Lisp'ом я, мягко говоря, не знаком. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,431
|
Хм... Действительно. Есть только FieldLength, которая поможет как мертвому припарки.
Ну не хочет кад по-плохому, по-хорошему будет еще хуже ![]() Без проверок, все на уровне идеи: Код:
![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Инженер по автоматизации (строительство) Регистрация: 05.05.2006
Люберцы
Сообщений: 241
|
Крыс
Спасибо за помощь, однако код что-то не то выдает На Lisp'e добрые люди задачу решили, теперь бьюсь головой об стену, как это в VBA запихать? Как передать в Lisp, ну допустим ID атрибута, а обратно получить код поля? Вот код, который получает код поля (в данном случае - ссылку на другой текстовый объект, из-за чего, собственно, и весь сыр-бор), потом запрашивает МТекст, в который это поле вставляет Код:
|
|||
![]() |
|
||||
- Регистрация: 24.07.2005
Москва
Сообщений: 1,335
|
2den001
Чы читал сотый элемент словаря AcDbField? на ВБА? в проге сказано что читается этот элемент, только поле там хранится не в нужном нам виде, а вдругом, потом получают ObjektID преобразовав VLA объект, о добавляют нужные скобки, и удаляют ненужные, вобщем скорее всего все ето хозяйство реализуемо на ВБА, КРЫС!!! ну разрули программу пожалуйста - очень надо!!! |
|||
![]() |
|
||||
Инженер по автоматизации (строительство) Регистрация: 05.05.2006
Люберцы
Сообщений: 241
|
Sleekka
Я ж говорил, не получилось у меня вообще словарь прочесть. Я пробовал .GetExtentionDictionary, и ни фига. Точнее, есть там объект "ACAD_FIELD", но попытки что-либо с ним сделать не увенчались успехом. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,431
|
Так. Для лиспа у меня вроде как срослось:
Код:
На VBA не получилось - через HasExtensionDictionary выполнить корректную проверку не удалось. Чего-то там совсем я запутался. В качестве начала что-то подобное: Код:
Код:
![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Инженер по автоматизации (строительство) Регистрация: 05.05.2006
Люберцы
Сообщений: 241
|
Крыс
Спасибо. А с GetExtensionDictionary я тоже долго возился, потом плюнул. Решил сойти с ума как-нибудь в другой раз ![]() Как бы теперь Lisp и VBA увязать, вот вопрос? У меня есть ID атрибута (можно добыть ID блока, если надо), с каким бубном поскакать, чтобы он в код поля превратился? Меня пока не осенило... ![]() |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,431
|
Дык ента...
Если лиспом, то можно использовать нечто наподобие: Код:
Код:
Код:
P.S. На форуме как-то вроде были решения по этому вопросу.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Инженер по автоматизации (строительство) Регистрация: 05.05.2006
Люберцы
Сообщений: 241
|
Крыс
Да я не об этом. Про это я в курсе. Как из VBA вызвать Lisp-фунцкцию, которая по заданному ID атрибута вернет его значение в виде кода поля, с которым в VBA можно было бы дальше работать. Проще говоря, ищется замена отсутствующему в VBA свойству FieldCode для атрибутов. Или я уже торможу? По-моему, еще нет... ![]() |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,431
|
Я сейчас торможу по-черному, поэтому не обижайся, ок?
ThsDrawing.SendCommand "(lisp-function parameters)" ИМХО так вызывать функцию. А какие параметры ей передавать - ну это уж от нее и будет зависеть. Нечто наподобие такого, наверное? LISP: Код:
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,431
|
Ну ладно, а если просто получить ObjectID и запустить лисп с ним, выдаст результат или нет? Подчеркиваю - ObjectID надо делать не для блока, а для атрибута.
Если лисп сработал, то результат его выполения можно и в UserS1 засунуть, а из VBA прочитать значение.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Инженер-конструктор Регистрация: 09.04.2006
г. Запорожье Украина
Сообщений: 368
![]() |
Чего вы лиспы трогаете товарищи
![]() Проблема в том что в рисунке возможно уже имеется вхождение этого блока..поэтому и происходит несогласованность. Запусти команду purge, очисть все вхождения данного блока и удали его из рисунка..потом через дизайн центр вставь этот блок, и больше его не из кармана и из дизайн центра не вставляй..только копируй тот что первый раз вставил..зачем лиспы?? |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,431
|
> Mercury : Я судорожно пытаюсь понять, про что твоя реплика.
Цитата:
В общем, чтоб было чего тестить: lisp: Код:
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Проектирование Регистрация: 17.11.2004
г. Москва
Сообщений: 328
|
Цитата:
_copy ,а не _copyclip и _copybase |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,431
|
Понятно. Тема, как всегда, ушла в сторону от начальных задач
![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,431
|
Ну ладно, народ, не бушуйте. Прочтите пост 5 - там den001 честно предупредил обо всем
![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Проектирование Регистрация: 17.11.2004
г. Москва
Сообщений: 328
|
Цитата:
Тема вильнула в сторону ВБА и ЛИСП :P на две стравницы... Но у maestro есть вполне простой вопрос: в блоке при копировании появляются "плюсо-минусы". Что делать? мой ответ очч прост использовать Copy Selection, а не Copy и Copy Base Point. А при копировании из одного файла в другой использовать DISIGNCENTER |
|||
![]() |
|
||||
Инженер по автоматизации (строительство) Регистрация: 05.05.2006
Люберцы
Сообщений: 241
|
Mercury, tokhot
Об чем шум-то? Тема с апреля неживая была ![]() Крыс С users1 спасибо, наверное, едиственный путь. Дело осталось за Lisp'ом. Ты, наверное, уже понял, что я в нем, как младенец ![]() P.S. Да, и еще я проверяю конкретное значение атрибута (AttributeReference, а не AttributeDefinition) Вот в таком виде: Код:
|
|||
![]() |
|
||||
Инженер по автоматизации (строительство) Регистрация: 05.05.2006
Люберцы
Сообщений: 241
|
Только что, наконец, прочел, об чем был вопрос в теме, извлеченной мною из недр забвения
![]() P.S. А я, кстати, и не знал (или забыл крепко), что при копировании через буфер поля слетают. Все время копировал их командой _copy. Крыс По поводу моего вопроса. К тебе обращены мои надежды! ![]() |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,431
|
Сегодня вроде в башке какое-никакое просветление наблюдается, так что может, и добьемся более интересных результатов
![]() Итак, в лиспе я одну (entget) пропустил, вариант Код:
Ну не дружу я с ним, хоть тресни! Блин, я раздолбаю системник! Какого ляда оно не срабатывает? Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Инженер по автоматизации (строительство) Регистрация: 05.05.2006
Люберцы
Сообщений: 241
|
Крыс
Жизнь налаживается. Но Lisp все равно выдает неправильный результат. \\AcObjProp Object(%<\\_ObjIdx 0>%).TextString В то время, как должно быть %<\AcObjProp Object(%<\_ObjId 2059676856>%).TextString>% Из VBA нужно передавать все-таки ID AttributeReference, a не AttributeDefinition из пространства блока. Код, как и был в №30 Код:
В Lisp'e, я так понял, дело за малым: в возвращаемой строке напрочь отсутствует упоминание об ID объекта и неправильный синтаксис. "Я говорю - сойду с ума, она мне - погоди" В.Высоцкий P.S. Может, эту тему пора уже в Программирование переместить? |
|||
![]() |
|
||||
- Регистрация: 24.07.2005
Москва
Сообщений: 1,335
|
Обсуждалось на форуме autodesk.com
http://discussion.autodesk.com/threa...sageID=5034943 вот код на лиспе и макрос на ВБА выложеный автаром: Цитата:
Цитата:
Цитата:
|
|||
![]() |
|
||||
Инженер по автоматизации (строительство) Регистрация: 05.05.2006
Люберцы
Сообщений: 241
|
Да причем здесь ET?? Он функцию, прописанную в лиспе не видит почему-то. В первом случае это GetFieldCode, во втором f2t. Но в ответ на f2t он говорит, что ничего такого не знает, и вообще он здесь не при чем.
Кстати, код в №12 рабочий, но он требует выбрать объект, а нужно, чтобы работал по ID. |
|||
![]() |
|
||||
- Регистрация: 24.07.2005
Москва
Сообщений: 1,335
|
den001
Успокойся пожалуйста, на тебя никто не давит, просто не понятно что у тебя не работает? 1 лисп в моем посте выдает мутату какую то но зато второй выдает нормальный результат. %<\AcObjProp Object(%<\_ObjId 2130191104>%).TextString>% вот такой например, теперь осталось, только сделать следующее передать данные на ВБА и сделать так чтобы ВБА запустило лисп как я понимаю, ето не проблема, я только не вкурсе как ВБА будет ожидать результата, можно например реактор соорудить на появление в Переменной user1 какого то результата, потому что она пока 0. Второй лисп не использует глобальных переменных автокада выводит данные в лисповские переменные, возможно это вызывает у тебя трудности, пиши чем смогу помогу. |
|||
![]() |
|
||||
Инженер по автоматизации (строительство) Регистрация: 05.05.2006
Люберцы
Сообщений: 241
|
Блин, действительно, работает. Но он предлагает выбрать объект, такое решение уже есть в №12. А нужно в него через VBA ID атрибута передать, а ответ записать в users1. Вот эту задачу если решим, то остальное - дело техники. Но задача оная решается только на Lisp'e, это, увы, не ко мне. [sm2100]
В общем, нужен код на Lisp'e, который по заданному ID атрибута записывает код поля в users1 P.S. Не обижайся, я просто задолбался уже ковыряться с этим ![]() |
|||
![]() |
|
||||
- Регистрация: 24.07.2005
Москва
Сообщений: 1,335
|
Ща поналемерю просьба сильно не пинать:
Как я вижу, т.е. как приходится видеть всилу ламерских знаний. Ты с ВБА получив ИД объекта, записываешь в Users2, лисп читает ету цифирь, делает че ему и положено, и записывает field code в USERS1, ты пишешь реактор на значение отличное от nil, в переменной USERS1 на вба, и считываешь данные из нее. Я полный ламер, понятия не имею как пользоваться средой, Visual lisp, но по моему ламерскому мнению вот ето должно работать, в противном случае придется ждать ОТЦОВ, чтобы подсобили: Цитата:
|
|||
![]() |
|
||||
- Регистрация: 24.07.2005
Москва
Сообщений: 1,335
|
ну вот я вроде написал если конечно так можно назвать эту лажу, тока я хз как сделать чтобы результат вычислений не выводился командную строку
Документация: 1) лисп вызывается без параметров из командной строки вводом "f2t" 2) считывает значение из пользовательской переменной users1 3) результат вычислений заностит в пользовательскую переменную users2 Код:
[ATTACH]1173480667.dwg[/ATTACH] |
|||
![]() |