Thanks @Mugen87, I actually got it just now this way. I was going to update the question with this, just when you sent out your suggestion.

```
function setSizeFromParent ( object ) {
object.updateMatrixWorld( true );
var min = new THREE.Vector3( + Infinity, + Infinity, + Infinity);
var max = new THREE.Vector3( - Infinity, - Infinity, - Infinity);
var scope, i, l;
var v1 = new THREE.Vector3();
var geometry = object.geometry;
if ( geometry !== undefined ) {
if ( geometry.isGeometry ) {
var vertices = geometry.vertices;
for ( i = 0, l = vertices.length; i < l; i ++ ) {
v1.copy( vertices[i] );
v1.applyMatrix4( object.matrixWorld );
min.min( v1 );
max.max( v1 );
}
} else if ( geometry.isBufferGeometry ) {
var attribute = geometry.attributes.position;
if ( attributes !== undefined ) {
for ( i = 0, l = attributes.count; i < l; i ++ ) {
v1.fromBufferAttribute( attribute, i ).applyMatrix4( object.matrixWorld );
min.min ( v1 );
max.max( v1 );
}
}
}
}
return { min, max };
}
```

And when I wanted to use it:

```
var sizeFromParent = setSizeFromParent( object );
const acquiredScale = new THREE.Box3( sizeFromParent.min, sizeFromParent.max ).getSize( new THREE.Vector3() );
```

This was my use case. The arrows which are connected to the labels (HTML elements) were actually added as children to the object, which is why when I was using the â€śdottedâ€ť ring anchor (in light cyan) to scale an object up, the size of the anchor since was based on the logic above was taking in the vertices of the child nodes as well. And this is why the anchor was being scaled erratically.

I will check out `traverseAncestors()`

as you have suggested, and see if it can be done easily with that.

**PS**: Vars can be named better. I truly am thankful tons for you guys making yourselves available to take questions. I started with threejs around 2 weeks back and it is a time of wonder