| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > X-записи. Где и как хранить? Как добавлять, как читать, как изменять? и все таки, для чего они?

X-записи. Где и как хранить? Как добавлять, как читать, как изменять? и все таки, для чего они?

Ответ
Поиск в этой теме
Непрочитано 25.06.2017, 23:20 #1
X-записи. Где и как хранить? Как добавлять, как читать, как изменять? и все таки, для чего они?
AlexZh
 
Регистрация: 23.09.2015
Сообщений: 146

Категорически всех приветствую!

Никак у меня не получается разобраться с этими записями.
Как я понимаю, это что-то типа атрибутов, но они не видны и "записаны" в виде списка в каком-то примитиве.

Но, не понимаю, для чего тогда словари? и как там хранится вся информация об этих примитивах. или не хранится?

Что-то брал здесь - http://autolisp.ru/2012/04/06/dictionaries/.
Перед глазами Книга Полещука и Лоскутова.

И все равно мне не понять принцип работы.

Не писал в теме "Научите лиспу на примере (или как kpblc, VVA и компания пытаются обучить чайника лиспу) ". Думаю, что не только мне будет интересно.

Ну или ткните носом, пожалуйста. Честно, пытался разобраться, но никак.
__________________
Проекты СС

Последний раз редактировалось AlexZh, 25.06.2017 в 23:58.
Просмотров: 5983
 
Непрочитано 26.06.2017, 11:19
#2
ciril

САПР
 
Регистрация: 29.09.2011
СПб
Сообщений: 283


Как отказать в просьбе ткнуть носом
Полещук Н.Н., Лоскутов П.В. "AutoLISP и Visual LISP в среде AutoCAD", стр. 144 п. 1.15.1 - словари, стр. 152 п. 1.15.9 - Х-записи.
Что именно непонятно?
__________________
На работе было скучно:shout:
ciril вне форума  
 
Непрочитано 26.06.2017, 17:58
#3
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,990
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Плюс к #2 темы на этом форуме
Хэ-records
-PL_DictVar(0.95) Набор функций для хранения данных в словарях, версия: 0.95
Пример использования
Автоматический подбор высоты текста, начиная с поста #27
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 04.07.2017, 11:36
#4
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,702
Отправить сообщение для Do$ с помощью Skype™


На самом деле, на первых порах действительно сложно понять что к чему, т.к. информация, по большей части, разрознена и не систематизирована.
Что нужно для понимания, в двух словах:
  • XDATA, расширенные данные. Этот инструмент позволяет прицепить к объекту чертежа дополнительные данные. Данные пишутся именно внутрь объекта. Из особенностей: имеют ограничение по размеру, требуется зарегистрировать приложение в чертеже перед использованием.
  • Extension Dictionary - словарь, который можно добавить к объекту чертежа. Содержит записи с данными в виде XRecords. Также, может содержать вложенные словари. Словарь является отдельным объектом чертежа. Ограничений по размеру нет.
  • Named Object Dictionary (NOD) - корневой словарь чертежа. Аналог Extension Dictionary, только он относится не к какому-то определенному объекту, а является словарем всего чертежа. Всегда есть в чертеже и содержит данные об именованных объектах чертежа. В нем можно создавать собственные записи и вложенные словари.
__________________
Толковый выбор приходит с опытом, а к нему приводит выбор бестолковый. (The Mechanic)
Do$ вне форума  
 
Автор темы   Непрочитано 05.07.2017, 09:44
#5
AlexZh


 
Регистрация: 23.09.2015
Сообщений: 146


Спасибо за разъяснение.

Цитата:
Сообщение от Do$ Посмотреть сообщение
На самом деле, на первых порах действительно сложно понять что к чему, т.к. информация, по большей части, разрознена и не систематизирована.
Что нужно для понимания, в двух словах:
  • XDATA, расширенные данные. Этот инструмент позволяет прицепить к объекту чертежа дополнительные данные. Данные пишутся именно внутрь объекта. Из особенностей: имеют ограничение по размеру, требуется зарегистрировать приложение в чертеже перед использованием.
  • Extension Dictionary - словарь, который можно добавить к объекту чертежа. Содержит записи с данными в виде XRecords. Также, может содержать вложенные словари. Словарь является отдельным объектом чертежа. Ограничений по размеру нет.
  • Named Object Dictionary (NOD) - корневой словарь чертежа. Аналог Extension Dictionary, только он относится не к какому-то определенному объекту, а является словарем всего чертежа. Всегда есть в чертеже и содержит данные об именованных объектах чертежа. В нем можно создавать собственные записи и вложенные словари.
Но XDATA - это не расширенные данные.
Вот и не понятно зачем вообще эти словари.
Например, как я понимаю, один словарь можно привязать к нескольким примитивам (графическим). Или наоборот, привязать примитивы к словарю? И? Информацию по этим примитивам получать из словаря или из самих примитивов по имени словаря?

Мне не совсем понятно практическое применение. И отличие от расширенных данных, кроме размеры в примитивах.
__________________
Проекты СС
AlexZh вне форума  
 
Непрочитано 05.07.2017, 11:10
#6
ciril

САПР
 
Регистрация: 29.09.2011
СПб
Сообщений: 283


XDATA - это именно Extended Data, расширенные данные
Одно из существенных отличий между словарями и х-записями, на мой взгляд - это используемые ими dxf коды. Х-запись, в отличии от словаря, позволяет - цитирую справку: 1-369 (except 5 and 105) These values can be used by an application in any way. Xrecord objects are used to store and manage arbitrary data. They are composed of DXF group codes with “normal object” groups (that is, non-xdata group codes), ranging from 1 through 369 for supported ranges. This object is similar in concept to xdata but is not limited by size or order.
То есть, х-запись, в отличии от словаря, позволяет записать в себя гораздо более разнообразные данные.
Можно привязать словарь к примитивам, сославшись на него в расширенных данные, присоединенных к примитивам. Можно привязать примитивы к словарю, записав в него их имена. Не совсем понятно что из чего нужно извлекать, а можно все
__________________
На работе было скучно:shout:
ciril вне форума  
 
Непрочитано 05.07.2017, 11:29
#7
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Цитата:
Сообщение от ciril Посмотреть сообщение
Не совсем понятно что из чего нужно извлекать, а можно все
Вот! Извлекать можно все, что не нужно.
Profan вне форума  
 
Автор темы   Непрочитано 05.07.2017, 11:46
#8
AlexZh


 
Регистрация: 23.09.2015
Сообщений: 146


Цитата:
Сообщение от ciril Посмотреть сообщение
XDATA - это именно Extended Data, расширенные данные
Одно из существенных отличий между словарями и х-записями, на мой взгляд - это используемые ими dxf коды. Х-запись, в отличии от словаря, позволяет - цитирую справку: 1-369 (except 5 and 105) These values can be used by an application in any way. Xrecord objects are used to store and manage arbitrary data. They are composed of DXF group codes with “normal object” groups (that is, non-xdata group codes), ranging from 1 through 369 for supported ranges. This object is similar in concept to xdata but is not limited by size or order.
То есть, х-запись, в отличии от словаря, позволяет записать в себя гораздо более разнообразные данные.
Можно привязать словарь к примитивам, сославшись на него в расширенных данные, присоединенных к примитивам. Можно привязать примитивы к словарю, записав в него их имена. Не совсем понятно что из чего нужно извлекать, а можно все
так. я запутался.

есть же еще X-записи.
__________________
Проекты СС
AlexZh вне форума  
 
Непрочитано 05.07.2017, 12:02
#9
ciril

САПР
 
Регистрация: 29.09.2011
СПб
Сообщений: 283


Есть корневой словарь чертежа, в котором можно создавать и словари, и х-записи. В словарь ты можешь записать некоторую строку (dxf-3) и entity name (dxf-350), причем имя примитива может именем любого примитива, в том числе и другого словаря или х-записи. В х-запись можно записать гораздо больше в смысле разнообразия. Считай словарь собственно словарем, а х-записи - словарными статьями. В графическом примитиве создать словарь или х-запись нельзя, на них можно только сослаться, причем в расширенных данных, присоединенных к этому примитиву.
Созданные тобой вложенные словари и х-записи образуют древовидную структуру. Какой она будет, зависит от целей, здесь можно привести аналогию с файловым деревом. Но в любом случае, они будут содержаться в корневом словаре чертежа.
__________________
На работе было скучно:shout:
ciril вне форума  
 
Автор темы   Непрочитано 05.07.2017, 12:26
#10
AlexZh


 
Регистрация: 23.09.2015
Сообщений: 146


Что-то начинает в голове проясняться.

в примитивах, которые мы собираем ssget, в расширенных данных сидит "имя" словаря, в котором мы ищем информацию. так ли?
__________________
Проекты СС
AlexZh вне форума  
 
Непрочитано 05.07.2017, 12:36
#11
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,702
Отправить сообщение для Do$ с помощью Skype™


Цитата:
Сообщение от AlexZh Посмотреть сообщение
есть же еще X-записи.
Цитата:
Сообщение от Do$ Посмотреть сообщение
Extension Dictionary - словарь, который можно добавить к объекту чертежа. Содержит записи с данными в виде XRecords.
X-записи = XRecords.
Цитата:
Сообщение от AlexZh Посмотреть сообщение
Например, как я понимаю, один словарь можно привязать к нескольким примитивам (графическим).
Словарь у объекта чертежа может быть только один. Объект не обязательно должен быть графическим.
Цитата:
Сообщение от AlexZh Посмотреть сообщение
Мне не совсем понятно практическое применение. И отличие от расширенных данных, кроме размеры в примитивах.
В словарь можно внести гораздо больше данных. Кто-то проводил тестирование, и в запись словаря записал без проблем несколько гигабайт данных. Кто где и когда это делал уже не вспомню, но если интересно - гугл в помощь.
При использовании словаря не нужно выполнять регистрацию приложения в чертеже.
Некоторые встроенные в AutoCAD инструменты могут работать с расширенными данными (XDATA): изменять их при изменении объекта-владельца, выполнять фильтрацию объектов по значению в расширенных данных. Со словарями такие инструменты не работают.
Одно из самых важных различий: расширенные данные добавляются напрямую в объект. Их можно добавить объекту, которого нет в базе данных чертежа. Словарь нельзя добавить, пока объект не вставлен в базу данных чертежа. Для LISP это не актуально, а вот в .NET нужно это учитывать.

----- добавлено через ~1 мин. -----
Цитата:
Сообщение от AlexZh Посмотреть сообщение
в примитивах, которые мы собираем ssget, в расширенных данных сидит "имя" словаря, в котором мы ищем информацию. так ли?
Ох и каша у Вас в голове! Все в одну кучу смешали.
__________________
Толковый выбор приходит с опытом, а к нему приводит выбор бестолковый. (The Mechanic)
Do$ вне форума  
 
Автор темы   Непрочитано 05.07.2017, 12:44
#12
AlexZh


 
Регистрация: 23.09.2015
Сообщений: 146


Цитата:
Сообщение от Do$ Посмотреть сообщение
Ох и каша у Вас в голове! Все в одну кучу смешали.
вот и пытаюсь разобраться. пока никак не укладывается информация.
__________________
Проекты СС
AlexZh вне форума  
 
Непрочитано 05.07.2017, 12:54
#13
ciril

САПР
 
Регистрация: 29.09.2011
СПб
Сообщений: 283


К примитивам, которые выбираются ssget, могут быть присоединены расширенные данные, которые содержат имя словаря, в котором содержится х-запись, в которой содержится нужная информация.
Посмотри DXF Reference > DXF Format > Group Code Value Types и DXF Reference > DXF Format > Group Codes in Numerical Order (для х-записи до 369 кода) для представления о том, что можно записать.
__________________
На работе было скучно:shout:
ciril вне форума  
 
Непрочитано 05.07.2017, 13:11
#14
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,702
Отправить сообщение для Do$ с помощью Skype™


Цитата:
Сообщение от ciril Посмотреть сообщение
К примитивам, которые выбираются ssget, могут быть присоединены расширенные данные, которые содержат имя словаря, в котором содержится х-запись, в которой содержится нужная информация.
Вот потому-то и каша в голове. Зачем такие сложные схемы давать тому, кто только пытается разобраться в вопросе?
__________________
Толковый выбор приходит с опытом, а к нему приводит выбор бестолковый. (The Mechanic)
Do$ вне форума  
 
Непрочитано 05.07.2017, 13:22
#15
ciril

САПР
 
Регистрация: 29.09.2011
СПб
Сообщений: 283


Цитата:
Сообщение от Do$ Посмотреть сообщение
Вот потому-то и каша в голове. Зачем такие сложные схемы давать тому, кто только пытается разобраться в вопросе?
Это простейшая схема Немного более точно сформулированная, чем:
Цитата:
Сообщение от AlexZh Посмотреть сообщение
в примитивах, которые мы собираем ssget, в расширенных данных сидит "имя" словаря, в котором мы ищем информацию.
__________________
На работе было скучно:shout:
ciril вне форума  
 
Непрочитано 05.07.2017, 13:48
#16
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,702
Отправить сообщение для Do$ с помощью Skype™


Цитата:
Сообщение от ciril Посмотреть сообщение
Это простейшая схема
Позвольте не согласиться. Расширенные данные, в которые записывается имя словаря, который (как я понимаю) находится в NOD - это далеко не простейшая схема использования РД и словарей. Но весьма интересная. С одной стороны, мы имеем все плюсы от использования РД - например, возможность выбора объектов через SSGET. С другой стороны - не ограничены размерами РД для записи данных.
Тут, правда, возможны сложности при создании копии объекта. И исходный и скопированный объект будут ссылаться на один и тот же словарь, и уже независимо друг от друга им не задать значения в словаре.
Тогда, можно попробовать другой вариант - использовать словарь объекта, в котором сохранять нужные данные, а имя этой записи хранить в РД. Надо будет как-нибудь потестить на досуге.
__________________
Толковый выбор приходит с опытом, а к нему приводит выбор бестолковый. (The Mechanic)
Do$ вне форума  
 
Автор темы   Непрочитано 05.07.2017, 14:04
#17
AlexZh


 
Регистрация: 23.09.2015
Сообщений: 146


Цитата:
Сообщение от Do$ Посмотреть сообщение
Тут, правда, возможны сложности при создании копии объекта. И исходный и скопированный объект будут ссылаться на один и тот же словарь, и уже независимо друг от друга им не задать значения в словаре.
вот для этого также используется метка объекта в расширенных данных объекта.
__________________
Проекты СС
AlexZh вне форума  
 
Непрочитано 05.07.2017, 14:13
#18
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,702
Отправить сообщение для Do$ с помощью Skype™


Цитата:
Сообщение от AlexZh Посмотреть сообщение
вот для этого также используется метка объекта в расширенных данных объекта.
Какая метка, какого объекта? Допустим, я выбрал объект, Ctrl+C - Ctrl+V. РД скопируются в копию объекта вместе с этой непонятной меткой. А дальше что?
Кстати, тут еще возможен вариант, что объект будет скопирован в другой чертеж. А в нем уже не будет словаря с таким названием, а вот РД у объекта будут. И данные будут ссылаться на несуществующую запись.
__________________
Толковый выбор приходит с опытом, а к нему приводит выбор бестолковый. (The Mechanic)
Do$ вне форума  
 
Непрочитано 05.07.2017, 14:54
1 | #19
ciril

САПР
 
Регистрация: 29.09.2011
СПб
Сообщений: 283


Вот пример.
Код:
[Выделить все]
 
((eval (function (lambda (/ dict-name x-rec-name ent-name x-data)
                   (regapp "example-app")
                   (setq ent-name   (entmakex '((0 . "POINT") (10 0.0 0.0 0.0)))
                         dict-name  (dictadd (namedobjdict) "example-dict" (entmakex '((0 . "DICTIONARY") (100 . "AcDbDictionary"))))
                         x-rec-name (dictadd dict-name
                                             "example-x-rec"
                                             (entmakex
                                               (append '((0 . "XRECORD") (100 . "AcDbXrecord") (280 . 0))
                                                       (list '(102 . "{example") (cons 330 ent-name) '(300 . "example x-record data") '(102 . "}")))))
                         x-data     (list (list -3 (list "example-app" (cons 1005 (cdr (assoc 5 (entget x-rec-name))))))))
                   (entmod (append (entget ent-name) x-data))
                   (entupd ent-name)))))

((eval
   (function
     (lambda (sel-set)
       (terpri)
       (princ
         (cdr
           (assoc 300
                  (entget
                    (handent
                      (cdr
                        (assoc 1005
                               (cdr (assoc "example-app" (cdr (assoc -3 (entget (ssname sel-set 0) '("example-app")))))))))))))
       (setq sel-set nil))))
  (ssget "_X" '((0 . "POINT") (-3 ("example-app")))))

((eval (function (lambda (/ dict-list x-rec-list ent-name)
                   (setq dict-list  (cdr (assoc -1 (dictsearch (namedobjdict) "example-dict")))
                         x-rec-list (dictsearch dict-list "example-x-rec")
                         ent-name   (cdr (assoc 330 (member '(102 . "{example") x-rec-list))))
                   (mapcar 'print (entget ent-name))))))
----- добавлено через ~4 мин. -----
Цитата:
Сообщение от AlexZh Посмотреть сообщение
вот для этого также используется метка объекта в расширенных данных объекта.
Цитата:
Сообщение от Do$ Посмотреть сообщение
Какая метка, какого объекта
Думаю, что имеется ввиду вот это: 1005 Entity handle in extended data; text string of up to 16 hexadecimal digits
Note: When a drawing with handles and extended data handles is imported into another drawing using INSERT, INSERT *, XREF Bind, XBIND, or partial OPEN, the extended data handles are translated in the same manner as their corresponding entity handles, thus maintaining their binding. This is also done in the EXPLODE block operation or for any other AutoCAD operation. When AUDIT detects an extended data handle that doesn't match the handle of an entity in the drawing file, it is considered an error. If AUDIT is fixing entities, it sets the handle to 0
__________________
На работе было скучно:shout:
ciril вне форума  
 
Непрочитано 05.07.2017, 15:19
#20
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,702
Отправить сообщение для Do$ с помощью Skype™


Цитата:
Сообщение от ciril Посмотреть сообщение
Вот пример.
А зачем оборачивать лямбду в eval и function?
Код:
[Выделить все]
 ((lambda () (alert "Test")))

((eval (function (lambda () (alert "Test")))))
Цитата:
Сообщение от ciril Посмотреть сообщение
Думаю, что имеется ввиду вот это:
Допустим, но на какой объект будет ссылаться метка и как это поможет, если объект будет скопирован?
__________________
Толковый выбор приходит с опытом, а к нему приводит выбор бестолковый. (The Mechanic)
Do$ вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > X-записи. Где и как хранить? Как добавлять, как читать, как изменять? и все таки, для чего они?

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Для чего нужен диспечер конфигурации слоёв Theodora AutoCAD 7 16.03.2020 13:20
С чего начать изучение AutoCad и с чего начинать карьеру в строительстве? kenmamon Разное 115 11.02.2013 16:30
Из чего лучше построить одинокостоящую стену 6х4м? McCobra Прочее. Архитектура и строительство 1 27.07.2012 19:45
Автомобильные диски с «полкой» — для чего? tematema Машиностроение 3 22.11.2011 11:30
Из чего делают пол и крышу в проекте обычного контейнера? dextron3 Конструкции зданий и сооружений 3 02.09.2011 11:00