public LineNode() { var line = (SCNGeometry)template.Copy(NSZone.Default); line.FirstMaterial = GetNativeMaterial(style.Color); lineNode = SCNNode.FromGeometry(line); var cap = (SCNGeometry)capTemplate.Copy(NSZone.Default); cap.FirstMaterial = line.FirstMaterial; scapNode = SCNNode.FromGeometry(cap); ecapNode = SCNNode.FromGeometry(cap); AddChildNode(lineNode); AddChildNode(scapNode); AddChildNode(ecapNode); }
/// <summary> /// must copy geometry and materials to set unique data on both here we only want /// </summary> public static SCNGeometry CopyGeometryAndMaterials(this SCNGeometry geometry) { var result = geometry; if (geometry.Copy() is SCNGeometry geometryCopy) { var materialsCopy = new List <SCNMaterial>(); foreach (var material in geometryCopy.Materials) { if (material.Copy() is SCNMaterial materialCopy) { materialsCopy.Add(materialCopy); } } geometryCopy.Materials = materialsCopy.ToArray(); result = geometryCopy; } return(result); }