Я получил программное обеспечение для симуляции автомобиля, которое позволяет вводить параметры через окно управления скриптом.
Что я хочу сделать, так это написать небольшое приложение на C ++, которое выполняет некоторые вычисления и начинает вводить построчные команды в окно управления сценарием tcl автосимулятора.
Идея состоит в том, чтобы использовать датчик отслеживания головы, чтобы получить текущую позицию в плоскости xyz, а затем на основе данных выполнить некоторую обработку и автоматически написать что-то вроде:
>> Movie eval {dict set View(0:0) xrot 12 yrot 0 zrot 0}
в окно скрипта, чтобы настроить текущий вид.
Приведенная выше команда переводит панорамирование текущего изображения с камеры в положение 12 градусов вправо (x-направление), где 0 градусов = взгляд вперед.
Итак, мой вопрос сейчас:
Как я могу сказать моему приложению C ++ написать вышеуказанную команду в открытое окно управления сценарием?
Простейшим способом может быть использование comm
пакет в Tcllib (стандартная библиотека сообщества Tcl). Единственная реальная сложность заключается в том, что используемый им протокол не является общедоступным (в основном это отправка команд, закодированных в определенном формате), поэтому вам понадобится какой-то способ легко об этом говорить.
Самый простой способ говорить об этом — встроить интерпретатор Tcl в ваше приложение C ++. Тогда вы сможете загрузить comm
пакет в переводчик и использовать comm::comm send
чтобы сделать то, что вы хотите (вам также потребуется пакет на другой стороне и скопировать через идентификатор, но это должно быть достаточно просто).
set remoteid ???; # Look this up with [comm::comm self] on the other side
comm::comm send $remoteid \
dict set View(0:0) xrot 12 yrot 0 zrot 0
Конечно, вам нужно обернуть это внутри соответствующих звонков Tcl_Eval()
сначала создав локального переводчика с Tcl_CreateInterp()
после инициализации библиотеки Tcl с Tcl_FindExecutable()
и так далее, но это просто стандартное встраивание.