Тема: Как получить DFX-коды?

Никак не могу понять, как получить DFX-коды (XData?) объектов. Что такое AppName, XDataType, XDataValue? Какие бывают? Мне понятно про entget в LISP. Там вдля объекта указываешь номер кода, который хочешь получить и все... А причем тут AppName?
Например, как перевести к дельфи следующее:

(setq text (cdr (assoc 1 (entget (ssname all_f_mtext i)) )))

А еще лучше будет, если кто-то покажет, как, допустим, при нажатии кнопки выбрать в Каде, например, полилинию или МТекст и отобразить в ListBox'е Delphi содержание DFX-кодов этого объекта.

Re: Как получить DFX-коды?

Ну что за игнор???

Re: Как получить DFX-коды?

Смотрите иерархию класов Автокада в хелпах.
Чтобы из программы на Делфи выделить объект используется метод

Application.ActiveDocument.ActiveSelectionSet.Select

Re: Как получить DFX-коды?

Спасибо, что хоть кто-то откликнулся...
Я умею выделять объекты. Но, все-таки, пожалуйста, скажите кто-нибудь, как преобразовать лисповский код

(setq text (cdr (assoc 1 (entget (ssname all_f_mtext i)) )))

А именно: взять у него то, что идет под ?1 в DFX-кодах. ИМЕННО в DFX-коде, а не что-то типа AcadMText.Text
Это мне нужно как пример, с остальным я, надеюсь, сам разберусь.

Re: Как получить DFX-коды?

Программы на Delphi имеют доступ только к тому, что объявлено в объектной модели AutoCAD. Используя только опубликованные свойства и методы.
Функциями LISP вы никак не сможете воспользоваться. Если только не воспользоваться самим LISP с передачей результата в приемлемом виде в Delphi.
Коду 1 соответствует значение текстовой строки (если это примитив "TEXT"). В объектной модели это свойство TextString.

Re: Как получить DFX-коды?

А что можно получить через GetXData у объектов? Разве не содержимое DFX-кдов? Например, положение "модели" во вкладке "лист" можно получить и установить только через DFX-код или еще как-то? Можно ли это сделать через Get/SetXData? Просто у меня с Английским не очень, а справка не подробная...

Re: Как получить DFX-коды?

DXF-коды предназначены для специфичной обработки списков через LISP. DXF-код и значение образуют точечную пару. Чило кода является как бы индексом, по которому производится поиск данных в ассоциированных списках.
Недостаток DXF-кодов в том, что надо знать, какому коду какой параметр соответствует.
Мтеоды и свойства объектной модели более "читабельные". Человек имеет дело с достаточно понятными именами - GetXData, например. Что для "англичанина" эквивалентно "ПолучитьРасширенныеДанные". А у кого с английским "не очень" - остается его изучать, так как справки на русском никогда не будет. Или читать книги справочного характера на русском. Вообще-то справка на английском очень подробная, только ее надо читать. Исчерпывающие разъяснения и масса примеров на VBA.
Некоторые действия доступны только через объектную модель, а некоторые только через DXF-коды. Это из-за лени программистов Autodesk.

Re: Как получить DFX-коды?

А где взять эти "книги справочного характера"? Я бы купил, да видел только "САПР на базе AutoCAD..." и еще, забыл как называется, того же автора. Нашел и купил только по ЛИСПу. А по VBA или Delphi не видел. Английский изучать пробовал несколько раз. Не даетсяю
Почему никто по-простому не может ответить, Что такое AppName, XDataType, XDataValue? Какие бывают?
А справка не подробная. Примеры однотипных функций для всех объектов одни и те же, хотя результат может быть разный, в зависимости от объекта. Конкретно, опять же, не помню, но сталкивался с этим и запутался.

Re: Как получить DFX-коды?

Если Вы в справке не находите, что такое AppName, то книга "САПР на базе AutoCAD..." не поможет. В ней вообще нет справочных сведений и это не учебник. В других книгах Николая Полещука справочных данных много. В том числе и такого, чего нет в HELP.
Но книги, как и справку, надо читать. Внимательно. Если английский "не дается", то дальнейшее занятие программированием, по крайней мере на уровне, когда требуются расширенные данные, надо просто прекращать.

Re: Как получить DFX-коды?

> ShaggyDoc
Ну уж извините... Слава богу, в форумах иногда отвечают; интернет помогает, метод тыка иногда, книжки умныеб если нахожу. Так, потихонечку, я и учусь. Конечно, кроме меня мои программы врядли кого заинтересуют, но мне мои программки жизнь облегчают. И, естественно, ничего прекращать я не собираюсь, а собираюсь дальше развиваться. Вот еще вопросик возник, про объекты под курсором. Задам в форуме. Люди тут, вроде, умные. Надеюсь, ответят.
На счет AppName: мне казалось, что AppName = ApplicationName = программа автокада? Если это так, то причем здесь XData?
У Николая Полещука есть книга конкретно про лисп и есть книги, где смешана куча всего (тоже, впринципе, неплохо, но...). И в этой куче трудновато выделить что-то конкретное.

Re: Как получить DFX-коды?

Sheeff, пиши на мыло раскажу, что знаю и как умею. Время не позволяет пользоваться Инетом. А почта есть всегда. schis-pm@mail.ru

Re: Как получить DFX-коды?

> Sheeff
Ты меня извини, но  УЧИ АНГЛИЙСКИЙ! Пойми ты, обычным программерам, не интерестно отвечать на вопросы сколько будет дважды два. Без английского ты будешь - АБСОЛЮТНЫЙ  НОЛЬ

Re: Как получить DFX-коды?

> Sheeff
Книга "Visual LISP и секреты адаптации AutoCAD", стр.175, раздел "2.14.1. Структура расширенных данных".
Книга "AutoCAD 2004: разработка приложений и адаптация", стр.254, раздел "Расширенные данные".
Имя приложения назначается пользователем условно, чтобы отличить свои расширенные данные от чужих.

Re: Как получить DFX-коды?

Функция выводит в указанный файл все примитивы и DXF-коды для них

(defun ExportDXF ()
  (print)
  (setq fn (getstring T "Введите имя файла (с путем): "))
  (setq f (open fn "w"))
  (print (strcat "@" (getstring T "Описание блока: ")) f)
  (setq aa (ssget "X"))
  (setq i 0)
  (while (< i (sslength aa))
    (setq ent (entget (ssname aa i)))
    (setq ct 0)
    (print)
    (print (strcat "#" (itoa i)) f)
    (repeat (length ent)
      (print (nth ct ent) f)
      (setq ct (1+ ct))
    )
    (setq i (+ i 1))
  )
  (print "Экспорт завершен.")
)

Далее я на дельфи писал парсер который перегоняет все эти коды в таблицу а потом в XML. Но это уже не важно.
С собой у меня кода нету - но на днях я делал тоже самое на VBA - пока не доделал, но по-моему никаких проблем возникнуть не должно. Но забил, потому что мне не хочеся использовать макрос, да и код хотелось бы скрыть дабы так сказать не потерять место на рынке услуг. Теперь делаю это на Дельфи.
Через ЛИСП не рекомендую
очень долго и мучительно.... Особенно если в базу - хреновая надо отметить была затея.

Re: Как получить DFX-коды?

> Функция
выводит в указанный файл все примитивы и DXF-коды для них
А просто сохранить в DXF несудьба?

Re: Как получить DFX-коды?

там все настройки акада, все типы линий, размеров и тд.
Это мне не было нужно. Да и сразу отталкивался от правильной на мой взгляд идеи - теперь экспорт делает Дельфи - а XML парсер тот же остался smile

Re: Как получить DFX-коды?

Н.Н.Полещук пишет:

Имя приложения назначается пользователем условно, чтобы отличить свои расширенные данные от чужих.

Большое спасибо!!! Видимо, кроме Вас здесь больше нет нормальных людей. Все, блин, "ТАКИЕ УМНЫЕ"!!!

> Beer
Я УЧИЛ АНГЛИЙСКИЙ 10 ЛЕТ! И ничего не вышло! Не всем всё дано. И ВЫ не всё сможете! Но мне НЕЗНАНИЕ АНГЛИЙСКОГО АБСОЛЮТНО НЕ МЕШАЕТ ПИСАТЬ ПРОГРАММКИ, КОТОРЫЕ МНЕ НУЖНЫ!!! А форум существует, в том числе, и для того, чтобы в нем можно было задавать вопросы. Если не знаете ответ - лучше ничего не пишите. ЭТО НЕ ЧАТ!