Проблема с vlax-put-property - ошибка несовпадения типов
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Проблема с vlax-put-property - ошибка несовпадения типов

Проблема с vlax-put-property - ошибка несовпадения типов

Ответ
Поиск в этой теме
Непрочитано 08.04.2025, 15:18 #1
Проблема с vlax-put-property - ошибка несовпадения типов
zmaximus
 
Регистрация: 11.04.2008
Сообщений: 16

Добрый день.

Есть динамический блок со свойством Visibility внутри. Окна по типам, с возможностью выбора. Проблема в том, что значение свойства для конкретного экземпляра блока хранится в текстовом виде, и если в редакторе блока нужно переименовать конкретный тип, то все экземпляры, которым он был присвоен, слетают на самый первый. Решение напрашивается простое - создать лисп, которым выбирать блок, нужное название VisibilityState, запоминать все блоки с выбранным значением, переименовывать его в свойствах объекта, и выбранным объектам присваивать новое название. Споткнулся на том, что функция

(vlax-put-property my_Obj 'AllowedValues my_Values)

всегда выдает ошибку "ошибка: ActiveX Server возвратил ошибку: Несовпадение типов". Даже если прямо перед ней выполнить

(setq my_Values (vlax-get-property my_Obj 'AllowedValues))

то выдает ту же ошибку. Пробовал вместо vlax-get-property делать vlax-get. Не помогает. Причём для 'Value всё работает прекрасно. Перерыл весь интернет, решения не нашел.
Подскажите, плиз, в чем проблема?
Просмотров: 810
 
Непрочитано 08.04.2025, 15:37
#2
Кулик Алексей aka kpblc
Moderator

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


Я б проверял последовательно:
1. my_Obj - это вообще что? Указатель на описание блока?
2. доступность allowedvalues на запись. Может, оно вообще ReadOnly

И что по этому поводу говорит справка VBA?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 08.04.2025, 15:57
#3
zmaximus


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Я б проверял последовательно:
1. my_Obj - это вообще что? Указатель на описание блока?
Тут всё ок, поскольку со свойством 'Value всё работает. Ну и получение 'AllowedValues по нему вполне происходит.

Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
2. доступность allowedvalues на запись. Может, оно вообще ReadOnly

И что по этому поводу говорит справка VBA?
В Гугле я никакой информации не нашел. Что такое справка VBA?
zmaximus вне форума  
 
Автор темы   Непрочитано 08.04.2025, 17:59
#4
zmaximus


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


Немного разобрался.

Тип объекта #<VLA-OBJECT IAcadDynamicBlockReferenceProperty 0000023822d5d508>

Да, vlax-dump-Object показывает, что ридонли.

Подозреваю, что ссылка на конкретный экземпляр объекта в чертеже. Я так понимаю, что нужно как-то дотянуться до общего описания блока в базе данных, и менять там. Только вот как?
zmaximus вне форума  
 
Непрочитано 08.04.2025, 19:15
#5
Кулик Алексей aka kpblc
Moderator

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


Насколько я знаю, никакой официальной документации по поводу создания и редактирования описаний дин.блоков не существует. Вхождения - добро пожаловать.
А так, если выполняется переименование видимости, я б делал, наверное, по-другому. Получить описание блока, получить список видимостей, для каждого вхождения создать списки / точечные пары типа "ename (или handle, что больше нравится)"-"Порядок активной видимости в списке видимостей", запомнить все это богатство в глобальной переменной, зайти в редактор блока, руками поменять названия видимостей, выйти из редактора блока, вызвать команду восстановления: опять же для того же блока получаем список видимостей, проходим по списку, для каждого ename-handle-vla-указателя устанавливаем тот номер видимости, который был сохранен. Решение геморройное и не сильно красивое, но на бОльшее меня сейчас не хватит.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 09.04.2025, 09:16
#6
trir


 
Регистрация: 18.12.2010
Сообщений: 5,107


Цитата:
Что такое справка VBA?
https://help.autodesk.com/view/OARX/...0-18A565B15A02
trir вне форума  
 
Автор темы   Непрочитано 09.04.2025, 11:31
#7
zmaximus


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
зайти в редактор блока, руками поменять названия видимостей, выйти из редактора блока, вызвать команду восстановления
В принципе, я тоже склоняюсь к чему-то подобному.

А вы не в курсе, через API есть возможность описания дин.блоков редактировать? Я в своё время что-то через Delphi делал, вроде там шире возможности, насколько я помню.
zmaximus вне форума  
 
Непрочитано 09.04.2025, 11:36
#8
Кулик Алексей aka kpblc
Moderator

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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Насколько я знаю, никакой официальной документации по поводу создания и редактирования описаний дин.блоков не существует
И я сомневаюсь, что через СОМ можно подобные вещи делать.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 09.04.2025, 11:40
#9
zmaximus


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
И я сомневаюсь, что через СОМ можно подобные вещи делать.
Кстати, нашел интересный способ решения задачи вручную. Сохранить в DXF, открыть в блокноте, и заменой переименовать нужные названия. Они сразу переименуются и в описании каждого блока, и в списке видимости, поэтому ничего не слетит.
zmaximus вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Проблема с vlax-put-property - ошибка несовпадения типов



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Возможные потери данных Property Sets в Civil, Architecture, MEP АлексЮстасу Вертикальные решения на базе AutoCAD 9 21.01.2020 03:07
Как выполнить масштабирование с одновременным масштабированием МК типов линий? Тоже самое в блоке? МишаИнженер AutoCAD 14 29.11.2019 19:47
LISP. Ошибка, слишком много аргументов. SNIIP LISP 4 03.04.2015 11:02
Ошибка в расчетных данных SCAD. В чем проблема? vanyaromashkin SCAD 6 13.05.2014 10:04
Ошибка загрузки рользовательских типов линий (lin) в AutoCad s-e-r-g-e AutoCAD 12 09.12.2007 12:57