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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Как имя VLA-OBJECT преобразовать в текстовую строку? А потом обратно, еще надо)

Как имя VLA-OBJECT преобразовать в текстовую строку? А потом обратно, еще надо)

Ответ
Поиск в этой теме
Непрочитано 10.07.2019, 11:24 #1
Как имя VLA-OBJECT преобразовать в текстовую строку? А потом обратно, еще надо)
OKJI
 
AutoLISP
 
Харьков
Регистрация: 19.06.2018
Сообщений: 101

Здравствуйте дорогие друзья)
Записываю ряд глобальных переменных в реестр для того чтобы можно было их повторно использовать после перезагрузки автокада. Для записи в реестр использую строковые представления данных.
Вот преобразователь данных:
Код:
[Выделить все]
 
(SETQ vl_1(nth 0 li_tab_spe_th))
;; где li_tab_spe_th = (#<VLA-OBJECT IAcadTable 0000000046a6b0b8> #<VLA-OBJECT IAcadTable 0000000056229498>)
(SETQ vs_1 (IF (= 'str (TYPE vl_1)) (STRCAT "v_m_s" vl_1)
		         (IF (= 'nil (TYPE vl_1)) (STRCAT "v_m_n" "")
			 (IF (= 'REAL (TYPE vl_1)) (STRCAT "v_m_r" (RTOS vl_1))
			   (IF (= 'INT (TYPE vl_1)) (STRCAT "v_m_i" (RTOS vl_1))
			     (IF (= 'VLA-OBJECT (TYPE vl_1)) (STRCAT "v_m_j"  (КАКАЯ-ТО_ФУНКЦИЯ vl_1))
			     ""
      ))))))
(VL-REGISTRY-WRITE "HKEY_CURRENT_USER\\autoLisP_sav\\" vs_ind_reg vs_1)
Данные типа:
- строка
- целое число
- вещественное число
- nil
получилось преобразовать в строку
__________________
Вечность это:
 (while T)
Просмотров: 990
 
Непрочитано 10.07.2019, 11:32
1 | 1 #2
Кулик Алексей aka kpblc
Moderator

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


vla-object в каждой сессии даже одного и того же документа будет разным. И на фига его записывать? Уж лучше хендл (хотя и тут есть свои тонкости).
P.S. Код можно написать значительно более коротко. vl-prin1-to-string или vl-princ-to-string. Хотя на фига все хранить строками - тайна.
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 10.07.2019, 11:46
#3
OKJI

AutoLISP
 
Регистрация: 19.06.2018
Харьков
Сообщений: 101
Отправить сообщение для OKJI с помощью Skype™


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
vl-prin1-to-string или vl-princ-to-string.
Какие удобные функции!!)) Огромное спасибо!!!)))

----- добавлено через ~4 мин. -----
Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
vla-object в каждой сессии даже одного и того же документа будет разным. И на фига его записывать? Уж лучше хендл (хотя и тут есть свои тонкости).
P.S. Код можно написать значительно более коротко. vl-prin1-to-string или vl-princ-to-string. Хотя на фига все хранить строками - тайна.
Пробовал в реестре хранить вещественные числа, произошел отказ... такие числа там нельзя хранить.. только строки и целые... вот и пришлось все данные шифровать в строки чтобы записать в реестр.

На счет Хендлов подумаю, спасибо за совет!)

И еще момент:
Как теперь обратно? из строки в вла-объект или хендл?

Это не дает нужный результат: (READ "#<VLA-OBJECT IAcadTable 0000000046a6b0b8>")

----- добавлено через ~24 мин. -----
Вот допустим, я получил Хендл:
Код:
[Выделить все]
 (STRCAT "v_m_j" (vlax-get-property vl_1 'Handle))
, как потом по этому Хендлу получить объект обратно?
__________________
Вечность это:
 (while T)
OKJI вне форума  
 
Непрочитано 10.07.2019, 12:16
1 | 1 #4
Кулик Алексей aka kpblc
Moderator

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


Хендл и так строка. Получение объекта: handent или vla-HandleToObject (подробнее см.в справке). Правда, Handle потеряет свою актуальность при вставке документа как блока / ссылки в другой документ. А также при выполнении _.wblock (в любом режиме). И при копировании объекта из одного документа в другой (любым способом).
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 10.07.2019, 12:24
#5
OKJI

AutoLISP
 
Регистрация: 19.06.2018
Харьков
Сообщений: 101
Отправить сообщение для OKJI с помощью Skype™


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Хендл и так строка. Получение объекта: handent или vla-HandleToObject (подробнее см.в справке). Правда, Handle потеряет свою актуальность при вставке документа как блока / ссылки в другой документ. А также при выполнении _.wblock (в любом режиме). И при копировании объекта из одного документа в другой (любым способом).
Спасибо Большое) все получилось!)
__________________
Вечность это:
 (while T)
OKJI вне форума  
 
Непрочитано 10.07.2019, 13:25
#6
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 6,469


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Хендл и так строка.
Дополню Алексея - хэндл на самом деле 64-битное целое:
Цитата:
The Handle class is the ObjectARX class designed to encapsulate the 64-bit integer handle identifiers that have been in AutoCAD for several releases before R13. A handle uniquely identifies an DBObject within a single database and is saved with that object in the database so that it persists from session to session. Handles are not unique across databases, however. In fact, duplication across databases is almost a certainty, since all databases start with the same hand seed value of 1 and go up from there.
Но в лиспе и vba он автоматически преобразуется в строчное hex-представление.
Сергей812 вне форума  
 
Автор темы   Непрочитано 10.07.2019, 13:55
#7
OKJI

AutoLISP
 
Регистрация: 19.06.2018
Харьков
Сообщений: 101
Отправить сообщение для OKJI с помощью Skype™


Всем огромное спасибо, вот результат наших совместных усилий!))) Если вдруг будут выявлены ошибки изменю)
Вложения
Тип файла: lsp Writer_REGISTR.LSP (9.2 Кб, 5 просмотров)
__________________
Вечность это:
 (while T)
OKJI вне форума  
 
Непрочитано 10.07.2019, 14:05
#8
Кулик Алексей aka kpblc
Moderator

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


OKJI, ты конечную цель озвучь. Может быть, реестр тут вообще не нужен (или нужен, но не в таком жутком обработчике)
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 11.07.2019, 09:20
#9
OKJI

AutoLISP
 
Регистрация: 19.06.2018
Харьков
Сообщений: 101
Отправить сообщение для OKJI с помощью Skype™


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Кулик Алексей aka kpblc
Лично у меня обрабатываются несколько таблиц, потом по ним строятся чертежи и формируются еще пару уточняющих таблиц. после до заполнения и корректировки второстепенных данных построение чертежей и таблиц продолжается... после этого еще есть возможность создавать выноски для каждого элемента чертежи или группы элементов...
Бывает такое что все 3 периода построений сделал, закрыл документ или автокад вылетел, а потом появляется необходимость или продолжить построения, или начать с второго периода... а для этого мне нужны глобальные переменные с данными, которые обнуляются после закрытия документа... чтобы их обратно получить нужно выполнить первый этап постоений (длится около 20 минут) или (теперь можно) просто прочитать из реестра эти переменные
__________________
Вечность это:
 (while T)
OKJI вне форума  
 
Непрочитано 11.07.2019, 09:23
#10
Кулик Алексей aka kpblc
Moderator

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


Ну так засунь связи в расширенные данные или словарные записи (хоть на примитив, хоть в документ). ИМХО это будет проще и устойчивее. Хотя, конечно, дело хозяйское.
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 11.07.2019, 09:44
#11
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 6,469


Offtop: вести буфер, и похоже немаленьких размеров, в общем реестре операционной системы - это пять
Сергей812 вне форума  
 
Автор темы   Непрочитано 11.07.2019, 09:54
#12
OKJI

AutoLISP
 
Регистрация: 19.06.2018
Харьков
Сообщений: 101
Отправить сообщение для OKJI с помощью Skype™


Не учил я в школе расширенные данные и словарные записи))) вот и пришлось через буфер выкручиваться...
это наверное придется долго переписывать...
__________________
Вечность это:
 (while T)
OKJI вне форума  
 
Непрочитано 11.07.2019, 10:01
#13
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 6,469


вроде же в лиспе можно подключить БД... в ней и промежуточные данные хранить, и часть обработки можно выкинуть из кода туда
Сергей812 вне форума  
 
Автор темы   Непрочитано 11.07.2019, 10:11
#14
OKJI

AutoLISP
 
Регистрация: 19.06.2018
Харьков
Сообщений: 101
Отправить сообщение для OKJI с помощью Skype™


Более гибкой и всемогущей обработки чем в лиспе я думаю нигде не найти)))
__________________
Вечность это:
 (while T)
OKJI вне форума  
 
Непрочитано 11.07.2019, 10:20
#15
koMon


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


Цитата:
Сообщение от OKJI Посмотреть сообщение
Более гибкой и всемогущей обработки чем в лиспе я думаю нигде не найти)))
тише, тише, Offtop: саnetарный контроль на линии)
koMon вне форума  
 
Непрочитано 11.07.2019, 10:24
#16
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 6,469


Цитата:
Сообщение от OKJI Посмотреть сообщение
Более гибкой и всемогущей обработки чем в лиспе я думаю нигде не найти)))
Ваше право, продолжайте чудеса велосипедостроения) Ведь данные для той же выноски программа может брать из примитивов чертежа, а может просто выдать запрос в БД, где уже храниться копия информации в упорядоченном виде. И умные дядя приложили прилично усилий, чтобы это происходило достаточно быстро.
Сергей812 вне форума  
 
Автор темы   Непрочитано 11.07.2019, 10:55
#17
OKJI

AutoLISP
 
Регистрация: 19.06.2018
Харьков
Сообщений: 101
Отправить сообщение для OKJI с помощью Skype™


koMon и Сергей812
Как построить вот такую схему с помощью БД?
__________________
Вечность это:
 (while T)

Последний раз редактировалось OKJI, 11.07.2019 в 11:04.
OKJI вне форума  
 
Непрочитано 11.07.2019, 11:00
#18
koMon


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


Цитата:
Сообщение от OKJI Посмотреть сообщение
Как построить вот такую схему с помощью БД?
я думаю это к trir
koMon вне форума  
 
Автор темы   Непрочитано 11.07.2019, 11:05
#19
OKJI

AutoLISP
 
Регистрация: 19.06.2018
Харьков
Сообщений: 101
Отправить сообщение для OKJI с помощью Skype™


О ужас... то не мог загрузить изображение... а потом оно загрузилось вообще не в масштабе.... что с этим делать?
__________________
Вечность это:
 (while T)
OKJI вне форума  
 
Непрочитано 11.07.2019, 11:08
#20
Admin
Administrator


 
Регистрация: 21.08.2003
Ульяновск
Сообщений: 3,900


OKJI, Как добавить вложение в сообщение?
Admin вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Как имя VLA-OBJECT преобразовать в текстовую строку? А потом обратно, еще надо)

Еврокод EN. Базовый Видеокурс
Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как построить среднюю линию между непараллельными? vigold AutoCAD 51 06.02.2019 23:44
На какие нормативные документы надо опереться при осуществлении перехода с 4х полосной дороги в 2х полосный мост и обратно. ИванГрозный Автомобильные и железные дороги, мосты, тоннели и организация движения 0 05.04.2017 11:55
Участок обезвреживания медицинских и биологических отходов надо ли там делать пожарную сигнализацию или надо спринклерную систему пожаротушения Виктор31 Прочее. Отраслевые разделы 1 01.07.2016 10:21
Надо ли считать на прогиб от собственного веса Миксер Металлические конструкции 10 18.09.2015 15:48
Размеры в текстовую строку flashground AutoCAD 6 25.03.2012 18:47