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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Почему срабатывает "табличный" реактор при сохранении рисунка.

Почему срабатывает "табличный" реактор при сохранении рисунка.

Ответ
Поиск в этой теме
Непрочитано 18.05.2010, 22:27 #1
Почему срабатывает "табличный" реактор при сохранении рисунка.
Дима_
 
Продуман
 
Питер
Регистрация: 22.02.2007
Сообщений: 2,843

Не очень ясна следуящая реакция автокада (2010, на других пока не проверял). Вот упрощенный (но рабочий) код:
Код:
[Выделить все]
(defun f (a b c) (alert "Start edit"))
(vlr-object-reactor (list (vlax-ename->vla-object (entlast))) nil '((:vlr-modified . f)))
Если нарисовать отрезок, круг, полилинию и т.п все работает корректно, но если сей реактор поставить на таблицу - то он почему-то срабатывает при сохранении документа (в том числе при "Save as" и автосохранении). Более того, если в этом реакторе идет чтение таблицы (что и было в первоначальном "сложном варианте"), то 1-ый раз она читается - а на второй - идет ошибка - отсутствие описания, вобщем эта ошибка (не срабатывание чтения таблицы на второй раз), на данный момент у меня используеться для определения кем вызван реактор (автозапуском или нет), но получаеться что-то типа взаимной компенсации ошибок. Вобщем вопрос такой - с чего вдруг при сохранении срабатывает реактор, и как от этого избавиться "по правильному"? Мешает мне это по тому, что на таблице висит реактор "пересоздающий" часть рисунка - так вот беда в том, что если пользователь что-нибудь подправил вручную (не в таблице - а скажем так в результате ее работы) то для сохранения приходиться "обнулять" реактор, что совсем не удобно.
p.s. такое же поведение обнаружилось у текстов, подумал что дело в обновлении полей при сохранении (хотя ни там, ни там их не было, но хрен знет как там в автодеске написали), отключил - не помогло. Есть идеи то подкинтье пожалуйста, я сам "порою".
__________________
Когда в руках молоток все вокруг кажется гвоздями.

Последний раз редактировалось Дима_, 19.05.2010 в 10:41.
Просмотров: 5917
 
Непрочитано 19.05.2010, 10:58
#2
mmax

Программист широкого профиля.
 
Регистрация: 08.09.2005
Челябинск
Сообщений: 721


Если реактор срабатывает на таблицу во время сохранения, то это не исправить. Точнее нельзя сделать так чтобы он не срабатывал.

Как вариант могу предложить следующее:
Есть реактор который отслеживает сохранение рисунка и там есть два события
1 документ будет сохранен (на это событие выключаем реактор таблицы)
2 Документ сохранен (включаем реактор таблицы)
mmax вне форума  
 
Автор темы   Непрочитано 19.05.2010, 13:45
#3
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,843


Про это я думал - но как-то через ж..у получаеться, ведь наверняка "попадет" что именно во время редакции таблицы (когда реактор должен сработать) заработает автосохранение.
п.с. похоже это будет мой следующий вопрос когда кто-нибудь из наших передовиков поедет на встречу с автодеском.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 19.05.2010, 17:39
#4
mmax

Программист широкого профиля.
 
Регистрация: 08.09.2005
Челябинск
Сообщений: 721


вот такой реактор не даст среагировать табличному реактору, когда выполняется сохранение и авто сохранение.
Конфликт конечно не исключен, но все зависит от поставленной задачи.
Код:
[Выделить все]
(setq autosavereactor 
(vlr-dwg-reactor nil 
(list (cons :vlr-beginsave 'OFFtablereactor)
(cons :vlr-saveComplete 'ONtablereactor))))
еще как вариант можно отключить автосохранение на период редактирования таблицы (включени/выключение автосохранения управляется переменной SAVETIME):

Код:
[Выделить все]
(vlr-object-reactor 
(list (vlax-ename->vla-object (entlast)))
 nil '((:vlr-openedformodify . autosaveOFF)))

(vlr-object-reactor
 (list (vlax-ename->vla-object (entlast)))
 nil '((:vlr-objectClosed . autosaveON)))
Имена функций действия во всех реакторах говорят о своем содержимом

Последний раз редактировалось mmax, 19.05.2010 в 21:40. Причина: Исправление ошибок в коде
mmax вне форума  
 
Автор темы   Непрочитано 19.05.2010, 20:26
#5
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,843


Спасибо - за примеры - но это все же танцы с бубнами - типа убрать одну ошибку но появится другая (потенциально), хотя видимо в данном случае что-то лучшее придумать сложно - жаль, надеюсь спецы в автодеске рано или поздно подправят. В твоем первом варианте, я так понимаю (cons :vlr-beginsave 'OFFtablereactor) надо заменить на (cons :vlr-saveComplete 'OFFtablereactor)
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 19.05.2010, 21:38
#6
mmax

Программист широкого профиля.
 
Регистрация: 08.09.2005
Челябинск
Сообщений: 721


Да.
Автосохранение началось - выключаем табличный реактор
Закончилось - включаем

Во втором варианте
клик по таблице - выключается автосохранение
редактирование закончилось(нажатия различных клавишь типа ESC ЕНТЕР) - включаем сохранение

Цитата:
танцы с бубнами - типа убрать одну ошибку но появится другая (потенциально)
Ошибок бояться - в LISP не ходить.
Цитата:
надеюсь спецы в автодеске рано или поздно подправят
Ну если вы очень влиятельный человек в этой компании специально для вас ...... )
mmax вне форума  
 
Автор темы   Непрочитано 19.05.2010, 23:19
#7
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,843


Не обязательно быть "влиятельным" - тут регулярно толковых людей приглашают на "сходняки" Автодеска куда и выноститься подобное, не то что это сразу все там бросаются решать, но тем не менее...
Про ошибок бояться - замечание оригинальное
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 20.05.2010, 12:43
1 | #8
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,353
Отправить сообщение для Александр Ривилис с помощью Skype™


Я немного детальныее проанализировал почему срабатывает реактор для таблицы при сохранении. Протокол ниже:
Код:
[Выделить все]
Command: QSAVE
<DOC REACTOR: C:\Documents and Settings\Rivilis\Мои документы\13423423.dwg> : 
[Document Lock Mode Will Change]
    MyCurMode:  Not Locked
    MyNewMode:  X Write
    CurMode:    Not Locked
    CmdName:    QSAVE
<DOC REACTOR: C:\Documents and Settings\Rivilis\Мои документы\13423423.dwg> : 
[Document Lock Mode Changed]
    MyPrevMode: Not Locked
    MyCurMode:  X Write
    CurMode:    X Write
    CmdName:    QSAVE
[ED REACTOR]    : [Command Will Start: QSAVE]
<DB REACTOR: BAE926E0> : <SysVar Will Change: VERSIONGUID>
[ED REACTOR]    : [Sysvar Will Change: VERSIONGUID]
<DB REACTOR: BAE926E0> : <SysVar Changed    : VERSIONGUID>
[ED REACTOR]    : [Sysvar Changed: VERSIONGUID]
<DB REACTOR: BAE926E0> : <Opened For Modify : AcDbLayerTableRecord, 5C>
<DB REACTOR: BAE926E0> : <Modified          : AcDbLayerTableRecord, 5C>
<DB REACTOR: BAE926E0> : <Opened For Modify : AcDbLayerTableRecord, 81>
<DB REACTOR: BAE926E0> : <Modified          : AcDbLayerTableRecord, 81>
[ED REACTOR]    : [Begin Save: intended name = "C:\Documents and 
Settings\Rivilis\Мои документы\13423423.dwg"]   (Db = BAE926E0  "C:\Documents and Settings\Rivilis\Мои документы\13423423.dwg")
APPMSG: ArxDbg, kSaveMsg
<DB REACTOR: BAE926E0> : <Modified          : AcDbBlockTableRecord, 75>
<DB REACTOR: BAE926E0> : <Modified          : AcDbBlockTableRecord, 71>
<DB REACTOR: BAE926E0> : <Modified          : AcDbBlockTableRecord, 75>
<DB REACTOR: BAE926E0> : <Modified          : AcDbBlockTableRecord, 71>
<DB REACTOR: BAE926E0> : <Opened For Modify : AcDbViewportTableRecord, 5F>
<DB REACTOR: BAE926E0> : <Modified          : AcDbViewportTableRecord, 5F>
[ED REACTOR]    : [Undo Subcommand Control: activity = 4, option = 2]
[TRANSACT REACTOR] : [0 --> Transaction About To Start] (TrMgr = 0207A1D8)
[TRANSACT REACTOR] : [1 --> Transaction Started] (TrMgr = 0207A1D8) <--- Тразакция начата
<DB REACTOR: BAE926E0> : <Opened For Modify : AcDbTableStyle, 6D>
<DB REACTOR: BAE926E0> : <Opened For Modify : AcDbDictionary, CD>
<DB REACTOR: BAE926E0> : <Appended          : AcDbDictionary, CD>
<DB REACTOR: BAE926E0> : <Modified          : AcDbDictionary, CD>
<DB REACTOR: BAE926E0> : <Opened For Modify : AcDbDictionary, CD>
<DB REACTOR: BAE926E0> : <Opened For Modify : AcDbCellStyleMap, CE>
<DB REACTOR: BAE926E0> : <Appended          : AcDbCellStyleMap, CE>
<DB REACTOR: BAE926E0> : <Modified          : AcDbCellStyleMap, CE>
<DB REACTOR: BAE926E0> : <Modified          : AcDbDictionary, CD>
<DB REACTOR: BAE926E0> : <Modified          : AcDbTableStyle, 6D>
<DB REACTOR: BAE926E0> : <Modified          : AcDbTableStyle, 6D>
<DB REACTOR: BAE926E0> : <Opened For Modify : AcDbTableContent, CF>
<DB REACTOR: BAE926E0> : <Opened For Modify : AcDbTableGeometry, D0>
<DB REACTOR: BAE926E0> : <Opened For Modify : AcDbTable, 80>  <---  Модификация таблицы
<DB REACTOR: BAE926E0> : <Opened For Modify : AcDbDictionary, D1>
<DB REACTOR: BAE926E0> : <Appended          : AcDbDictionary, D1>
<DB REACTOR: BAE926E0> : <Modified          : AcDbDictionary, D1>
<DB REACTOR: BAE926E0> : <Opened For Modify : AcDbDictionary, D1>
<DB REACTOR: BAE926E0> : <Modified          : AcDbDictionary, D1>
<DB REACTOR: BAE926E0> : <Appended          : AcDbTableContent, CF>
<DB REACTOR: BAE926E0> : <Modified          : AcDbTableContent, CF>
<DB REACTOR: BAE926E0> : <Appended          : AcDbTableGeometry, D0>
<DB REACTOR: BAE926E0> : <Modified          : AcDbTableGeometry, D0>
<DB REACTOR: BAE926E0> : <Opened For Modify : AcDbXrecord, D2>
<DB REACTOR: BAE926E0> : <Appended          : AcDbXrecord, D2>
<DB REACTOR: BAE926E0> : <Modified          : AcDbXrecord, D2>
<DB REACTOR: BAE926E0> : <Modified          : AcDbTable, 80> <--- Таблица модифицирована
<DB REACTOR: BAE926E0> : <Opened For Modify : AcDbDictionary, C>
<DB REACTOR: BAE926E0> : <Opened For Modify : AcDbXrecord, D3>
<DB REACTOR: BAE926E0> : <Appended          : AcDbXrecord, D3>
<DB REACTOR: BAE926E0> : <Modified          : AcDbXrecord, D3>
<DB REACTOR: BAE926E0> : <Opened For Modify : AcDbDictionary, C>
<DB REACTOR: BAE926E0> : <Opened For Modify : AcDbDictionary, D4>
<DB REACTOR: BAE926E0> : <Appended          : AcDbDictionary, D4>
<DB REACTOR: BAE926E0> : <Modified          : AcDbDictionary, D4>
<DB REACTOR: BAE926E0> : <Opened For Modify : AcDbDictionary, D4>
<DB REACTOR: BAE926E0> : <Opened For Modify : AcDbDictionaryVar, D5>
<DB REACTOR: BAE926E0> : <Appended          : AcDbDictionaryVar, D5>
<DB REACTOR: BAE926E0> : <Modified          : AcDbDictionaryVar, D5>
<DB REACTOR: BAE926E0> : <Modified          : AcDbDictionary, D4>
<DB REACTOR: BAE926E0> : <Opened For Modify : AcDbDictionary, D4>
<DB REACTOR: BAE926E0> : <Opened For Modify : AcDbDictionaryVar, D6>
<DB REACTOR: BAE926E0> : <Appended          : AcDbDictionaryVar, D6>
<DB REACTOR: BAE926E0> : <Modified          : AcDbDictionaryVar, D6>
<DB REACTOR: BAE926E0> : <Modified          : AcDbDictionary, D4>
<DB REACTOR: BAE926E0> : <Opened For Modify : AcDbDictionary, D4>
<DB REACTOR: BAE926E0> : <Opened For Modify : AcDbDictionaryVar, D7>
<DB REACTOR: BAE926E0> : <Appended          : AcDbDictionaryVar, D7>
<DB REACTOR: BAE926E0> : <Modified          : AcDbDictionaryVar, D7>
<DB REACTOR: BAE926E0> : <Modified          : AcDbDictionary, D4>
<DB REACTOR: BAE926E0> : <Opened For Modify : AcDbLayout, 74>
<DB REACTOR: BAE926E0> : <Modified          : AcDbLayout, 74>
<DB REACTOR: BAE926E0> : <Modified          : AcDbLayout, 74>
[TRANSACT REACTOR] : [1 --> Transaction About To Abort] (TrMgr = 0207A1D8) <--- Тразакция отменяется
<DB REACTOR: BAE926E0> : <Opened For Modify : AcDbLayout, 74>
<DB REACTOR: BAE926E0> : <Modified          : AcDbLayout, 74>
<DB REACTOR: BAE926E0> : <Opened For Modify : AcDbDictionary, D4>
<DB REACTOR: BAE926E0> : <Opened For Modify : AcDbDictionaryVar, D7>
<DB REACTOR: BAE926E0> : <Modified          : AcDbDictionaryVar, D7>
<DB REACTOR: BAE926E0> : <Modified          : AcDbDictionary, D4>
<DB REACTOR: BAE926E0> : <Opened For Modify : AcDbDictionaryVar, D7>
<DB REACTOR: BAE926E0> : <Un-Appended       : AcDbDictionaryVar, D7>
<DB REACTOR: BAE926E0> : <Modified          : AcDbDictionaryVar, D7>
<DB REACTOR: BAE926E0> : <Opened For Modify : AcDbDictionaryVar, D7>
<DB REACTOR: BAE926E0> : <Erased            : AcDbDictionaryVar, D7>
<DB REACTOR: BAE926E0> : <Opened For Modify : AcDbDictionary, D4>
<DB REACTOR: BAE926E0> : <Opened For Modify : AcDbDictionaryVar, D6>
<DB REACTOR: BAE926E0> : <Modified          : AcDbDictionaryVar, D6>
<DB REACTOR: BAE926E0> : <Modified          : AcDbDictionary, D4>
<DB REACTOR: BAE926E0> : <Opened For Modify : AcDbDictionaryVar, D6>
<DB REACTOR: BAE926E0> : <Un-Appended       : AcDbDictionaryVar, D6>
<DB REACTOR: BAE926E0> : <Modified          : AcDbDictionaryVar, D6>
<DB REACTOR: BAE926E0> : <Opened For Modify : AcDbDictionaryVar, D6>
<DB REACTOR: BAE926E0> : <Erased            : AcDbDictionaryVar, D6>
<DB REACTOR: BAE926E0> : <Opened For Modify : AcDbDictionary, D4>
<DB REACTOR: BAE926E0> : <Opened For Modify : AcDbDictionaryVar, D5>
<DB REACTOR: BAE926E0> : <Modified          : AcDbDictionaryVar, D5>
<DB REACTOR: BAE926E0> : <Modified          : AcDbDictionary, D4>
<DB REACTOR: BAE926E0> : <Opened For Modify : AcDbDictionaryVar, D5>
<DB REACTOR: BAE926E0> : <Un-Appended       : AcDbDictionaryVar, D5>
<DB REACTOR: BAE926E0> : <Modified          : AcDbDictionaryVar, D5>
<DB REACTOR: BAE926E0> : <Opened For Modify : AcDbDictionaryVar, D5>
<DB REACTOR: BAE926E0> : <Erased            : AcDbDictionaryVar, D5>
<DB REACTOR: BAE926E0> : <Opened For Modify : AcDbDictionary, C>
<DB REACTOR: BAE926E0> : <Opened For Modify : AcDbDictionary, D4>
<DB REACTOR: BAE926E0> : <Modified          : AcDbDictionary, D4>
<DB REACTOR: BAE926E0> : <Opened For Modify : AcDbDictionary, D4>
<DB REACTOR: BAE926E0> : <Un-Appended       : AcDbDictionary, D4>
<DB REACTOR: BAE926E0> : <Modified          : AcDbDictionary, D4>
<DB REACTOR: BAE926E0> : <Opened For Modify : AcDbDictionary, D4>
<DB REACTOR: BAE926E0> : <Erased            : AcDbDictionary, D4>
<DB REACTOR: BAE926E0> : <Opened For Modify : AcDbDictionary, C>
<DB REACTOR: BAE926E0> : <Opened For Modify : AcDbXrecord, D3>
<DB REACTOR: BAE926E0> : <Modified          : AcDbXrecord, D3>
<DB REACTOR: BAE926E0> : <Opened For Modify : AcDbXrecord, D3>
<DB REACTOR: BAE926E0> : <Un-Appended       : AcDbXrecord, D3>
<DB REACTOR: BAE926E0> : <Modified          : AcDbXrecord, D3>
<DB REACTOR: BAE926E0> : <Opened For Modify : AcDbXrecord, D3>
<DB REACTOR: BAE926E0> : <Erased            : AcDbXrecord, D3>
<DB REACTOR: BAE926E0> : <Opened For Modify : AcDbTable,   80>   <--- Восстанавливаем состояние таблицы
<DB REACTOR: BAE926E0> : <Modified          : AcDbTable, 80>
<DB REACTOR: BAE926E0> : <Opened For Modify : AcDbXrecord, D2>
<DB REACTOR: BAE926E0> : <Un-Appended       : AcDbXrecord, D2>
<DB REACTOR: BAE926E0> : <Modified          : AcDbXrecord, D2>
<DB REACTOR: BAE926E0> : <Opened For Modify : AcDbXrecord, D2>
<DB REACTOR: BAE926E0> : <Opened For Modify : AcDbDictionary, D1>
<DB REACTOR: BAE926E0> : <Modified          : AcDbDictionary, D1>
<DB REACTOR: BAE926E0> : <Erased            : AcDbXrecord, D2>
<DB REACTOR: BAE926E0> : <Opened For Modify : AcDbDictionary, D1>
<DB REACTOR: BAE926E0> : <Modified          : AcDbDictionary, D1>
<DB REACTOR: BAE926E0> : <Opened For Modify : AcDbDictionary, D1>
<DB REACTOR: BAE926E0> : <Un-Appended       : AcDbDictionary, D1>
<DB REACTOR: BAE926E0> : <Modified          : AcDbDictionary, D1>
<DB REACTOR: BAE926E0> : <Opened For Modify : AcDbDictionary, D1>
<DB REACTOR: BAE926E0> : <Erased            : AcDbDictionary, D1>
<DB REACTOR: BAE926E0> : <Opened For Modify : AcDbTableGeometry, D0>
<DB REACTOR: BAE926E0> : <Un-Appended       : AcDbTableGeometry, D0>
<DB REACTOR: BAE926E0> : <Modified          : AcDbTableGeometry, D0>
<DB REACTOR: BAE926E0> : <Opened For Modify : AcDbTableGeometry, D0>
<DB REACTOR: BAE926E0> : <Erased            : AcDbTableGeometry, D0>
<DB REACTOR: BAE926E0> : <Opened For Modify : AcDbTableContent, CF>
<DB REACTOR: BAE926E0> : <Un-Appended       : AcDbTableContent, CF>
<DB REACTOR: BAE926E0> : <Modified          : AcDbTableContent, CF>
<DB REACTOR: BAE926E0> : <Opened For Modify : AcDbTableContent, CF>
<DB REACTOR: BAE926E0> : <Erased            : AcDbTableContent, CF>
<DB REACTOR: BAE926E0> : <Opened For Modify : AcDbTableStyle, 6D>
<DB REACTOR: BAE926E0> : <Modified          : AcDbTableStyle, 6D>
<DB REACTOR: BAE926E0> : <Opened For Modify : AcDbDictionary, CD>
<DB REACTOR: BAE926E0> : <Opened For Modify : AcDbCellStyleMap, CE>
<DB REACTOR: BAE926E0> : <Modified          : AcDbCellStyleMap, CE>
<DB REACTOR: BAE926E0> : <Modified          : AcDbDictionary, CD>
<DB REACTOR: BAE926E0> : <Opened For Modify : AcDbCellStyleMap, CE>
<DB REACTOR: BAE926E0> : <Un-Appended       : AcDbCellStyleMap, CE>
<DB REACTOR: BAE926E0> : <Modified          : AcDbCellStyleMap, CE>
<DB REACTOR: BAE926E0> : <Opened For Modify : AcDbCellStyleMap, CE>
<DB REACTOR: BAE926E0> : <Erased            : AcDbCellStyleMap, CE>
<DB REACTOR: BAE926E0> : <Opened For Modify : AcDbDictionary, CD>
<DB REACTOR: BAE926E0> : <Un-Appended       : AcDbDictionary, CD>
<DB REACTOR: BAE926E0> : <Modified          : AcDbDictionary, CD>
<DB REACTOR: BAE926E0> : <Opened For Modify : AcDbDictionary, CD>
<DB REACTOR: BAE926E0> : <Erased            : AcDbDictionary, CD>
[TRANSACT REACTOR] : [0 --> Transaction Aborted] (TrMgr = 0207A1D8)
[ED REACTOR]    : [Undo Subcommand Control: activity = 4, option = 2]
[ED REACTOR]    : [Save Complete: actual name = "C:\Documents and 
Settings\Rivilis\Мои документы\13423423.dwg"]   (Db = BAE926E0  "C:\Documents and Settings\Rivilis\Мои документы\13423423.dwg")
[ED REACTOR]    : [Command Ended: QSAVE]
<DOC REACTOR: C:\Documents and Settings\Rivilis\Мои документы\13423423.dwg> : 
[Document Lock Mode Will Change]
    MyCurMode:  X Write
    MyNewMode:  Not Locked
    CurMode:    X Write
    CmdName:    #QSAVE
<DOC REACTOR: C:\Documents and Settings\Rivilis\Мои документы\13423423.dwg> : 
[Document Lock Mode Changed]
    MyPrevMode: X Write
    MyCurMode:  Not Locked
    CurMode:    Not Locked
    CmdName:    #QSAVE
Command:
<DOC REACTOR: C:\Documents and Settings\Rivilis\Мои документы\13423423.dwg> : 
[Document To Be De-activated]
<DOC REACTOR: C:\Documents and Settings\Rivilis\Мои документы\13423423.dwg> : 
[Document To Be Activated]
Command:
В чертеже из примитивов только одна таблица.
Судя по всему такое поведение не случайно, так что с вероятностью 99.9% Autodesk'овцы ничего менять не будут.
Кстати у меня при команде QSAVE реактор вызвался дважды. Причем во второй раз (entget) для таблицы возвращал nil.
Александр Ривилис вне форума  
 
Автор темы   Непрочитано 20.05.2010, 13:02
#9
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,843


Цитата:
Сообщение от Александр Ривилис Посмотреть сообщение
Кстати у меня при команде QSAVE реактор вызвался дважды.
Аналогично.
Цитата:
Сообщение от Александр Ривилис Посмотреть сообщение
Судя по всему такое поведение не случайно, так что с вероятностью 99.9% Autodesk'овцы ничего менять не будут.
Насчет вероятности не знаю, да и с тем что поведение не случайно уверен на 100% - просто там не учтено, что на таблицу при этом может висеть реактор - а т.к. эта ситуация не обрабатывется (не учитывается) - это не что иное как ошибка.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 20.05.2010, 13:33
#10
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,353
Отправить сообщение для Александр Ривилис с помощью Skype™


Цитата:
Сообщение от Дима_ Посмотреть сообщение
просто там не учтено, что на таблицу при этом может висеть реактор
Ну и что? Значит ты должен учесть возможность срабатывания реактора при сохранении.
Цитата:
Сообщение от Дима_ Посмотреть сообщение
это не что иное как ошибка.
Нет. Это особенность поведения. Реакторы - это очень тонкая вещь. С учетом того, что в VisualLisp реализованы далеко не все реакторы (по сравнению с ObjectARX) могу посочувствовать тем, кто их в lisp'е использует.
Александр Ривилис вне форума  
 
Автор темы   Непрочитано 20.05.2010, 14:23
#11
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,843


Цитата:
Сообщение от Александр Ривилис Посмотреть сообщение
Нет. Это особенность поведения.
Как и в соседней теме - это вопрос как мы это назовем - т.к. эта "особенность" не описана в руководстве - я называю ее ошибкой - это то же самое, например, если Вы делаете большой чертеж - а когда его размер достигает, скажем, 100 МБ - он без предупреждения и возможности что-то исправить, слетает нафиг - это что ошибка или особенность поведения?
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 20.05.2010, 14:58
#12
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,353
Отправить сообщение для Александр Ривилис с помощью Skype™


Цитата:
Сообщение от Дима_ Посмотреть сообщение
т.к. эта "особенность" не описана в руководстве - я называю ее ошибкой
Цитата:
Сообщение от Дима_ Посмотреть сообщение
он без предупреждения и возможности что-то исправить, слетает нафиг - это что ошибка или особенность поведения?
Ну нужно смешивать совершенно разные вещи. Таблица при сохранении модифицируется? Да (мы это видим из протокола). Значит и реактор должен сработать и он срабатывает. Где-то написано что при сохранении не должен сработать реактор на модификацию? Нет. Более того ты сам можешь сделать в своем реакторе на BeginSave модификацию чего угодно, что тоже может привести к вызову еще каких-то реакторов.
А вот если AutoCAD разваливается сам по себе и на значительно меньших чертежах (без программистских штучек) - то это баг, который нужно исправлять.
Александр Ривилис вне форума  
 
Автор темы   Непрочитано 20.05.2010, 15:22
#13
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,843


Цитата:
Сообщение от Александр Ривилис Посмотреть сообщение
Где-то написано что при сохранении не должен сработать реактор на модификацию?
Не ну это уже перебор - точно так-же нигде не паписано, что при сохранении она не должна поменять шрифты - еслиб они менялись Вы тоже назвали'б это особенностью?
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 20.05.2010, 16:37
#14
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,353
Отправить сообщение для Александр Ривилис с помощью Skype™


Цитата:
Сообщение от Дима_ Посмотреть сообщение
Не ну это уже перебор - точно так-же нигде не паписано, что при сохранении она не должна поменять шрифты - еслиб они менялись Вы тоже назвали'б это особенностью?
Даже не смешно. Вы сами не чувствуете разницу между этими двумя вещами?
Александр Ривилис вне форума  
 
Автор темы   Непрочитано 20.05.2010, 16:53
#15
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,843


Если честно то нет - характер ошибки одинаковоый, просто одна более на поверхности. Сугубо ИХМО. Почему я должен догадываться что ШТАТНАЯ функция установки реактора на РЕДАКТИРОВАНИЕ будет вызываться во время работы СОХРАНЕНИЯ - причем 2 раза, причем во второй еще и "косячно". Не учитывать, что могут работать привязки, например, самая распостраненная ОШИБКА новичков в Автолиспе - с этим Вы согласны? Чем принципиально отличается от неучитанного установленного реактора, ведь для пользователя никакого редактирования не происходит.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 20.05.2010, 17:12
#16
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,353
Отправить сообщение для Александр Ривилис с помощью Skype™


Цитата:
Сообщение от Дима_ Посмотреть сообщение
Не учитывать, что могут работать привязки, например, самая распостраненная ОШИБКА новичков в Автолиспе - с этим Вы согласны?
Согласен с тем, что это самая распространенная ОШИБКА новичков-программистов, но не ошибка AutoCAD. :-)
Цитата:
Сообщение от Дима_ Посмотреть сообщение
ведь для пользователя никакого редактирования не происходит.
Для пользователя - да. Для программиста - нет. Программист должен понимать и быть готов к тому, что при сохранении чертежа возможны всякие нюансы, в том числе и модификация существующих примитивов (например, при наличии полей).
Александр Ривилис вне форума  
 
Непрочитано 20.05.2010, 23:39
#17
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,882
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Цитата:
Сообщение от Дима_ Посмотреть сообщение
ШТАТНАЯ функция установки реактора на РЕДАКТИРОВАНИЕ будет вызываться во время работы СОХРАНЕНИЯ - причем 2 раза, причем во второй еще и "косячно"
Таблица (как и размеры) представлены в Автокаде в 2-х видах: как собственно объект AcDbTable и как анонимный блок *T, имя которого представлено в поле 2.
Можно предположить, что первый раз таблица изменяется при модификации AcDbBlockTableRecord, второй раз как AcDbTable
Код:
[Выделить все]
(vl-load-com)
(if (setq Table->BlockName (cdr(assoc 2(entget(setq tbl(car(entsel "\nSelect table:")))))))
  (progn
    (princ "\nTable ename :")(princ tbl)
    (princ "\nTable object :")(princ (vlax-ename->vla-object tbl))
    (princ "\nTable as block. Name :")(princ Table->BlockName)
    (princ "\nTable as block. Object :")
    (princ (vla-item (vla-get-Blocks (vla-get-activedocument (vlax-get-acad-object))) Table->BlockName))
    (princ "\n")
    )
  )
__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 21.05.2010 в 10:56.
VVA вне форума  
 
Непрочитано 21.05.2010, 08:40
#18
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,353
Отправить сообщение для Александр Ривилис с помощью Skype™


Offtop: VVA, какая-то странная цитата получилась. Я такого не писал.
Александр Ривилис вне форума  
 
Непрочитано 21.05.2010, 10:57
#19
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,882
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Александр Ривилис, Не знаю как такое получилось. Исправил
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 21.05.2010, 11:26
#20
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,843


То VVA - раз уж и Вы здесь - хочу узнать Ваше мнение на данную реакцию автокада (к чему это ближе - особенности реализации или недосмотру программистов)? Уважте авторитетным мнением
п.с. Не подумайте плохого - Александра Ривлиса я уважаю и считаю одним из самых авторитетных людей в этом подфоруме, просто в данном вопросе "расхожусь" во мнениях.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Почему срабатывает "табличный" реактор при сохранении рисунка.

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сейсмозащита и сейсмоизоляция существующих, построенных зд. IANationalInformAgentstvo Прочее. Архитектура и строительство 216 20.01.2015 16:51
Мониторы LCD CRT Разное 94 17.06.2008 10:51
БРЕД СИВОЙ КОБЫЛЫ Kryaker Разное 1876 29.12.2006 23:41
Почему при печати сплайн толщиной 1 мм меньше donut диаметро boban AutoCAD 4 18.05.2005 08:45
Почему при печати точка диаметром 1 меньше линии толщиной 1 boban AutoCAD 6 30.04.2005 21:05