PointAttributes.js 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. /**
  2. * Some types of possible point attribute data formats
  3. *
  4. * @class
  5. */
  6. const PointAttributeTypes = {
  7. DATA_TYPE_DOUBLE: {ordinal: 0, name: "double", size: 8},
  8. DATA_TYPE_FLOAT: {ordinal: 1, name: "float", size: 4},
  9. DATA_TYPE_INT8: {ordinal: 2, name: "int8", size: 1},
  10. DATA_TYPE_UINT8: {ordinal: 3, name: "uint8", size: 1},
  11. DATA_TYPE_INT16: {ordinal: 4, name: "int16", size: 2},
  12. DATA_TYPE_UINT16: {ordinal: 5, name: "uint16", size: 2},
  13. DATA_TYPE_INT32: {ordinal: 6, name: "int32", size: 4},
  14. DATA_TYPE_UINT32: {ordinal: 7, name: "uint32", size: 4},
  15. DATA_TYPE_INT64: {ordinal: 8, name: "int64", size: 8},
  16. DATA_TYPE_UINT64: {ordinal: 9, name: "uint64", size: 8}
  17. };
  18. let i = 0;
  19. for (let obj in PointAttributeTypes) {
  20. PointAttributeTypes[i] = PointAttributeTypes[obj];
  21. i++;
  22. }
  23. export {PointAttributeTypes};
  24. class PointAttribute{
  25. constructor(name, type, numElements){
  26. this.name = name;
  27. this.type = type;
  28. this.numElements = numElements;
  29. this.byteSize = this.numElements * this.type.size;
  30. this.description = "";
  31. this.range = [Infinity, -Infinity];
  32. }
  33. };
  34. PointAttribute.POSITION_CARTESIAN = new PointAttribute(
  35. "POSITION_CARTESIAN", PointAttributeTypes.DATA_TYPE_FLOAT, 3);
  36. PointAttribute.RGBA_PACKED = new PointAttribute(
  37. "COLOR_PACKED", PointAttributeTypes.DATA_TYPE_INT8, 4);
  38. PointAttribute.COLOR_PACKED = PointAttribute.RGBA_PACKED;
  39. PointAttribute.RGB_PACKED = new PointAttribute(
  40. "COLOR_PACKED", PointAttributeTypes.DATA_TYPE_INT8, 3);
  41. PointAttribute.NORMAL_FLOATS = new PointAttribute(
  42. "NORMAL_FLOATS", PointAttributeTypes.DATA_TYPE_FLOAT, 3);
  43. PointAttribute.INTENSITY = new PointAttribute(
  44. "INTENSITY", PointAttributeTypes.DATA_TYPE_UINT16, 1);
  45. PointAttribute.CLASSIFICATION = new PointAttribute(
  46. "CLASSIFICATION", PointAttributeTypes.DATA_TYPE_UINT8, 1);
  47. PointAttribute.NORMAL_SPHEREMAPPED = new PointAttribute(
  48. "NORMAL_SPHEREMAPPED", PointAttributeTypes.DATA_TYPE_UINT8, 2);
  49. PointAttribute.NORMAL_OCT16 = new PointAttribute(
  50. "NORMAL_OCT16", PointAttributeTypes.DATA_TYPE_UINT8, 2);
  51. PointAttribute.NORMAL = new PointAttribute(
  52. "NORMAL", PointAttributeTypes.DATA_TYPE_FLOAT, 3);
  53. PointAttribute.RETURN_NUMBER = new PointAttribute(
  54. "RETURN_NUMBER", PointAttributeTypes.DATA_TYPE_UINT8, 1);
  55. PointAttribute.NUMBER_OF_RETURNS = new PointAttribute(
  56. "NUMBER_OF_RETURNS", PointAttributeTypes.DATA_TYPE_UINT8, 1);
  57. PointAttribute.SOURCE_ID = new PointAttribute(
  58. "SOURCE_ID", PointAttributeTypes.DATA_TYPE_UINT16, 1);
  59. PointAttribute.INDICES = new PointAttribute(
  60. "INDICES", PointAttributeTypes.DATA_TYPE_UINT32, 1);
  61. PointAttribute.SPACING = new PointAttribute(
  62. "SPACING", PointAttributeTypes.DATA_TYPE_FLOAT, 1);
  63. PointAttribute.GPS_TIME = new PointAttribute(
  64. "GPS_TIME", PointAttributeTypes.DATA_TYPE_DOUBLE, 1);
  65. export {PointAttribute};
  66. export class PointAttributes{
  67. constructor(pointAttributes){
  68. this.attributes = [];
  69. this.byteSize = 0;
  70. this.size = 0;
  71. this.vectors = [];
  72. if (pointAttributes != null) {
  73. for (let i = 0; i < pointAttributes.length; i++) {
  74. let pointAttributeName = pointAttributes[i];
  75. let pointAttribute = PointAttribute[pointAttributeName];
  76. this.attributes.push(pointAttribute);
  77. this.byteSize += pointAttribute.byteSize;
  78. this.size++;
  79. }
  80. }
  81. }
  82. add(pointAttribute){
  83. this.attributes.push(pointAttribute);
  84. this.byteSize += pointAttribute.byteSize;
  85. this.size++;
  86. };
  87. addVector(vector){
  88. this.vectors.push(vector);
  89. }
  90. hasNormals(){
  91. for (let name in this.attributes) {
  92. let pointAttribute = this.attributes[name];
  93. if (
  94. pointAttribute === PointAttribute.NORMAL_SPHEREMAPPED ||
  95. pointAttribute === PointAttribute.NORMAL_FLOATS ||
  96. pointAttribute === PointAttribute.NORMAL ||
  97. pointAttribute === PointAttribute.NORMAL_OCT16) {
  98. return true;
  99. }
  100. }
  101. return false;
  102. };
  103. }