При работе с X3D через X3Dom иногда я хотел бы динамически добавлять объекты. В качестве примера, я мог бы иметь функцию, как в следующем добавить строку:Добавление IndexedLineSet в X3Dom
function add_line(lineString) {
var lineString = lineString || random_line();
var orbit = $("<shape></shape>");
scene.append(orbit);
var indexedLineSet = $("<IndexedLineSet></IndexedLineSet>");
orbit.append(indexedLineSet).attr('coordIndex', '0 1');
var coordinate = $("<coordinate></coordinate>");
coordinate.attr('point', lineString);
indexedLineSet.append(coordinate)
}
В этом коде scene
это существующая X3D сцена, random_line
это функция, которая генерирует строку, определяющую случайную строку, и я манипулировать сценой с помощью JQuery. При вызове функции при загрузке страницы она работает нормально. Однако при вызове функции в ответ на нажатие кнопки строка не появляется, хотя она добавляется в сцену.
Примечания:
- Проблема, как представляется, зависит от типа объекта, я пытаюсь добавить. Сферы могут быть добавлены без каких-либо проблем.
- Согласно инспектору Firefox,
IndexedLineScene
, кажется, правильно добавлен в сцену; он просто не отображается на изображении.
Да, это похоже на это - спасибо! Любые мысли о том, почему исходная версия работала при загрузке, но не в ответ на нажатие кнопки? –
Отредактировал свой ответ, чтобы отразить фоны, надеюсь, что это поможет лучше понять. – mistapink
Важнейшей проблемой является то, что я перемещаю строку 'scene.append (orbit)' в конец функции 'add_line'. Или, как вы говорите, «Построить 3D-объект полностью». Я уже делал это в своей функции «add_sphere». Как ни странно, команда 'add_sphere' выглядит более уверенной в том, что я могу перемещать' scene.append (line) 'почти где угодно. Но основная идея построения 3D-объекта полностью имеет смысл. Еще раз спасибо! –