Сообщество программистов Autodesk в СНГ
ADN Club => Civil 3D API => Тема начата: Doublefish от 19-06-2014, 08:36:53
-
Добрый день
подскажите пожалуйста, как программно вызвать панельку редактирования сети?
-
подскажите пожалуйста, как программно вызвать панельку редактирования сети?
А как ты её вызываешь "не программно"?
-
Если выбран элемент сети - то правой кнопкой редактировать сеть.
Если не выбран - то на панеле команда - редактировать сеть - появляется окно с выбором списка сетей.
Задача состоит в том чтобы создать сеть (название и параметры) и сразу открыть панельку редактирования без выбора из списка доступных сетей, т.е. сеть уже извесна какая.
Может быть надо как то выбрать созданную пустую сеть и запустить команду EDITNETWORK?
-
Если выбран элемент сети - то правой кнопкой редактировать сеть.
Так как Civil 3D у меня не установлен, то пока могу только гадать. Думаю, что при выборе пункта меню "Редактировать сеть" запускается команда. Посмотри в командной строке и если там имя команды не видно, то нажми ENTER для повтора предыдущей команды. Если это действительно команда, то запустить ее можно несколькими способами. Всё зависит от того что ты собираешься делать дальше. Если просто нужно запустить команду, то достаточно использовать метод Document.SendStringToExecute с указанием имени команды (и возможно дополнительными параметрами). Если нужно запустить команду и дождаться её завершения, то этот вариант не подходит, так как Document.SendStringToExecute выполняется асинхронно и нужно вызывать P/Invoke acedCmd или аналогичный метод.
-
Ага. Вижу, что ты уже сам нашел имя команды. Значит её и нужно запускать.
-
Что надо запустить команду EDITNETWORK - это я знаю. Но вот как задать имя сети что бы не было окна с выбором сети это пока не знаю, поэтому и спрашиваю.
Параллельно возних вопрос:
как запустить одну команду (у которой есть параметры) - дождаться её выполнения , а затем запустить вторую команду?
через sendcommand не получилось, есть какой-нибудь примерчик на тему "P/Invoke acedCmd или аналогичный метод" ?
-
Параллельно возних вопрос:
как запустить одну команду (у которой есть параметры) - дождаться её выполнения , а затем запустить вторую команду?
через sendcommand не получилось, есть какой-нибудь примерчик на тему "P/Invoke acedCmd или аналогичный метод" ?
Есть несколько статей на эту тему:
http://adndevblog.typepad.com/autocad/2012/04/synchronously-send-and-wait-for-commands-in-autocad-using-c-net.html
http://adndevblog.typepad.com/autocad/2012/07/show-layer-dialog-synchronously.html
Альтернатива - использование метода Editor.RunCommand. Это "непубличный" метод. Поэтому его приходится вызывать через Reflection: http://www.theswamp.org/index.php?topic=44500.msg497590#msg497590
-
Что надо запустить команду EDITNETWORK - это я знаю. Но вот как задать имя сети что бы не было окна с выбором сети это пока не знаю, поэтому и спрашиваю.
Тут я не подскажу, так как могу лишь гадать на кофейной гуще. Но если ты создашь нужную сеть, поместишь её в набор предварительного выбора и запустишь команду, то скорее всего это будет аналог запуска EDITNETWORK из контекстного меню.
-
как запустить одну команду (у которой есть параметры) - дождаться её выполнения , а затем запустить вторую команду?
Костылищи :)
Иногда проще самому написать нужные диалоги и процедуры, чем пытаться прикрутить стандартные к своему коду. Тоже как альтернатива.
Тут я не подскажу, так как могу лишь гадать на кофейной гуще. Но если ты создашь нужную сеть, поместишь её в набор предварительного выбора и запустишь команду, то скорее всего это будет аналог запуска EDITNETWORK из контекстного меню.
Интересная мысль. Но, вряд ли получится. Потому что сеть - не графический объект, а своеобразный "накопитель" для объектов, ее составляющих. И пустую сеть без объектов выбрать предварительно никак не получится. Если сеть непустая, то по действию "выбрать" для нее, в набор попадают все объекты (трубы и колодцы), которые в нее входят.
P.S. Проверил. Предварительно выбрал объекты сети (непустой), запустил команду EDITNETWORK - появляется сразу нужный диалог без выбора сети. Так что, для непустой сети такой подход должен сработать.
-
Костылищи :)
Иногда проще самому написать нужные диалоги и процедуры, чем пытаться прикрутить стандартные к своему коду. Тоже как альтернатива.
Если то, что собирается делать Doublefish, возможно сделать при помощи Civil 3D API, то конечно это "костыли". Если нет, то увы приходится извращаться...
-
В диалоге из первого сообщения нет ничего, что невозможно сделать с помощью NET API. Если нужно весь функционал этого инструмента - то потребуется довольно немало времени для реализации. Примерно недели две-три, я думаю. Но для серьезного приложения с прицелом на будущее - это самый лучший вариант, на мой взгляд.
P.S. По крайней мере, риск обнаружить "сюрприз" какой-нибудь в будущем сводится к минимуму.