http://adn-cis.org/kak-obnovit-vyibrannyie-polya-ne-vyipolnyaya-regeneracziyu-vsego-chertezha.htmlДа, я тоже нашел этот "не очень тривиальный" :) код в теме http://adn-cis.org/forum/index.php?topic=7086.msg20446#msg20446.
Надеюсь ты вызываешь этот код после завершения транзакции, в которой создаёшь таблицу? Выложи чертеж с этой таблицей - посмотрю.Да, но я пробовал по-всякому.
Понятно, что в такой ситуации оно не обновится. Похоже, ты указал неправильное значение для ObjectId в поле.C ObjectId все в порядке. Как я понял, там его получить можно миллионом способов и это легко отследить в режиме отладки.
Что-то я не понял на что у тебя ссылается это поле:В этом и суть, оно не идентифицируется сразу.
C ObjectId все в порядке.Нет. Сравни значения:
Нет. Сравни значения:Так Id ведь меняются после закрытия/открытия чертежа (насколько я понимаю). Понятно дело, если поле не обновить сразу, оно потом "не свяжется" и не будет работать.
Так Id ведь меняются после закрытия/открытия чертежа (насколько я понимаю). Понятно дело, если поле не обновить сразу, оно потом "не свяжется" и не будет работать.Если поле сразу содержит правильный ObjecId, то после закрытия и открытия чертежа ObjectId будут новые (могут быть новыми), но одинаковыми!
Если поле сразу содержит правильный ObjecId, то после закрытия и открытия чертежа ObjectId будут новые (могут быть новыми), но одинаковыми!Посмотрите, пожалуйста, видео из поста #8. Если бы Id были не те, то ничего, вообще, бы не работало.
Похоже, что ты что-то не учитываешь при добавлении поля.Сейчас покажу процесс создания:
Или ты думаешь, что простое добавление <...> к строке означает добавление поля???Да, до этого момента так и думал. Делал так в VBA. И еще вот тут http://through-the-interface.typepad.com/through_the_interface/2007/06/embedding_field.html увидел обычную строку и дальше копать не стал.
действовать нужно через создание объекта Db.Field и потом назначением этого объекта..Именно:
Хотя, если я правильно помню, то действовать нужно через создание объекта Db.Field и потом назначением этого объекта.. но могу и ошибаться.
Именно:Спасибо, я, как раз, пробовал добавление поля в текст (без проблем), в атрибут блока (тоже без проблем). Но вот с таблицей...
Добавление поля, содержащего данные другого примитива
Программное добавление поля к тексту
Добавление полей к атрибутам блока, вставленными в пространство модели
Маленькое уточнение, все приведенные ссылки оперируют методом setField, однако у Cell нет такого метода.Да, я уже заметил. Выше пытался окольными путями, но ничего пока не придумал.
Маленькое уточнение, все приведенные ссылки оперируют методом setField, однако у Cell нет такого метода.Зато у таблицы есть метод Table.SetFieldId
Зато у таблицы есть метод Table.SetFieldIdЕще есть
Думаю, что твоя проблема в том, что ты чего-то пытаешься делать с таблицей еще не добавив её в базу (т.е. не выполнив modelSpace.AppendEntity(table))Именно! Все, что я делал до этого, работало бы, стоило только добавить таблицу в базу до создания поля. Вот же я лоханулся здоровски. :(
И я не увидел в коде создания Field. Или ты думаешь, что простое добавление <...> к строке означает добавление поля???Хоть что-то я делал правильно. ;) Ну и, кстати, с ObjectId проблем тоже не было.
А, может, Вы спецом прикольнулись, а я тут пол дня пытался объект field запихнуть в таблицу??Это я просто отвечал "одной левой", параллельно занимаясь другими вопросами.
Это я просто отвечал "одной левой", параллельно занимаясь другими вопросами.Главное, что отвечали. Спасибо.
Так вот, второй вариант не работает, а первый, Ваш, работает даже без всяких сторонних обновлений полей типа того "не очень тривиального" кода.Интересно. Нужно отправить вопрос в ADN DevHelp. Пусть прояснят. Похоже на баг.
Это что? Типа старая школа лучшая школа? )
Кстати в "новом стиле" тоже работает, но так:О, круто. Что-то я не заметил. Мне нравится такой вариант :)
С "новым" методом разобрался, работает отлично, но есть свои приключения =о)А можно код? Интересно, как так получается?
видео приключенийЯ не смог рассмотреть "видео приключений" - очень нечеткое изображение. Просьба пользоваться Screencast (у меня в подписи).
А можно код? Интересно, как так получается?Он в картинке и в видео, вроде ничего нового там нет...
Я не смог рассмотреть "видео приключений" - очень нечеткое изображение.https://i.gyazo.com/9228998198313046d5c53b0bdff23769.png увы, более четкого видео у меня не получается,
Он в картинке и в видео, вроде ничего нового там нет...Как менять режимы видео я знаю, но твоё видео у меня не переключается на разрешение > 360.
Как менять режимы видео я знаю, но твоё видео у меня не переключается на разрешение > 360.Видимо это особенность работы Youtube.
Для того, чтобы у Field был не нулевой ObjectId его следует добавить в базу. И вот тут начинается самое интересное. Table - это наследник от BlockReference. Каждый текст в ячейке - это MText в BlockTableRecord, на который ссылается наш BlockReference и он же Table. Причем как я понял прямой связи нет, т.е. нельзя определить по номеру ячейки какой MText ей соответствует и наоборот (во всяком случае в публичном API). Так вот Field добавляется к Extension Dictionary этой MText (точнее в словарь ACAD_FIELD) и при этом получается ObjectId, который можно методом SetFieldId добавить к ячейке таблицы. Как-то так...
Он в картинке и в видео, вроде ничего нового там нет...Я не смог создать так поле, чтобы получить его Id (entFieldId в твоем коде). Поэтому и хочу посмотреть, а в видео этого не видно.
Как менять режимы видео я знаю, но твоё видео у меня не переключается на разрешение > 360.У меня все ок:
ЗЫ.Да на здоровье.))
evthisrel спасибо, было интересно.
Для того, чтобы у Field был не нулевой ObjectId его следует добавить в базу.Это я понимаю, но как его добавить в базу?
И вот тут начинается самое интересное. Table - это наследник от BlockReference. Каждый текст в ячейке - это MText в BlockTableRecord, на который ссылается наш BlockReference и он же Table. Причем как я понял прямой связи нет, т.е. нельзя определить по номеру ячейки какой MText ей соответствует и наоборот (во всяком случае в публичном API). Так вот Field добавляется к Extension Dictionary этой MText (точнее в словарь ACAD_FIELD) и при этом получается ObjectId, который можно методом SetFieldId добавить к ячейке таблицы. Как-то так...Кажется, иерархия понятна, но..
Я код не публикую не потому, что мне жалко, а потому что задачка действительно была интересна, в инете примеров нет и решение у нее простое до очевидности. Не хочу портить удовольствие от решения. Тем более что это факультатив и решение в этой теме уже отмечено.Понял тебя. Хорошо, покапаюсь сам, когда будет время.
адо создателям форума подумать о концепции ответвленных решений ;)К сожалению в плагине Решение для этого движка форума не предусмотрено несколько решений в одной теме. Так что имеем то, что имеем. Заниматься переделками плагина и движка мы не будем - у нас другая цель.
все равно, не ясно, как добавить поле в словарь ACAD_FIELD, чтобы оно обрело ObjectId.Ну это то как раз просто. Тут важно знать только к какому примитиву следует добавлять поле. Обрати внимание, что метод DBObject.SetField возвращает ObjectId. Этот метод как раз и создает в Extension Dictionary этого объекта/примитива словарь ACAD_FIELD и добавляет к нему переданное поле.
Вот он, второй метод добавления поля в таблицу через объект поле:И что нормально работает?
И что нормально работает?Абсолютли :)
Абсолютли :)Подтверждаю! И даже приключений из моего видео не наблюдается. Супер. =о)
Подтверждаю! И даже приключений из моего видео не наблюдается. Супер. =о):)
То есть при его помощи будет очень неудобно/невозможно (не пробовал - возможно, нужно будет создавать поле состоящее из супер комбинированного fieldCode - надо пробовать) "суммировать" поля и поля или поля и строки в ячейке таблицы.Точно также, как ты вписал бы поле в строку, точно также ты можешь создать поле состоящее из других полей, добавить его к Table и вставить в ячейку. Так что это ненамного сложнее.
еще бы разобраться как записывать формулы из полей с помощью методаЯ не понял, что ты имеешь в виду. Но в любом случае проще всего это проделать вручную (если это возможно), а затем поизучать при помощи ARXDBG/MGDDBG результаты и повторить их в коде.
tb.Cells[2, 2].Contents[0].Formula = ""; и вообще было бы сказочно.
еще бы разобраться как записывать формулы из полей с помощью методаЯ вот взялся, да угомонился, пока что решил, что по усилиям будет несоизмеримо - создавать поля-формулы.
tb.Cells[2, 2].Contents[0].Formula = ""; и вообще было бы сказочно.
Я не понял, что ты имеешь в виду.Думаю Boxa.Shu имеет в виду нечто типа(только в таблице):
Но в любом случае проще всего это проделать вручную (если это возможно), а затем поизучать при помощи ARXDBG/MGDDBG результаты и повторить их в коде.А я вот так не умею (подозреваю, что скрины в некоторых темах от Вас делались именно из этого метода). Может, можно где-то почитать про такого рода изучение результатов?
Лично мне проще вот так:Так то проще, но так создавая в ячейках каждый раз новое поле - захламлем базу чертежа, а при вставке через объект нет,
Но в любом случае проще всего это проделать вручную (если это возможно), а затем поизучать при помощи ARXDBG/MGDDBG результаты и повторить их в коде.Попробую, хотя и не совсем понимаю как это руками сделать. Буду думать.
А я вот так не умею (подозреваю, что скрины в некоторых темах от Вас делались именно из этого метода). Может, можно где-то почитать про такого рода изучение результатов?А ты уже установил ARXDBG и MGDDBG? Если нет, то качай их и разархивируй в "С:\Program Files\Autodesk\ApplicationPlugins"
Так то проще, но так создавая в ячейках каждый раз новое поле - захламлем базу чертежа, а при вставке через объект нет,Заставил задуматься. :-\
одно и тоже поле можно сунуть в десяток ячеек.
Попробую, хотя и не совсем понимаю как это руками сделать. Буду думать.Я думал ты программно хочешь сделать нечто типа: создать в ячейке поле-формулу на сумму значений, например, атрибутов блока.. Нет?
А ты уже установил ARXDBG и MGDDBG? Если нет, то качай их и разархивируй в "С:\Program Files\Autodesk\ApplicationPlugins"Спасибо. Сейчас поставлю. Буду экспериментировать.
Ну а потом смотри в контекстном меню AutoCAD меню ARXDBG и MGDDBG.
http://adn-cis.org/assets/gallery/AutoCAD/ArxDbg.bundle.zip
http://adn-cis.org/assets/gallery/AutoCAD/MgdDbg.zip
Я думал ты программно хочешь сделатьХочу программно, но следуя совета, сначала попробую руками
Хочу программно, но следуя совета, сначала попробую рукамиВидимо, я чего-то не понимаю, просто руками это делается элементарно. Наверное, все-таки, ты имеешь в виду сделать и разобрать при помощи ARXDBG и MGDDBG..