Forge, API и программирование – Русский – только для чтения
Задавайте вопросы и делитесь знаниями по Autodesk Forge и программированию на API программного обеспечения Autodesk
отмена
Отображаются результаты для 
Показать  только  | Вместо этого искать 
Вы имели в виду: 

Необходимо разобраться с параметром функциеи getcfg ()

13 ОТВЕТ 13
РЕШЕНО
Ответить
Сообщение 1 из 14
Anonymous
1096 просмотров, 13 ответов

Необходимо разобраться с параметром функциеи getcfg ()

Друзья! Официальная справка:

 

 

Retrieves application data from the AppData section of the acad20xx.cfg file

 

 

application это что приложение, простите? И где его брать? Спасибо, кто откликнется.

 

13 ОТВЕТ 13
Сообщение 2 из 14
Anonymous
в ответ: Anonymous


koanichL2GH5 написано:

Друзья! Официальная справка:

 

 

Retrieves application data from the AppData section of the acad20xx.cfg file

 

 

application это что приложение, простите? И где его брать? Спасибо, кто откликнется.

========================================================================

 

Application - это сам AutoCAD 🙂 В более ранних версиях AutoCAD параметры конфигурации сохранялись в файле конфигурации. Например, для версии 2016 файл называется acad2016.cfg. Это обычный текстовый файл, его содержимое может выглядеть примерно так:

 

; Configuration for AutoCAD 2016 () Microsoft Windows
; C:\Users\Acer\AppData\Local\Autodesk\AutoCAD 2016\R20.1\enu\acad2016.cfg created on 6/12/2015 at 19:54:13

[AppData]

[Version]
Platform=Microsoft Windows
FileVersion=8
ExecutableDate&Time=junkjunkjunkjunk

[Digitizer/Driver]
MenuName=Current System Pointing Device
PathName=internal
Configured=1

[Editor]
Link=0

[Menu]
T_Menu=0

 

В нем есть разделы, в том числе, [AppData]. Как видим, этот раздел пуст. Так что функция (getcfg) в данном случае бесполезна. Смысл написания конфигурационного файла объяснять долго, да и вряд ли вам это нужно. Современные программы хранят свои конфигурационные данные в системном реестре, а не в файле конфигурации, как это было во времена первых версий Windows. Это объяснять еще дольше 🙂 Да вам это и не нужно, если не собираетесь серьезно заняться программированием и писать свои приложения. Конфигурационные данные AutoCAD, в том числе, раздел AppData можно прочитать лисповской функцией (vl-registry-read). Кстати, Autodesk сообщает, что функция (getcfg) устарела, и в следующих версиях будет удалена. А вообще большинство настроек AutoCAD проще узнать из значений системных переменных функцией (getvar). А вообще-то я не совсем понял цель вашего вопроса. Просто ради спортивного интереса? Ну, прочитаете вы некоторые данные из реестра. И что будете с ними делать? Для изучения Автолиспа советовал бы сначала изучить базовые функции и приемы программирования, а уж потом лезть в дебри :))

 


 

Сообщение 3 из 14
Anonymous
в ответ: Anonymous

Вот, например, из вашего файла можно ли получить значение Platform?

 

Пишу так:

(setq temp (getcfg "AppData/AutoCAD/Version/Platform"))

Возвращается nil, и !temp тоже возврвщает nil, хотя должно быть "Microsoft Windows", ЧЯДНТ?

Сообщение 4 из 14
kpblc2000
в ответ: Anonymous

(getvar "platform")

(getenv "temp")

(getenv "tmp")

Находите сообщения полезными? Поставьте "НРАВИТСЯ" этим сообщениям! | Do you find the posts helpful? "LIKE" these posts!
На ваш вопрос успешно ответили? Нажмите кнопку "УТВЕРДИТЬ РЕШЕНИЕ" | Have your question been answered successfully? Click "ACCEPT SOLUTION" button.


Алексей Кулик aka kpblc | Aleksei Kulik aka kpblc Facebook | LinkedIn
autolisp.ru
Техническая поддержка программистов Autodesk в СНГ
Библиотека пользовательских lisp-функций | Custom Lisp-function library

Сообщение 5 из 14
Anonymous
в ответ: kpblc2000

Мне это зачем? Мне нужно getcfg прочесть хоть ЧТО-НИБУДЬ. Можно в секцию [AppData], которая пустая, написать хоть даже вручную ЧТО-НИБУДЬ, чтобы это что-нибудь прочесть функцией getcfg. Я сам не могу, я смотрю в книгу, а вижу фигу, а как ещё, вот официальная справка:

 

"AppData/application_name/section_name/.../param_name"
Return Values
Application data, if successful. If cfgname is not valid, getcfg returns nil.
Examples
Assuming the WallThk parameter in the AppData/ArchStuff section has a value of 8, the following command retrieves that value:
Command: (getcfg "AppData/ArchStuff/WallThk")
"8"

Так, то есть в описании синтаксиса притсутствует application_name, (имя приложенияч AutoCAD, как мне объяснили)

 

А в примере application_name НЕТ! Вот пример:

getcfg "AppData/ArchStuff/WallThk"

Вообще именем приложения и не пахнет. Ни AutoCAD-ом, ничем другим. Так его писать или нет и если писать, то куда?

Сообщение 6 из 14
kpblc2000
в ответ: Anonymous

Для получения текущей платформы надо не читать из cfg-файла, а воспользоваться другим механизмом. То же самое касается переменных окружения Windows.
Функции getcfg и setcfg считаются устаревшими (см.справку). Что пишет по этому поводу Н.Н.Полещук: https://books.google.ru/books?id=nByAZkS-H6AC&pg=PA93&lpg=PA93&dq=autocad+getcfg&source=bl&ots=GpA7H...
P.S. В жизни этими функциями не пользовался. Как-то без них удавалось все решать )

Находите сообщения полезными? Поставьте "НРАВИТСЯ" этим сообщениям! | Do you find the posts helpful? "LIKE" these posts!
На ваш вопрос успешно ответили? Нажмите кнопку "УТВЕРДИТЬ РЕШЕНИЕ" | Have your question been answered successfully? Click "ACCEPT SOLUTION" button.


Алексей Кулик aka kpblc | Aleksei Kulik aka kpblc Facebook | LinkedIn
autolisp.ru
Техническая поддержка программистов Autodesk в СНГ
Библиотека пользовательских lisp-функций | Custom Lisp-function library

Сообщение 7 из 14
kpblc2000
в ответ: kpblc2000

Можно найти любой файл acad*.cfg и посмотреть, что и как туда записывается. И соответственно что и как оттуда читается.

Находите сообщения полезными? Поставьте "НРАВИТСЯ" этим сообщениям! | Do you find the posts helpful? "LIKE" these posts!
На ваш вопрос успешно ответили? Нажмите кнопку "УТВЕРДИТЬ РЕШЕНИЕ" | Have your question been answered successfully? Click "ACCEPT SOLUTION" button.


Алексей Кулик aka kpblc | Aleksei Kulik aka kpblc Facebook | LinkedIn
autolisp.ru
Техническая поддержка программистов Autodesk в СНГ
Библиотека пользовательских lisp-функций | Custom Lisp-function library

Сообщение 8 из 14
Anonymous
в ответ: kpblc2000

Спасибо, но книжка Полещука у меня есть. И да, ясности она не добавляет ни на йоту.

Сообщение 9 из 14
Alexander.Rivilis
в ответ: Anonymous


@Anonymous wrote:

Спасибо, но книжка Полещука у меня есть. И да, ясности она не добавляет ни на йоту.


Вот тебе ясность:

 

Command: (getcfg "CfgData/Version/Platform") "Microsoft Windows"
Command: (getcfg "CfgData/Digitizer/Driver/MenuName") "Current System Pointing Device"
Command: (getcfg "CfgData/Version/FileVersion") "8"

Но так же как и предыдущие ораторы я советую отказаться от использования этой функции.

Відповідь корисна? Клікніть на "ВПОДОБАЙКУ" цім повідомленням! | Do you find the posts helpful? "LIKE" these posts!
Находите сообщения полезными? Поставьте "НРАВИТСЯ" этим сообщениям!
На ваше запитання відповіли? Натисніть кнопку "ПРИЙНЯТИ РІШЕННЯ" | Have your question been answered successfully? Click "ACCEPT SOLUTION" button.
На ваш вопрос успешно ответили? Нажмите кнопку "УТВЕРДИТЬ РЕШЕНИЕ"


Alexander Rivilis / Александр Ривилис / Олександр Рівіліс
Programmer & Teacher & Helper / Программист - Учитель - Помощник / Програміст - вчитель - помічник
Facebook | Twitter | LinkedIn
Expert Elite Member

Сообщение 10 из 14
Anonymous
в ответ: Alexander.Rivilis


Alexander.Rivilis написано:

@Anonymous wrote:

Спасибо, но книжка Полещука у меня есть. И да, ясности она не добавляет ни на йоту.


Вот тебе ясность:

 

Command: (getcfg "CfgData/Version/Platform") "Microsoft Windows"
Command: (getcfg "CfgData/Digitizer/Driver/MenuName") "Current System Pointing Device"
Command: (getcfg "CfgData/Version/FileVersion") "8"

Но так же как и предыдущие ораторы я советую отказаться от использования этой функции.


В двух источниках, один из которых справка сказано, что строковый параметр должен иметь вид:

(getcfg "AppData/My/Two/Quattro")

 

AppData!!!

 

А у вас почему-то CfgData. Далее должно идти имя какого-то приложения. А у вас где имя приложения?  Ну не Version же...

 

 

Сообщение 11 из 14
Alexander.Rivilis
в ответ: Anonymous


@Anonymous wrote:
В двух источниках, один из которых справка сказано, что строковый параметр должен иметь вид:

(getcfg "AppData/My/Two/Quattro")

 

AppData!!!

 

А у вас почему-то CfgData. Далее должно идти имя какого-то приложения. А у вас где имя приложения?  Ну не Version же...


"Если на клетке слона прочтёшь надпись «буйвол», не верь глазам своим." (C) Козьма Прутков

 

Как я написал работает нормально? CfgData означает читать из *.cfg-файла (вместо чтения из реестра)

В cfg-файле нет никаких приложений. То, что в квадратных скобках - это имя раздела, то, что без квадратных скобок с символом равно - переменная, значение которой можно получить. В силу того, что этой функцией не пользуется никто уже почти двадцать пять лет, никто уже и не помнит зачем она нужна и как она работает. Актуальна она была только в DOS-овских версиях AutoCAD (т.е. до AutoCAD R13 включительно - 1994 год).

 

 

Відповідь корисна? Клікніть на "ВПОДОБАЙКУ" цім повідомленням! | Do you find the posts helpful? "LIKE" these posts!
Находите сообщения полезными? Поставьте "НРАВИТСЯ" этим сообщениям!
На ваше запитання відповіли? Натисніть кнопку "ПРИЙНЯТИ РІШЕННЯ" | Have your question been answered successfully? Click "ACCEPT SOLUTION" button.
На ваш вопрос успешно ответили? Нажмите кнопку "УТВЕРДИТЬ РЕШЕНИЕ"


Alexander Rivilis / Александр Ривилис / Олександр Рівіліс
Programmer & Teacher & Helper / Программист - Учитель - Помощник / Програміст - вчитель - помічник
Facebook | Twitter | LinkedIn
Expert Elite Member

Сообщение 12 из 14
Anonymous
в ответ: Alexander.Rivilis


Alexander.Rivilis написано:

 В силу того, что этой функцией не пользуется никто уже почти двадцать пять лет, никто уже и не помнить зачем она нужна и как она работает.

Также, как и мультилиния. Грустно.

И да, работает нормально. Получается, CfgData - недокументированная возможность.

Сообщение 13 из 14
Alexander.Rivilis
в ответ: Anonymous

Вот тебе продолжение, так как с (getcfg) есть парная функция - (setcfg):

 

Command: (setcfg "AppData/Rivilis/MyVarName" "MyValue") "MyValue"
Command: (getcfg "AppData/Rivilis/MyVarName") "MyValue"

Смотрим содержимое cfg-файла:

 

[AppData/Rivilis]
MyVarName=MyValue

Теперь так:

Command: (setcfg "CfgData/Rivilis/MyVarName" "MyValue2") "MyValue2"
Command: (getcfg "CfgData/Rivilis/MyVarName") "MyValue2"

Смотрим cfg-файл:

[Rivilis]
MyVarName=MyValue2

Внимание: Обновление cfg-файла происходит только при завершении работы AutoCAD (скорее всего только если завершение успешное, а не Fatal Error)

 

Відповідь корисна? Клікніть на "ВПОДОБАЙКУ" цім повідомленням! | Do you find the posts helpful? "LIKE" these posts!
Находите сообщения полезными? Поставьте "НРАВИТСЯ" этим сообщениям!
На ваше запитання відповіли? Натисніть кнопку "ПРИЙНЯТИ РІШЕННЯ" | Have your question been answered successfully? Click "ACCEPT SOLUTION" button.
На ваш вопрос успешно ответили? Нажмите кнопку "УТВЕРДИТЬ РЕШЕНИЕ"


Alexander Rivilis / Александр Ривилис / Олександр Рівіліс
Programmer & Teacher & Helper / Программист - Учитель - Помощник / Програміст - вчитель - помічник
Facebook | Twitter | LinkedIn
Expert Elite Member

Сообщение 14 из 14
Anonymous
в ответ: Alexander.Rivilis

Здесь нет случая, если искомый параметр присутствует в раздела AppData, тогда пишем так:

(getcfg "AppData/foo")


Но вообще я хотел поблагодарить и сказать, что я, быть и может, то чего-либо подобного дошёл бы и сам, но не предполагал, что содержимое конфигурационного файла считывается только при запуске программы. Я просто менял значения параметров в файле, сохранял его, всяко пытался получить эти значения, но безуспешно. Ну и, конечно, пример из справки:

 

"AppData/application_name/section_name/.../param_name"

Такой прямо пример-пример... Но жизнь продолжается!

Не нашли то, что искали? Задайте вопросы в сообществе или поделитесь своими знаниями.

Новая тема  

Autodesk Design & Make Report