# Migrating to BufferGeometry

**URL:** https://discourse.threejs.org/t/migrating-to-buffergeometry/29198
**Category:** Questions
**Tags:** buffergeometry, geometry
**Created:** [August 24, 2021, 6:33am UTC](https://discourse.threejs.org/t/migrating-to-buffergeometry/29198 "2021-08-24T06:33:35Z")
**Posts on this page:** 8
**Page:** 1

<div class="post-metadata">

### Author: ![michelev](https://avatars.discourse-cdn.com/v4/letter/m/9dc877/32.png) [@michelev](https://discourse.threejs.org/u/michelev)
#### Post date: [August 24, 2021, 6:33am UTC](https://discourse.threejs.org/t/migrating-to-buffergeometry/29198/1 "2021-08-24T06:33:35Z")

</div>

Hello,

I’m working on a project where I need to slice a geometry(loaded from an .stl file). I’ve already found a library which claims to do so([GitHub - tdhooper/threejs-slice-geometry: Slice three.js geometry with a plane.](https://github.com/tdhooper/threejs-slice-geometry)). The problem is that it is a bit old and it uses, for example, the Geometry class. So, I’m trying to rewrite it.

The issue is related with the inability to access the vertices and the edges of the geometry:

given the following code, how should I edit it in order to achieve the same thing using BufferGeometry?

```javascript
var geometry = //something of type THREE.Geometry
geometry.vertices.forEach(function(vertex) {
            //Do stuff on vertex
        });

```

Thanks in advance for any help that you can give me.

---

<div class="post-metadata">

### Author: ![Qiumeng12](https://yyz1.discourse-cdn.com/flex035/user_avatar/discourse.threejs.org/qiumeng12/32/19371_2.png) [@Qiumeng12](https://discourse.threejs.org/u/Qiumeng12)
#### Post date: [August 24, 2021, 6:35am UTC](https://discourse.threejs.org/t/migrating-to-buffergeometry/29198/2 "2021-08-24T06:35:45Z")

</div>

```javascript
geometry.attributes.position

```

---

<div class="post-metadata">

### Author: ![michelev](https://avatars.discourse-cdn.com/v4/letter/m/9dc877/32.png) [@michelev](https://discourse.threejs.org/u/michelev)
#### Post date: [August 24, 2021, 6:37am UTC](https://discourse.threejs.org/t/migrating-to-buffergeometry/29198/3 "2021-08-24T06:37:52Z")

</div>

Hi, thanks for the reply but I don’t understand. I actually already tried such a solution but I can’t see how I can iterate through the vertices in that way.

---

<div class="post-metadata">

### Author: ![Qiumeng12](https://yyz1.discourse-cdn.com/flex035/user_avatar/discourse.threejs.org/qiumeng12/32/19371_2.png) [@Qiumeng12](https://discourse.threejs.org/u/Qiumeng12)
#### Post date: [August 24, 2021, 6:41am UTC](https://discourse.threejs.org/t/migrating-to-buffergeometry/29198/4 "2021-08-24T06:41:03Z")

</div>

```javascript
for (let i = 0; i < geometry.attributes.position.array.length; i += 3) {

}

```

---

<div class="post-metadata">

### Author: ![michelev](https://avatars.discourse-cdn.com/v4/letter/m/9dc877/32.png) [@michelev](https://discourse.threejs.org/u/michelev)
#### Post date: [August 24, 2021, 6:46am UTC](https://discourse.threejs.org/t/migrating-to-buffergeometry/29198/5 "2021-08-24T06:46:18Z")

</div>

Oh, it was that simple? Thanks a lot!

---

<div class="post-metadata">

### Author: ![Qiumeng12](https://yyz1.discourse-cdn.com/flex035/user_avatar/discourse.threejs.org/qiumeng12/32/19371_2.png) [@Qiumeng12](https://discourse.threejs.org/u/Qiumeng12)
#### Post date: [August 24, 2021, 6:47am UTC](https://discourse.threejs.org/t/migrating-to-buffergeometry/29198/6 "2021-08-24T06:47:18Z")

</div>

You are welcome 😆

---

<div class="post-metadata">

### Author: ![donmccurdy](https://yyz1.discourse-cdn.com/flex035/user_avatar/discourse.threejs.org/donmccurdy/32/33209_2.png) [@donmccurdy](https://discourse.threejs.org/u/donmccurdy)
#### Post date: [August 24, 2021, 7:01am UTC](https://discourse.threejs.org/t/migrating-to-buffergeometry/29198/7 "2021-08-24T07:01:34Z")

</div>

Small suggestion: if you are loading 3D models from other software (e.g. as glTF) then it might have interleaved vertex data, and `position.array.length` won’t work. To support both kinds of data, use `position.count` instead:

```javascript
const vector = new Vector3();
const position = geometry.attributes.position;

for ( let i = 0; i < position.count; i++ ) {
  vector.fromBufferAttribute( position, i );
  console.log( vector );
  position.setXYZ( i, vector.x, vector.y, vector.z );
}

```

---

<div class="post-metadata">

### Author: ![michelev](https://avatars.discourse-cdn.com/v4/letter/m/9dc877/32.png) [@michelev](https://discourse.threejs.org/u/michelev)
#### Post date: [August 24, 2021, 7:03am UTC](https://discourse.threejs.org/t/migrating-to-buffergeometry/29198/8 "2021-08-24T07:03:29Z")

</div>

Ok, thanks for the tip 🙂
