Использование Field в DIESEL

Автор Тема: Использование Field в DIESEL  (Прочитано 20380 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Андрей БушманАвтор темы

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Использование Field в DIESEL
« : 13-03-2014, 12:21:01 »
Нужно, чтобы на основании значения параметра видимости одного вхождения блока, формировалось отображаемое значение атрибута в другом вхождении блока. Т.е. необходимо реализовать логику if/else. Для этого использую DIESEL (см. 0.png). Однако есть проблема... Значение вычисляется (см. 1.png), однако это происходит разово: если снова входим в редактор DIESEL, то видим что формула изменена: вместо кода поля стоит его непосредственное значение (см. 2.png).

Т.о. если в последствии менять значение параметра видимости, то это уже никак не повлияет на отображаемое в поле значение ( всегда будет показывать "2"). Есть идеи о том, как решить проблему?

UPD
Пробовал использовать eval:
$(if, $(eq, $(eval, "%<\AcObjProp Object(%<\_ObjId 8796087916608>%).Parameter(9).VisibilityState>%"), "Абсолютные отметки"), 1, 2)но результат аналогичен - формула подменяется значением.
« Последнее редактирование: 13-03-2014, 12:35:34 от Андрей Бушман »

Онлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Использование Field в DIESEL
« Ответ #1 : 13-03-2014, 12:35:38 »
У меня никаких идей. Причин две:
1. Нет нормальной документации по возможностям полей и является ли это багом или запланированным поведением - не ясно.
2. К программированию это не имеет отношения
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Андрей БушманАвтор темы

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Использование Field в DIESEL
« Ответ #2 : 13-03-2014, 12:37:27 »
2. К программированию это не имеет отношения
Выражение формируется программно, так что опосредованно вопрос имеет отношение и к программированию...

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

Онлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Использование Field в DIESEL
« Ответ #3 : 13-03-2014, 12:39:36 »
Поле формируется программно, так что опосредованно вопрос имеет отношение к программированию...
Я так понимаю если все тоже самое делаешь вручную, то результат тот же. Так что нужно разбираться с самим AutoCAD, а не с программированием...
Если же вручную все нормально, то тогда ошибка у тебя в программе...
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Андрей БушманАвтор темы

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Использование Field в DIESEL
« Ответ #4 : 13-03-2014, 12:40:22 »
выше я дал комментарий и по "п.1"...

Онлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Использование Field в DIESEL
« Ответ #5 : 13-03-2014, 12:42:14 »
Ну так на это и существует ADN - чтобы давать ответы в т.ч. и на вопросы, не освещённые в документации.
Я не против передать запрос в ADN DevHelp. Но как обычно два условия:
1) Подготовленный код и пример чертежа для тестирования.
2) Повторяемость поведения в последней версии AutoCAD.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Андрей БушманАвтор темы

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Использование Field в DIESEL
« Ответ #6 : 13-03-2014, 12:45:49 »
А что непонятного в проблеме, обозначенной в #1? Я могу скинуть DWG файл с блоками, а так же строку выражения, показанного в 0.png (дабы не набирать вручную). Версия AutoCAD и мой программный код здесь не имеют значения. Выкладывать DWG и текст выражения?

Онлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Использование Field в DIESEL
« Ответ #7 : 13-03-2014, 12:47:47 »
Версия AutoCAD и мой программный код здесь не имеют значения
Выкладывай. По поводу кода я уже понял. Ты проверил в AutoCAD 2014?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Андрей БушманАвтор темы

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Использование Field в DIESEL
« Ответ #8 : 13-03-2014, 12:57:46 »
Цитировать
Ты проверил в AutoCAD 2014?
Проверял.
Варианты формул (идентификаторы объектов [вхождения блока anchor], разумеется, будут иными):
%<\AcDiesel $(if, $(eq, $(eval, "%<\AcObjProp Object(%<\_ObjId 8796087900992>%).Parameter(9).VisibilityState>%"), "Абсолютные отметки"), 1, 2)>%и
%<\AcDiesel $(if, $(eq, "%<\AcObjProp Object(%<\_ObjId 8796087900992>%).Parameter(9).VisibilityState>%", "Абсолютные отметки"), 1, 2)>%Спасибо.

Оффлайн Дима_

  • ADN Club
  • ****
  • Сообщений: 473
  • Карма: 66
Re: Использование Field в DIESEL
« Ответ #9 : 13-03-2014, 13:32:23 »

Оффлайн Андрей БушманАвтор темы

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Использование Field в DIESEL
« Ответ #10 : 13-03-2014, 13:46:33 »
Цитата: Дима_
if x=>1 (y) else (z)
При условии что x,y,z - числа, для полей решается так:
В моём случае x - строка (текстовое значение параметра видимости).

Онлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Использование Field в DIESEL
« Ответ #11 : 13-03-2014, 13:50:27 »
Я думаю, что Дима имел не это, а то что действительно пропадает, а точнее подставляется вычисленное значение  %<\AcObjProp Object(%<\_ObjId xxx>%).Parameter(y).VisibilityState>%
Думаю, что это непобедимо. Как AutoCAD будет знать когда нужно вычислять выражение, а когда нет?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Андрей БушманАвтор темы

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Использование Field в DIESEL
« Ответ #12 : 13-03-2014, 13:55:11 »
Как AutoCAD будет знать когда нужно вычислять выражение, а когда нет?
Странный вопрос. Выражение нужно вычислять всегда. Если же нужно добавить возможность не вычисления, а только отображения формулы, то для этого уже много лет в языках программирования и операционных системах (да и не только в них) успешно используется экранирование.

Онлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Использование Field в DIESEL
« Ответ #13 : 13-03-2014, 13:56:56 »
Выражение нужно вычислять всегда
Вот оно его и вычислило и сразу подставило в "выше лежащее выражение", т.е. %<\AcObjProp Object(%<\_ObjId xxx>%).Parameter(y).VisibilityState>% сразу подставилась как строка.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Андрей БушманАвтор темы

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Использование Field в DIESEL
« Ответ #14 : 13-03-2014, 14:06:05 »
Вот оно его и вычислило и сразу подставило
Александр Наумович, вы притворяетесь? "Вычислять выражение" и "подменять выражение его значением, вычисленным разово" - это разные вещи. Странно, что подобное нужно пояснять. Поля ведь AutoCAD не подменяет их фиксированными значениями, вычисленными разово, но каждый раз вычисляет их по указанной формуле.