Сообщество программистов Autodesk в СНГ
ADN Club => Civil 3D API => Тема начата: durasovartyom от 02-08-2016, 13:27:56
-
Добрый день!
Подскажите пожалуйста, как к "таблица расчета объемов работ для вида сечения" добавить значение коэффициента увеличения/уменьшения объема?
(https://s31.postimg.org/hajrbq9qv/image.png) (https://postimg.org/image/hajrbq9qv/)
-
Добрый день!
Подскажите пожалуйста, как в таблице объемов работ добавить значение коэффициента увеличения/уменьшения объема?
Выложи пожалуйста в виде чертежа (это обязательно!!!) и объясни подробнее чего ты хочешь получить. Это должна быть отдельная колонка? Или значения должны учитывать (умножаться на) этот коэффициент?
-
(https://s32.postimg.org/n64tsti5t/image.png) (https://postimg.org/image/n64tsti5t/)
Именно отдельная колонка, в которую выводится значение объема с коэффициентом. Так же колонку со значением этого коэффициента на который нужно умножить значение объема.
-
Ну, начнем с того, что это не "таблица объемов работ", а "
таблица вида сечения - материал" "таблица расчета объемов работ для вида сечения" (пардон).
В саму таблицу программно добавить ничего нельзя. Можно лишь редактировать стиль этой таблицы, но это можно сделать и без программирования. Вывести можно только те данные, которые уже заложены. Если среди них нет нужных данных (см. рисунок) - то тут уже ничего не сделаешь. Это если использовать такую таблицу.
Как вариант, с помощью программирования, можно извлечь необходимые данные из нужных видов сечений (поперечников) и нарисовать нужную таблицу как таблицу автокада.
P.S. Можно еще, наверное, использовать DrawableOverrule для дорисовки столбцов для такой таблицы, но, сдается мне, что это будет очень непросто.
-
Благодарю вам за ответ!
В редакторе списка материалов есть такие значения, как Коэффициент выемки, Коэффициент засыпки, Коэффициент повторной засыпки.
А их ни как "Таблицу расчета объемов работ для вида сечения" занести программно нельзя.
Подскажите пожалуйста, как извлечь программно необходимые данные из "Таблицы расчета объемов работ для вида сечения" как таблицу AutoCADa, с сохранением связей, чтобы при изменении объемов менялась эта таблица.
(https://s31.postimg.org/72c01emg7/image.png) (https://postimg.org/image/72c01emg7/)
-
Подскажите пожалуйста, как извлечь программно необходимые данные из "Таблицы расчета объемов работ для вида сечения" как таблицу AutoCADa, с сохранением связей, чтобы при изменении объемов менялась эта таблица.
Это можно сделать только если это можно сделать "вручную" (т.е. используя средства самого Civil 3D). Если ты сможешь это сделать "вручную", то тогда можно будет придумать как это сделать программно. Мне такая возможность не известна.
-
В редакторе списка материалов есть такие значения, как Коэффициент выемки, Коэффициент засыпки, Коэффициент повторной засыпки.
А их ни как "Таблицу расчета объемов работ для вида сечения" занести программно нельзя.
Попробуйте с этим вопросом обратиться к специалистам по адаптации Civil 3D (тут: http://forums.autodesk.com/t5/autocad-civil-3d-russkiy/bd-p/374 или через форму подписки) , возможно, что есть какой-то способ сделать это стандартными средствами.
Подскажите пожалуйста, как извлечь программно необходимые данные из "Таблицы расчета объемов работ для вида сечения" как таблицу AutoCADa
По-нормальному - никак. Когда я извлекал данные из такой таблицы, я ее взрывал до линий и текста и потом обрабатывал полученные тексты по рядам. Думаю, что гораздо надежнее будет получать данные программно напрямую из вида сечения. Надо только изучить API для вида сечения и понять, есть ли там все необходимые инструменты.
с сохранением связей, чтобы при изменении объемов менялась эта таблица
Можно попробовать программно связать таблицу AutoCAD с видом сечения каким-то образом и отслеживать изменения. Либо сделать кнопку "обновить таблицы" и нажимать ее перед печатью чертежа или в другой нужный момент.
-
Можно попробовать программно связать таблицу AutoCAD с видом сечения каким-то образом и отслеживать изменения.
Можно. Но это будет работать только при наличии загруженного приложения, которое подписано на событие изменения таблицы. По хорошему нужно делать (средствами ObjecARX) некий Custom Object, который является Persistent Reactor и реагирует на изменение таблицы, но это настолько сложно, что я даже не буду предлагать...
-
Можно. Но это будет работать только при наличии загруженного приложения, которое подписано на событие изменения таблицы.
Разумеется.
По хорошему нужно делать (средствами ObjecARX) некий Custom Object, который является Persistent Reactor и реагирует на изменение таблицы
Ну, как вариант, можно прописывать хендл вида сечения в расширенных данных таблицы и таким образом осуществлять связь. Не самый надежный способ, но, при толковом подходе, работать будет. Возможно только, что сильно пострадает быстродействие Civil при обновлении данных, а может быть и не сильно...
но это настолько сложно
Если стандартными средствами это не удастся сделать, то тут простого выхода просто нет. Любой другой способ будет сложным (или очень сложным :) ).
-
Ну, как вариант, можно прописывать хендл вида сечения в расширенных данных таблицы и таким образом осуществлять связь.
Это связь, но не реактор. А вот тот Custom Object, который я предлагал в качестве Persistent Reactor, сам (!!!) отреагирует на изменение таблицы Civil 3D и пересчитает (перестроит) таблицу AutoCAD. Он же в себе должен хранить ObjectId обеих таблиц (в документации: ObjectARX for AutoCAD 201X: Developer Guide > Advanced Topics > Advanced Topics > Notification > Using Reactors > Using an Object Reactor >)
-
А реакторы уже потом можно будет цеплять как обработчики события модификации объекта. Либо к каждому виду сечения в чертеже цеплять DBObject.ObjectModified, либо Database.ObjectModified с проверкой модифицированного объекта на принадлежность к виду сечения. Где-то в памяти при этом должен храниться словарь связей Id вида сечения - Id таблицы. Этот словарь должен формироваться при запуске Civil и дополняться данными при открытии каждого чертежа и при создании новой таблицы для вида сечения. Естественно, что понадобятся обработки событий удаления-восстановления видов сечений и таблиц. В общем - адский труд :). Я нечто подобное делал, поэтому, есть уверенность, что получится работоспособный инструмент.
Persistent Reactor, наверное, львиную долю этой работы берет на себя. Но я не знаю ObjectARX, приходится выкручиваться возможностями .NET.
-
Persistent Reactor, наверное, львиную долю этой работы берет на себя.
Именно. И хранится он в чертеже.