Где хранятся атрибуты в ЭТОМ блоке?
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Где хранятся атрибуты в ЭТОМ блоке?

Где хранятся атрибуты в ЭТОМ блоке?

Ответ
Поиск в этой теме
Непрочитано 03.11.2009, 17:46 #1
Где хранятся атрибуты в ЭТОМ блоке?
Shoorup
 
Минск
Регистрация: 16.09.2006
Сообщений: 1,587

Уважаемые знатоки!
Перед вами файл с блоком.
ФАЙЛ
В нем можно увидеть 8 атрибутов открыв редактор блоков. А если посмотреть в свойства, то их уже гораздо больше.
Внимание вопрос: Где они хранятся?

Вложения
Тип файла: dwg
DWG 2004
1.dwg (37.5 Кб, 1987 просмотров)

__________________
Поезд который устал от ржавого здравомыслия рельсов...
Просмотров: 8296
 
Непрочитано 03.11.2009, 18:31
#2
Елпанов Евгений

программист
 
Регистрация: 20.12.2005
Москва
Сообщений: 1,439
Отправить сообщение для Елпанов Евгений с помощью Skype™


Код:
[Выделить все]
(vla-GetAttributes(vlax-ename->vla-object(car(entsel))))
__________________
Чем гениальнее ваш план, тем меньше людей с ним будут согласны.
/Сунь Цзы/
Елпанов Евгений вне форума  
 
Непрочитано 03.11.2009, 19:35
#3
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Цитата:
Сообщение от Shoorup Посмотреть сообщение
Внимание вопрос: Где они хранятся?
Они хранятся вместе с вхожнением блока (см. код #2). Команда _attsync не зря существует в Автокаде.
*** Добавлено
Командой _insert вставь рядышком еще один такой же блок и сравни атрибуты
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 03.11.2009, 21:22
#4
Shoorup


 
Регистрация: 16.09.2006
Минск
Сообщений: 1,587
<phrase 1= Отправить сообщение для Shoorup с помощью Skype™


Тогда не очень понимаю команду _attsync и как она работает.
Выдержка из справки:
Цитата:
Обновление вхождений блоков с учетом новых и измененных атрибутов из указанного определения блока.

Предупреждение Команда АТРОБНОВИТЬ удаляет любое, внесенное командами АТРЕД или АТРЕДАКТ изменение формата или свойства. Она также удаляет любые дополнительные данные, связанные с блоком, и может повлиять на динамические блоки или блоки, созданные в приложениях сторонних разработчиков.
Атрибуты, которые не видны в редакторе блоков созданы программно. Это и есть эти дополнительные данные? В программе где используются эти блоки - все эти дополнительные данные используются. Но не могу понять как? Получается командой _attsync можно убить все эти эти дополнительные атрибуты и уложить прогу.
Елпанов Евгений, получил после кода надпись вида
Код:
[Выделить все]
#<variant 8201 ...>
Что это?
__________________
Поезд который устал от ржавого здравомыслия рельсов...
Shoorup вне форума  
 
Непрочитано 03.11.2009, 23:42
#5
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Shoorup, Почитай здесь со слов И списком здесь, казалось бы, и не пахнет.
Цитата:
Атрибуты, которые не видны в редакторе блоков созданы программно. Это и есть эти дополнительные данные?
Думаю что нет. Скорее всего имеются ввиду расширенные данные. Их можно посмотреть/создать программно или с помощью команд Express Tools XDATA и XDLIST
Цитата:
Получается командой _attsync можно убить все эти эти дополнительные атрибуты и уложить прогу.
__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 03.11.2009 в 23:47.
VVA вне форума  
 
Непрочитано 03.11.2009, 23:48
#6
Елпанов Евгений

программист
 
Регистрация: 20.12.2005
Москва
Сообщений: 1,439
Отправить сообщение для Елпанов Евгений с помощью Skype™


Цитата:
Сообщение от Shoorup Посмотреть сообщение
Елпанов Евгений, получил после кода надпись вида

Код:
[Выделить все]
#<variant 8201 ...>
Что это?
Это массив с объектами всех атрибутов.
Из лиспа, можно пройти по всем этим объектам и прочитать или изменить любые свойства...
__________________
Чем гениальнее ваш план, тем меньше людей с ним будут согласны.
/Сунь Цзы/
Елпанов Евгений вне форума  
 
Непрочитано 04.11.2009, 00:58
#7
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,413
Отправить сообщение для Александр Ривилис с помощью Skype™


Цитата:
Сообщение от VVA Посмотреть сообщение
Думаю что нет. Скорее всего имеются ввиду расширенные данные. Их можно посмотреть/создать программно или с помощью команд Express Tools XDATA и XDLIST
Возможно речь идет и об этом, хотя я больше склоняюсь к тому что они говорят об аттрибутах (ATTRIB), которые были добавлены программно к вставке блока. Определения атрибутов (ATTDEF) для этих атрибутов могут и не быть в описании блока и в этом случае _ATTSYNC их из вставки блока просто удалит.
Александр Ривилис вне форума  
 
Непрочитано 04.11.2009, 02:13
#8
Startrek

AutoCAD/AutoLISP
 
Регистрация: 27.08.2003
Seattle/USA
Сообщений: 1,133


Аттрибуты бывают видимые и невидимые - см. ниже. попробуй поэкспериментировать

Command entry: attdisp (or 'attdisp for transparent use)
Enter attribute visibility setting [Normal/ON/OFF] <current>:

The drawing is regenerated after you change the visibility unless REGENAUTO, which controls automatic regeneration, is off. The current visibility of attributes is stored in the ATTMODE system variable.

Normal
Retains the current visibility of each attribute. Visible attributes are displayed. Invisible attributes are not displayed.

On
Makes all attributes visible.

Off
Makes all attributes invisible.
__________________
Сквозь тернии к звездам.... и обратно :yes:
Startrek вне форума  
 
Автор темы   Непрочитано 04.11.2009, 11:02
#9
Shoorup


 
Регистрация: 16.09.2006
Минск
Сообщений: 1,587
<phrase 1= Отправить сообщение для Shoorup с помощью Skype™


Startrek, с attdisp я вчера уже побаловался.
VVA, статьи уже читаю. Очень красиво все написано. Думаю пора ознакомится с теорией, чтобы небыло дальнейших глупых вопросов.
__________________
Поезд который устал от ржавого здравомыслия рельсов...
Shoorup вне форума  
 
Непрочитано 04.11.2009, 11:29
#10
kp+

идущий по граблям
 
Регистрация: 26.05.2005
Сообщений: 5,176


Вопрос к гуру, может, не совсем по теме: возможно ли написать альтернативный вариант attsync "с человеческим лицом"?
Который, в частности, при добавлении атрибута в описание блока добавлял его во все вставленные экземпляры этого блока, но не сносил бы настройки остальных атрибутов во вставленных блоках.
kp+ вне форума  
 
Автор темы   Непрочитано 04.11.2009, 12:48
#11
Shoorup


 
Регистрация: 16.09.2006
Минск
Сообщений: 1,587
<phrase 1= Отправить сообщение для Shoorup с помощью Skype™


Меня мучает еще один вопрос... Почему при пересохранении определения блока во всех вхождениях сбрасываются свойства для атрибутов?
__________________
Поезд который устал от ржавого здравомыслия рельсов...
Shoorup вне форума  
 
Непрочитано 04.11.2009, 13:01
#12
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,413
Отправить сообщение для Александр Ривилис с помощью Skype™


Цитата:
Сообщение от Shoorup Посмотреть сообщение
Меня мучает еще один вопрос... Почему при пересохранении определения блока во всех вхождениях сбрасываются свойства для атрибутов?
Внимательно прочитал то, что я написал?
Александр Ривилис вне форума  
 
Автор темы   Непрочитано 04.11.2009, 14:14
#13
Shoorup


 
Регистрация: 16.09.2006
Минск
Сообщений: 1,587
<phrase 1= Отправить сообщение для Shoorup с помощью Skype™


Разобрался
__________________
Поезд который устал от ржавого здравомыслия рельсов...
Shoorup вне форума  
 
Непрочитано 04.11.2009, 15:10
#14
sbi


 
Регистрация: 27.04.2008
SPB
Сообщений: 3,285
Отправить сообщение для sbi с помощью Skype™


Цитата:
Сообщение от Александр Ривилис Посмотреть сообщение
Возможно речь идет и об этом, хотя я больше склоняюсь к тому что они говорят об аттрибутах (ATTRIB), которые были добавлены программно к вставке блока. Определения атрибутов (ATTDEF) для этих атрибутов могут и не быть в описании блока и в этом случае _ATTSYNC их из вставки блока просто удалит.
Спасибо! При применении _ATTSYNC команда удаляет последние изменение графа "Предриятие" меняет слой на прежний "Окно". Дальше ничего не проиходит. Приложение:
Вложения
Тип файла: dwg
DWG 2007
A4СБ.dwg (80.0 Кб, 1583 просмотров)
__________________
С уважением sbi
sbi вне форума  
 
Непрочитано 04.11.2009, 15:14
#15
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,413
Отправить сообщение для Александр Ривилис с помощью Skype™


Ну этого и следовало бы ожидать.
Александр Ривилис вне форума  
 
Непрочитано 20.02.2011, 20:01
#16
АлексЮстасу

топограф, технолог
 
Блог
 
Регистрация: 24.05.2009
Москва
Сообщений: 3,072


От иностранных товарищей достался блок с атрибутами, которые не видны в редакторе блоков. И при вставке нового такого блока их в блоке тоже не оказывается.
Как сделать эти атрибуты нормальными, обычными?
Вложения
Тип файла: dwg
DWG 2004
чужой_штамп.dwg (238.5 Кб, 1571 просмотров)
АлексЮстасу вне форума  
 
Непрочитано 20.02.2011, 21:13
#17
Кулик Алексей aka kpblc
Moderator

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


В файле присутствуют следы Civil, AutoCAD Architecture, но это неважно. Выполни _attsync и укажи на этот вставленный блок. "Отсутствующие" описания атрибутов будут удалены.
ИМХО: был вставлен "нормальный блок", а потом из него удалены вхождения "потерянных" атрибутов. И сохранены изменения в описание блока, но не выполнена синхронизация. По-моему, вручную ситуацию обратно не повернуть, только если лисп писать, по аналогии с тем, который делал Alaspher, добавляя атрибуты во вхождения блока...
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 21.02.2011, 01:10
#18
АлексЮстасу

топограф, технолог
 
Блог
 
Регистрация: 24.05.2009
Москва
Сообщений: 3,072


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
В файле присутствуют следы Civil, AutoCAD Architecture, но это неважно. Выполни _attsync и укажи на этот вставленный блок. "Отсутствующие" описания атрибутов будут удалены.
ИМХО: был вставлен "нормальный блок", а потом из него удалены вхождения "потерянных" атрибутов. И сохранены изменения в описание блока, но не выполнена синхронизация. По-моему, вручную ситуацию обратно не повернуть, только если лисп писать, по аналогии с тем, который делал Alaspher, добавляя атрибуты во вхождения блока...
Мне нужно бы как раз не удалить атрибуты, а наоборот - сохранить эти атрибуты, как будто бы это блок с этими атрибутами. Тем более, что сейчас для пользователя так и есть.
АлексЮстасу вне форума  
 
Непрочитано 27.02.2011, 15:54
#19
Кулик Алексей aka kpblc
Moderator

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


Наконец-то дошли руки на "поковыряться". Наковырял, конечно, немногое, профессионалы быстренько разгромят код Но в данном конкретном случае (вроде бы) сработало...
Код:
[Выделить все]
 (vl-load-com)

(defun dwgru-copy-attr (/ adoc blk_ref blk_def ins att)
  (vla-startundomark (setq adoc (vla-get-activedocument (vlax-get-acad-object))))
  (if (= (type (setq blk_ref (vl-catch-all-apply
                               (function
                                 (lambda ()
                                   (car (entsel "\nSelect Block reference <Cancel> : "))
                                   ) ;_ end of lambda
                                 ) ;_ end of function
                               ) ;_ end of vl-catch-all-apply
                     ) ;_ end of setq
               ) ;_ end of type
         'ename
         ) ;_ end of =
    (progn
      (setq blk_ref (vlax-ename->vla-object blk_ref)
            blk_def (vla-item (vla-get-blocks adoc) (vla-get-effectivename blk_ref))
            ins     (vla-get-insertionpoint blk_ref)
            att     (vlax-safearray->list (vlax-variant-value (vla-getattributes blk_ref)))
            ) ;_ end of setq
      (vla-put-insertionpoint blk_ref (vlax-3d-point '(0. 0. 0.)))
      (foreach item att
        (vla-addattribute blk_def
                          (vla-get-height item)
                          acattributemodeverify
                          (vla-get-tagstring item)
                          (vla-get-insertionpoint item)
                          (vla-get-tagstring item)
                          (vla-get-textstring item)
                          ) ;_ end of vla-AddAttribute
        ) ;_ end of foreach
      (vla-put-insertionpoint blk_ref ins)
      (vla-update blk_ref)
      ) ;_ end of progn
    ) ;_ end of if
  (vla-endundomark adoc)
  (princ)
  ) ;_ end of defun
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 27.02.2011, 20:49
#20
АлексЮстасу

топограф, технолог
 
Блог
 
Регистрация: 24.05.2009
Москва
Сообщений: 3,072


Отлично! Сработала! Атрибуты восстановились.
Два соображения:
1. Восстановились все атрибуты, даже те, которые и так были. Т.е. некоторые начали двоиться.
2. Можно сразу присваивать восстанавливаемым атрибутам свойства текста, которые были у исходных "фантомных" атрибутов? Цвет, шрифт, высоту, привязку?
АлексЮстасу вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Где хранятся атрибуты в ЭТОМ блоке?



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Рифмоплетство. Kryaker Разное 554 14.11.2023 11:59
Где в этом файле PROXY-объекты? Yura AutoCAD 4 09.10.2008 04:53
Где в автокаде хранятся картинки кнопок dextron3 AutoCAD 1 26.04.2007 08:53
Где хранятся координаты полки выноски ОТНОСИТЕЛЬНО ТЕКСТА? kp+ Программирование 2 31.07.2006 09:55
Где хранятся настройки ARRAY asys AutoCAD 3 22.11.2005 17:23