Виртуальная реальность VRML в 1С - 3D Now! Ключевые слова: VRML,3D,браузер,интернет,сцена,визуализация
В нашей базе мы начали вести сложный учет ячеек склада, задавая их координаты и размеры. Сразу же возникла идея визуализировать 3D картинку.
Сначала были самостоятельные попытки нарисовать проекцию вдоль одной из осей, а затем я вспомнил, что есть такая замечательная вещь, как VRML, который отображается в любом интернет-браузере и представляет собой обычный текстовый файл (вроде HTML). А окошко браузера без проблем вставляется в форму 1С:8.0.
Первая проба пера на картинке:
Соответствующий код на языке VRML:
#VRML V2.0 utf8
DEF CELL Shape {
geometry Box {}
}
Transform {
translation 20 10 0
children [
USE CELL
]
}
Transform {
translation 20 10 16
children [
USE CELL
]
и так далее для каждой ячейки..
Это не просто статичная картинка, по ней можно перемещаться с разной скоростью, вращать во всех направлениях и т.п.
Нужно прочитать про этот VRML, ячейки буду показывать прозрачными, состоящими только из ребер, проходы буду заливать полупрозрачной заливкой, зоны ячеек также заливать бледной заливкой или только поверхность зон заливать.
Результат экспериментов выложу на этой же картинке, а также образец VRML кода для всей этой красоты.
Браузеры сами по себе VRML не поддерживают, нужно ставить соответствующий плагин. Я перепробовал Flux, Octaga, CosmoPlayer, Cortona (ParallelGraphics) и blaxxunContact. Лучшие, на мой взгляд, - Blaxxun и Cortona. Сам остановился на Blaxxun. Его setup весит 5.47мб, а Cortona - 1.6 Мб (http://www.parallelgraphics.com/l2/bin/cortvrml.exe).
По VRML фактически есть только одна книга.
Ее страничка в интернете - http://www.srcc.msu.su/vrml/
VRML можно отображать на формах 7.7, используя 1С++ АктивИкс.
Разместите на форме контрол с идентификатором MMCtrl
Перем АтрФормы;
Перем m_ptr;
Перем MMC; //: Cortona.Control.1
Перем гРФорма;
//******************************************************************************
// Предопределенная процедура
//
Процедура ПриИзмененииРазмераОкна(ТипСобытия,Ширина,Высота)
гРФорма.ПриИзмененииРазмераОкна(ТипСобытия,Ширина,Высота);
КонецПроцедуры // ПриИзмененииРазмераОкна()
//******************************************************************************
// Предопределенная процедура
//
Процедура ПриОткрытии()
гРФорма = СоздатьОбъект("Общие.Форма.Привязка");
гРФорма.Привязка("MMCtrl","H","Форма","W","Форма");
КонецПроцедуры // ПослеОткрытия()
Процедура ПослеОткрытия()
ФайлОткрыт = 0;
АтрФормы = СоздатьОбъект("АтрибутФормы");
АтрФормы.УстановитьАтрибут(Форма,"MMCtrl");
m_ptr = СоздатьОбъект("АктивИкс") ;
АтрФормы.СоздатьЭлементУправления(m_ptr); // СоздатьЭУ
m_ptr.СоздатьЭУ("Cortona.Control.1");
MMC = m_ptr.Объект;
MMC.Scene = "file://D:\Program Files\Common Files\ParallelGraphics\Cortona\Help\rose.wrl";
m_ptr.УстановитьФокус();
гРФорма.ПослеОткрытия();
КонецПроцедуры
|