# Get position of hole in ExtrudeGeometry

Hello! I trying to get position of hole in extruded geometry. I created plane and made hole in her geometry. I want get x,y,z coordinates in center of hole, but I don’t know how. I tried to get it from geometry attributes, but there are 1026 elements… Is there some methods to get it?

Here code:
I created shape of plane

``````let shape   = new THREE.Shape();
let width   = 30;
let height  = 30;

shape.moveTo(-width, height);
shape.lineTo(-width, -height);
shape.lineTo(width, -height);
shape.lineTo(width, height);
shape.lineTo(-width, height);
``````

I created hole path and add it to shape

``````let hole = new THREE.Path();
hole.absarc(20, 10, 10, 0, Math.PI * 2, false)
shape.holes.push(hole)
``````

I created plane add add extruded geometry

``````let geometry = new THREE.PlaneGeometry( 30, 30);
let material = new THREE.MeshBasicMaterial( {color: new THREE.Color('#cea6a6'), side: THREE.DoubleSide} );
let mesh = new THREE.Mesh( geometry, material );

let newGeometry = new THREE.ExtrudeGeometry(shape, settings);
mesh.geometry.dispose()
mesh.geometry = newGeometry;
``````

After 4 days I understand how can do it. I simple created line from mesh center to hole config position. Applied quaternion to line and got x,y,z cords of hole.

Maybe there are more optimized solutions, but it only that I could create. I will be glad if someone share more optimized solution Here code:

``````/*
* findCoords - function to find hole coords in 3d space
* data - parameter that require  x,y of hole
*/

let findCoords = function (data) {
let vertexes = [];
//Set coords where you was created hole
let hole = new THREE.Vector3(
data.x,
data.y,
0
);
vertexes.push(  new THREE.Vector3() );
vertexes.push(hole)

//Create line
const material = new THREE.LineBasicMaterial({
color: 0x0000ff
});
const geometry = new THREE.BufferGeometry().setFromPoints( vertexes );
const line = new THREE.Line( geometry, material );
//Set line to center of mesh
line.position.copy(mesh.position)
//Rotate line like rotated mesh
line.applyQuaternion(mesh.quaternion)

//Extract hole coords from second vertex of line
let holeCoord = new THREE.Vector3()
const positionAttribute = line.geometry.getAttribute( 'position' );
holeCoord.fromBufferAttribute( positionAttribute, 1);
return holeCoord;
}

``````
1 Like