copy method

Implementation

BufferGeometry copy(BufferGeometry source) {
  // reset

  // this.index = null;
  // this.attributes = {};
  // this.morphAttributes = {};
  // this.groups = [];
  // this.boundingBox = null;
  // this.boundingSphere = null;

  // used for storing cloned, shared data

  // Map data = {};

  // name

  name = source.name;

  // index

  final index = source.index;

  if (index != null) {
    setIndex(index.clone());
  }

  // attributes

  final attributes = source.attributes;

  for (String name in attributes.keys) {
    final attribute = attributes[name];
    setAttributeFromString(name, attribute.clone());
  }

  // morph attributes

  final morphAttributes = source.morphAttributes;

  for (String name in morphAttributes.keys) {
    List<BufferAttribute> array = [];
    final morphAttribute = morphAttributes[name]!;
    // morphAttribute: array of Float32BufferAttributes

    for (int i = 0, l = morphAttribute.length; i < l; i++) {
      array.add(morphAttribute[i].clone());
    }

    this.morphAttributes[name] = array;
  }

  morphTargetsRelative = source.morphTargetsRelative;

  // groups

  List<Map<String,dynamic>> groups = source.groups;

  for (int i = 0, l = groups.length; i < l; i++) {
    final group = groups[i];
    addGroup(group["start"], group["count"], group["materialIndex"]);
  }

  // bounding box

  final boundingBox = source.boundingBox;

  if (boundingBox != null) {
    this.boundingBox = boundingBox.clone();
  }

  // bounding sphere

  final boundingSphere = source.boundingSphere;

  if (boundingSphere != null) {
    this.boundingSphere = boundingSphere.clone();
  }

  // draw range

  drawRange["start"] = source.drawRange["start"]!;
  drawRange["count"] = source.drawRange["count"]!;

  // user data

  userData = source.userData;

  return this;
}