Manipulating ThreeJS: Incorporating Elements into a Group

I'm facing a challenge in storing customPrimitive entities within a group. The issue is that the entity generates its geometry internally by loading a file, so I only need to store the node itself. Below is my code snippet:

var grp = new THREE.Group();
this.el.sceneEl.object3D.add(grp);
 for (let i = 0; i < 2; i++) {
   let x = document.createElement('a-foo');
   this.el.sceneEl.appendChild(x); // Works, but not ideal
   // grp.appendChild(x);          // grp.appendChild is not a function
   // grp.add(x.object3D)          // Attempting to add an element without `object3D`
   // grp.add(x);                  // -^
 }

Any suggestions on how to achieve this? You can also find the Fiddle here: https://jsfiddle.net/zrept6wf/2/

Answer №1

To initiate the entity, it must be added to the DOM. In simpler terms, you need to

// preferably to the scene: 
this.el.sceneEl.appendChild(x);
// or anywhere else: 
document.body.appendChild(x);

In order for a-foo to fully initialize, you must first do this if you plan on using primitives. This step needs to be completed before accessing the object3D reference and adding it to a group.

// init 
this.el.sceneEl.appendChild(x);
// wait until loaded: x
x.addEventListener('loaded', e => {
   grp.add(x)
})

If your goal is simply a group of meshes, consider creating them in a custom component instead of relying on A-Frame primitives. Alternatively, you could preload just the geometry and replace the default one in a-foo.

Similar questions

If you have not found the answer to your question or you are interested in this topic, then look at other similar questions below or use the search

Include the script tags retrieved from an array

I'm exploring the idea of dynamically adding JavaScript to the DOM using an array and a loop. The goal is to load each script sequentially, starting with scripts[0], then scripts[1], and so on. var myScripts = [["external", "https://code.jquery.com/j ...

Transforming a file into an array using the FS module

I need assistance converting a simple "en.txt" file into an array for NodeJS using FS. "TITLE" => "Amazing title of my page" "COPYRIGHT" => "Copyright my site" "BLABLA" => "A amazing sentence" Any help would be greatly appreciated. Thank ...

Issue with module.exports entry in Webpack configuration causing errors

I've been working on setting up webpack but I've hit a roadblock due to this error message. It seems like there's an issue with the entry configuration. When I try to add it without specifying a path, as shown in the tutorial, I receive the ...

Plugin initialization cannot occur as the $scope DOM elements are still dynamic and not ready

As I venture into the realm of AngularJS, this project marks my first deep dive into building something substantial, despite having only tinkered with a few tutorials and demos. Bear with me if I struggle to articulate what may be a straightforward questio ...

What steps should I take to ensure that Vim properly formats the indentation for this JavaScript code?

Currently an Emacs user, but trying out Vim for a change. :) I'm really enjoying the quick keystrokes and the overall philosophy of Vim, however I've been running into some issues with the more advanced features. One problem I'm having is w ...

What is causing JavaScript to pass the parameter name instead of the element?

Information: I am currently organizing an array of names into two separate arrays - one for names starting with A-M and the other for names starting with N-Z. My goal is to have each entry represented as an object with the name as the property and an empty ...

Accessing a specific element within an array that has been nested within another array, using JavaScript

Here's what my code looks like: planets[0]= new THREE.Mesh( geometry, material ); planettexts[0]= new THREE.Mesh( textGeometry, textMaterial ); planets[0].add(planettexts[0]); Now, I am trying to hide the planettext, but every attempt results in an ...

Moving from one page to another

I am attempting to create a transition effect between sections within a single-page application. All the sections are contained on the same page, with only one section displayed at a time while the rest are set to display none. When a specific event is tri ...

Error: Type Error when using custom App and getInitialProps in Next.js

I have a simple app built using the Next JS starter kit, and I am attempting to integrate custom functionality as outlined in the documentation: class MyApp extends App { static async getInitialProps({ Component, router, ctx }) { let pageProps = {}; ...

ReactJS: What is the best way to rearrange elements within an array stored in an object's property?

I am attempting to swap the positions of two elements within an array, which is nested inside an object as a property. However, when I click on the second "^" button in my CodeSandbox example below, I encounter the error message TypeError: arr.container.ma ...

The rotation of the Torus object in Three.js is not centered around the 0z axis

Attempting to rotate a torus along 2 axes: Ox and Oz. The goal is to apply this rotation with a slider from dat.gui that is modified by mouse input. The torus is defined as follows: var geometryTorus = new THREE.TorusGeometry( radius, 2*widthLine, 100, 1 ...

Capture an image of a webpage and print it out

I am currently in the process of designing a web page and one of the key features I need is a button that allows users to print a selected area. After conducting several searches, I came across html2canvas as a potential solution. I proceeded to install it ...

Utilizing jQuery DataTable with an AJAX call to retrieve data from a JSON

I am facing an issue while trying to retrieve data from Entity Framework in ASP.NET MVC using a jQuery data table with AJAX. The data is not displaying in the table as expected. I need assistance in identifying the mistake in my approach. Upon executing t ...

Converting PHP code to utilize AJAX in JS

Within the confines of a single file (invasions.php), I have the following code: <!DOCTYPE html> <html xmlns='http://www.w3.org/1999/xhtml' xml:lang='en' lang='en'> <head> <meta http-equiv='con ...

Cease the act of sending submissions through JavaScript ajax requests

I need to prevent a form submission based on the result of an ajax request... Here is the code I attempted to implement: The chreg() function is supposed to return a boolean value from the ajax request, but it's not working! Javascript: function ch ...

Error when spaces are present in the formatted JSON result within the link parameter of the 'load' function in JQuery

I am facing an issue with JSON and jQuery. My goal is to send a formatted JSON result within the link using the .load() function. <?php $array = array( "test1" => "Some_text_without_space", "test2" => "Some text with space" ); $json = jso ...

Ensure the initial value in the dropdown menu is automatically set to the first value in VueJs

How can I set the first value of my time object as the default value for my dropdown in Vue? I want the first value to be pre-selected when a user enters the website, but currently only display the value without actually selecting it. time Object:- { &quo ...

Ensuring a button (class) is in active hover mode when the document loads

My website features 4 clickable service buttons on the homepage, each with a unique hover effect (background-color change) when users interact with them. While this setup works well overall, I am looking to highlight the FIRST button as the most important ...

Using jQuery to select the child element of the parent that came before

Recently, I've been experimenting with creating animations using CSS and jQuery. While it has been successful so far, I'm now looking to take it a step further. Specifically, I want information to appear on top of an image when the user clicks on ...

Creating a Conditional "Retrieve Script File" Function in JavaScript Without Dependencies

At the company where I work, we have numerous clients with their own websites that are connected to our system through a linking mechanism. Essentially, these clients have a link on their website that directs users to our site upon clicking. I am working ...