@visactor/vutils 0.19.4-alpha.1 → 0.19.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -152,7 +152,7 @@ export declare class Color {
152
152
  color: RGB;
153
153
  static Brighter(source: string, b?: number): string;
154
154
  static SetOpacity(source: string, o?: number): string;
155
- static getColorBrightness(source: string | Color, model?: 'hsv' | 'hsl' | 'lum' | 'lum2' | 'lum3'): number;
155
+ static getColorBrightness(source: string | Color, model?: 'hsv' | 'hsl' | 'lum' | 'lum2' | 'lum3' | 'wcag'): number;
156
156
  static parseColorString(value: string): RGB;
157
157
  constructor(value: string);
158
158
  toRGBA(): string;
@@ -174,6 +174,7 @@ export declare class Color {
174
174
  getLuminance(): number;
175
175
  getLuminance2(): number;
176
176
  getLuminance3(): number;
177
+ getLuminanceWCAG(): number;
177
178
  clone(): Color;
178
179
  copyGammaToLinear(color: Color, gammaFactor?: number): this;
179
180
  copyLinearToGamma(color: Color, gammaFactor?: number): this;
@@ -220,6 +220,9 @@ class Color {
220
220
 
221
221
  case "lum3":
222
222
  return color.getLuminance3();
223
+
224
+ case "wcag":
225
+ return color.getLuminanceWCAG();
223
226
  }
224
227
  }
225
228
  static parseColorString(value) {
@@ -313,6 +316,13 @@ class Color {
313
316
  getLuminance3() {
314
317
  return (.299 * this.color.r + .587 * this.color.g + .114 * this.color.b) / 255;
315
318
  }
319
+ getLuminanceWCAG() {
320
+ const RsRGB = this.color.r / 255, GsRGB = this.color.g / 255, BsRGB = this.color.b / 255;
321
+ let R, G, B;
322
+ R = RsRGB <= .03928 ? RsRGB / 12.92 : Math.pow((RsRGB + .055) / 1.055, 2.4), G = GsRGB <= .03928 ? GsRGB / 12.92 : Math.pow((GsRGB + .055) / 1.055, 2.4),
323
+ B = BsRGB <= .03928 ? BsRGB / 12.92 : Math.pow((BsRGB + .055) / 1.055, 2.4);
324
+ return .2126 * R + .7152 * G + .0722 * B;
325
+ }
316
326
  clone() {
317
327
  return new Color(this.color.toString());
318
328
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/color/Color.ts"],"names":[],"mappings":";;;;;;AAkCA,sCAAqE;AACrE,0DAAkC;AAClC,0DAAkC;AAElC,MAAM,OAAO,GAAG,oBAAoB,CAAC;AAErC,MAAM,sBAAsB,GAAG;IAC7B,WAAW,EAAE,UAAU;CACxB,CAAC;AAEW,QAAA,cAAc,GAAG;IAC5B,SAAS,EAAE,QAAQ;IACnB,YAAY,EAAE,QAAQ;IACtB,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE,QAAQ;IACpB,KAAK,EAAE,QAAQ;IACf,KAAK,EAAE,QAAQ;IACf,MAAM,EAAE,QAAQ;IAChB,KAAK,EAAE,QAAQ;IACf,cAAc,EAAE,QAAQ;IACxB,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE,QAAQ;IACpB,KAAK,EAAE,QAAQ;IACf,SAAS,EAAE,QAAQ;IACnB,SAAS,EAAE,QAAQ;IACnB,UAAU,EAAE,QAAQ;IACpB,SAAS,EAAE,QAAQ;IACnB,KAAK,EAAE,QAAQ;IACf,cAAc,EAAE,QAAQ;IACxB,QAAQ,EAAE,QAAQ;IAClB,OAAO,EAAE,QAAQ;IACjB,IAAI,EAAE,QAAQ;IACd,QAAQ,EAAE,QAAQ;IAClB,QAAQ,EAAE,QAAQ;IAClB,aAAa,EAAE,QAAQ;IACvB,QAAQ,EAAE,QAAQ;IAClB,SAAS,EAAE,QAAQ;IACnB,QAAQ,EAAE,QAAQ;IAClB,SAAS,EAAE,QAAQ;IACnB,WAAW,EAAE,QAAQ;IACrB,cAAc,EAAE,QAAQ;IACxB,UAAU,EAAE,QAAQ;IACpB,UAAU,EAAE,QAAQ;IACpB,OAAO,EAAE,QAAQ;IACjB,UAAU,EAAE,QAAQ;IACpB,YAAY,EAAE,QAAQ;IACtB,aAAa,EAAE,QAAQ;IACvB,aAAa,EAAE,QAAQ;IACvB,aAAa,EAAE,QAAQ;IACvB,aAAa,EAAE,QAAQ;IACvB,UAAU,EAAE,QAAQ;IACpB,QAAQ,EAAE,QAAQ;IAClB,WAAW,EAAE,QAAQ;IACrB,OAAO,EAAE,QAAQ;IACjB,OAAO,EAAE,QAAQ;IACjB,UAAU,EAAE,QAAQ;IACpB,SAAS,EAAE,QAAQ;IACnB,WAAW,EAAE,QAAQ;IACrB,WAAW,EAAE,QAAQ;IACrB,OAAO,EAAE,QAAQ;IACjB,SAAS,EAAE,QAAQ;IACnB,UAAU,EAAE,QAAQ;IACpB,IAAI,EAAE,QAAQ;IACd,SAAS,EAAE,QAAQ;IACnB,IAAI,EAAE,QAAQ;IACd,KAAK,EAAE,QAAQ;IACf,WAAW,EAAE,QAAQ;IACrB,IAAI,EAAE,QAAQ;IACd,QAAQ,EAAE,QAAQ;IAClB,OAAO,EAAE,QAAQ;IACjB,SAAS,EAAE,QAAQ;IACnB,MAAM,EAAE,QAAQ;IAChB,KAAK,EAAE,QAAQ;IACf,KAAK,EAAE,QAAQ;IACf,QAAQ,EAAE,QAAQ;IAClB,aAAa,EAAE,QAAQ;IACvB,SAAS,EAAE,QAAQ;IACnB,YAAY,EAAE,QAAQ;IACtB,SAAS,EAAE,QAAQ;IACnB,UAAU,EAAE,QAAQ;IACpB,SAAS,EAAE,QAAQ;IACnB,oBAAoB,EAAE,QAAQ;IAC9B,SAAS,EAAE,QAAQ;IACnB,UAAU,EAAE,QAAQ;IACpB,SAAS,EAAE,QAAQ;IACnB,SAAS,EAAE,QAAQ;IACnB,WAAW,EAAE,QAAQ;IACrB,aAAa,EAAE,QAAQ;IACvB,YAAY,EAAE,QAAQ;IACtB,cAAc,EAAE,QAAQ;IACxB,cAAc,EAAE,QAAQ;IACxB,cAAc,EAAE,QAAQ;IACxB,WAAW,EAAE,QAAQ;IACrB,IAAI,EAAE,QAAQ;IACd,SAAS,EAAE,QAAQ;IACnB,KAAK,EAAE,QAAQ;IACf,OAAO,EAAE,QAAQ;IACjB,MAAM,EAAE,QAAQ;IAChB,gBAAgB,EAAE,QAAQ;IAC1B,UAAU,EAAE,QAAQ;IACpB,YAAY,EAAE,QAAQ;IACtB,YAAY,EAAE,QAAQ;IACtB,cAAc,EAAE,QAAQ;IACxB,eAAe,EAAE,QAAQ;IACzB,iBAAiB,EAAE,QAAQ;IAC3B,eAAe,EAAE,QAAQ;IACzB,eAAe,EAAE,QAAQ;IACzB,YAAY,EAAE,QAAQ;IACtB,SAAS,EAAE,QAAQ;IACnB,SAAS,EAAE,QAAQ;IACnB,QAAQ,EAAE,QAAQ;IAClB,WAAW,EAAE,QAAQ;IACrB,IAAI,EAAE,QAAQ;IACd,OAAO,EAAE,QAAQ;IACjB,KAAK,EAAE,QAAQ;IACf,SAAS,EAAE,QAAQ;IACnB,MAAM,EAAE,QAAQ;IAChB,SAAS,EAAE,QAAQ;IACnB,MAAM,EAAE,QAAQ;IAChB,aAAa,EAAE,QAAQ;IACvB,SAAS,EAAE,QAAQ;IACnB,aAAa,EAAE,QAAQ;IACvB,aAAa,EAAE,QAAQ;IACvB,UAAU,EAAE,QAAQ;IACpB,SAAS,EAAE,QAAQ;IACnB,IAAI,EAAE,QAAQ;IACd,IAAI,EAAE,QAAQ;IACd,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE,QAAQ;IACpB,MAAM,EAAE,QAAQ;IAChB,aAAa,EAAE,QAAQ;IACvB,GAAG,EAAE,QAAQ;IACb,SAAS,EAAE,QAAQ;IACnB,SAAS,EAAE,QAAQ;IACnB,WAAW,EAAE,QAAQ;IACrB,MAAM,EAAE,QAAQ;IAChB,UAAU,EAAE,QAAQ;IACpB,QAAQ,EAAE,QAAQ;IAClB,QAAQ,EAAE,QAAQ;IAClB,MAAM,EAAE,QAAQ;IAChB,MAAM,EAAE,QAAQ;IAChB,OAAO,EAAE,QAAQ;IACjB,SAAS,EAAE,QAAQ;IACnB,SAAS,EAAE,QAAQ;IACnB,SAAS,EAAE,QAAQ;IACnB,IAAI,EAAE,QAAQ;IACd,WAAW,EAAE,QAAQ;IACrB,SAAS,EAAE,QAAQ;IACnB,GAAG,EAAE,QAAQ;IACb,IAAI,EAAE,QAAQ;IACd,OAAO,EAAE,QAAQ;IACjB,MAAM,EAAE,QAAQ;IAChB,SAAS,EAAE,QAAQ;IACnB,MAAM,EAAE,QAAQ;IAChB,KAAK,EAAE,QAAQ;IACf,KAAK,EAAE,QAAQ;IACf,UAAU,EAAE,QAAQ;IACpB,MAAM,EAAE,QAAQ;IAChB,WAAW,EAAE,QAAQ;CACtB,CAAC;AAEF,SAAS,GAAG,CAAC,KAAa;IACxB,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC3D,OAAO,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACtD,CAAC;AAED,SAAS,GAAG,CAAC,KAAwB;IACnC,IAAI,IAAA,iBAAQ,EAAC,KAAK,CAAC,EAAE;QACnB,OAAO,IAAI,GAAG,CAAE,KAAgB,IAAI,EAAE,EAAE,CAAE,KAAgB,IAAI,CAAC,CAAC,GAAG,IAAI,EAAG,KAAgB,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC;KACvG;SAAM,IAAI,IAAA,gBAAO,EAAC,KAAK,CAAC,EAAE;QACzB,OAAO,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;KAC9C;IAGD,OAAO,IAAI,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAChC,CAAC;AAED,SAAS,IAAI,CAAC,KAAwB;IACpC,IAAI,IAAA,iBAAQ,EAAC,KAAK,CAAC,EAAE;QACnB,OAAO,IAAI,GAAG,CACX,KAAgB,KAAK,EAAE,EACxB,CAAE,KAAgB,KAAK,EAAE,CAAC,GAAG,IAAI,EACjC,CAAE,KAAgB,KAAK,CAAC,CAAC,GAAG,IAAI,EAC/B,KAAgB,GAAG,IAAI,CACzB,CAAC;KACH;SAAM,IAAI,IAAA,gBAAO,EAAC,KAAK,CAAC,EAAE;QACzB,OAAO,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;KACxD;IAGD,OAAO,IAAI,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;AACnC,CAAC;AAED,SAAS,YAAY,CAAC,CAAS;IAC7B,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,YAAY,GAAG,YAAY,EAAE,GAAG,CAAC,CAAC;AACzF,CAAC;AAED,SAAS,YAAY,CAAC,CAAS;IAC7B,OAAO,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,GAAG,KAAK,CAAC;AAC1E,CAAC;AAED,MAAM,MAAM,GAAG,CAAC,WAAmB,EAAE,QAAkB,EAAE,EAAE;IACzD,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAExC,IAAI,QAAQ,IAAI,KAAK,EAAE;QACrB,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACnC,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QAElC,IAAI,SAAS,KAAK,CAAC,EAAE;YACnB,OAAO,IAAI,GAAG,CACZ,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,EAC9C,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,EAC9C,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,EAChC,CAAC,CACF,CAAC;SACH;QAED,IAAI,SAAS,KAAK,CAAC,EAAE;YACnB,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;SACjB;aAEI,IAAI,SAAS,KAAK,CAAC,EAAE;YACxB,OAAO,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;SAChG;QAED,OAAO,IAAI,CAAC;KACb;IAED,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC;AAEF,MAAa,KAAK;IAGhB,MAAM,CAAC,QAAQ,CAAC,MAAc,EAAE,CAAC,GAAG,CAAC;QACnC,IAAI,CAAC,KAAK,CAAC,EAAE;YACX,OAAO,MAAM,CAAC;SACf;QACD,OAAO,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAChD,CAAC;IAED,MAAM,CAAC,UAAU,CAAC,MAAc,EAAE,CAAC,GAAG,CAAC;QACrC,IAAI,CAAC,KAAK,CAAC,EAAE;YACX,OAAO,MAAM,CAAC;SACf;QACD,OAAO,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAClD,CAAC;IAED,MAAM,CAAC,kBAAkB,CAAC,MAAsB,EAAE,QAAiD,KAAK;QACtG,MAAM,KAAK,GAAG,MAAM,YAAY,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC;QACnE,QAAQ,KAAK,EAAE;YACb,KAAK,KAAK;gBACR,OAAO,KAAK,CAAC,gBAAgB,EAAE,CAAC;YAClC,KAAK,KAAK;gBACR,OAAO,KAAK,CAAC,gBAAgB,EAAE,CAAC;YAClC,KAAK,KAAK;gBACR,OAAO,KAAK,CAAC,YAAY,EAAE,CAAC;YAC9B,KAAK,MAAM;gBACT,OAAO,KAAK,CAAC,aAAa,EAAE,CAAC;YAC/B,KAAK,MAAM;gBACT,OAAO,KAAK,CAAC,aAAa,EAAE,CAAC;YAC/B;gBACE,OAAO,KAAK,CAAC,gBAAgB,EAAE,CAAC;SACnC;IACH,CAAC;IAED,MAAM,CAAC,gBAAgB,CAAC,KAAa;QAEnC,IAAI,IAAA,gBAAO,EAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC,EAAE;YAC1C,OAAO,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC,CAAC;SAC5C;QAGD,IAAI,IAAA,gBAAO,EAAC,sBAAc,CAAC,KAAK,CAAC,CAAC,EAAE;YAClC,OAAO,GAAG,CAAC,sBAAc,CAAC,KAAK,CAAC,CAAC,CAAC;SACnC;QACD,MAAM,WAAW,GAAG,GAAG,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAGpD,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;QAEnC,IAAI,MAAM,KAAK,SAAS,EAAE;YACxB,OAAO,MAAM,CAAC;SACf;QAGD,IAAI,sBAAsB,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE;YAC5C,MAAM,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,+BAA+B,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACnF,OAAO,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SAClH;QAGD,IAAI,sBAAsB,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE;YAC5C,MAAM,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,+BAA+B,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACnF,MAAM,GAAG,GAAG,IAAA,kBAAQ,EAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YAEhG,OAAO,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SAC5D;QAED,OAAO;IACT,CAAC;IAED,YAAY,KAAa;QACvB,MAAM,KAAK,GAAG,KAAK,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;QAG5C,IAAI,KAAK,EAAE;YACT,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;SACpB;aAAM;YAEL,OAAO,CAAC,IAAI,CAAC,WAAW,KAAK,YAAY,CAAC,CAAC;YAC3C,IAAI,CAAC,KAAK,GAAG,IAAI,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;SACrC;IACH,CAAC;IACD,MAAM;QACJ,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;IAChC,CAAC;IACD,QAAQ;QACN,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;IAChC,CAAC;IACD,KAAK;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;IAChC,CAAC;IACD,KAAK;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;IAChC,CAAC;IAED,QAAQ,CAAC,CAAS;QAChB,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC;QAC/B,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7D,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7D,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7D,OAAO,IAAI,CAAC;IACd,CAAC;IAED,GAAG,CAAC,KAAY;QACd,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC;QAC/B,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACjD,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACjD,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACjD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,GAAG,CAAC,KAAY;QACd,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACzD,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACzD,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACzD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,QAAQ,CAAC,KAAY;QACnB,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC;QAC/B,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACzE,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACzE,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACzE,OAAO,IAAI,CAAC;IACd,CAAC;IAGD,gBAAgB;QACd,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;IAClE,CAAC;IAED,gBAAgB;QACd,OAAO,CACL,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG;YACvD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;YAC3D,GAAG,CACJ,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,CAA6B,EAAE,CAA6B,EAAE,CAA6B;QAChG,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;QACnC,MAAM,GAAG,GAAG,IAAA,kBAAQ,EAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAE/D,MAAM,GAAG,GAAG,IAAA,kBAAQ,EAClB,IAAA,cAAK,EAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAA,cAAK,EAAC,CAAW,EAAE,CAAC,EAAE,GAAG,CAAC,EAC7C,IAAA,cAAK,EAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,EACjD,IAAA,cAAK,EAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAClD,CAAC;QACF,IAAI,CAAC,KAAK,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QAEnD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS;QACpC,CAAC,IAAA,cAAK,EAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAChC,CAAC,IAAA,cAAK,EAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAChC,CAAC,IAAA,cAAK,EAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAEhC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,CAAC,KAAa;QAClB,MAAM,WAAW,GAAG,GAAG,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAEpD,MAAM,GAAG,GAAG,MAAM,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;QAEtC,OAAO,GAAG,aAAH,GAAG,cAAH,GAAG,GAAI,IAAI,CAAC;IACrB,CAAC;IAED,YAAY,CAAC,IAAY;QAEvB,MAAM,GAAG,GAAG,sBAAc,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;QAE/C,IAAI,OAAO,GAAG,KAAK,WAAW,EAAE;YAE9B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;SAClB;aAAM;YAEL,OAAO,CAAC,IAAI,CAAC,6BAA6B,GAAG,IAAI,CAAC,CAAC;SACpD;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,SAAS,CAAC,MAAc;QACtB,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC;QACtB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,UAAU,CAAC,CAAC,GAAG,CAAC;QACd,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC;QACvB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,YAAY;QACV,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;IACvF,CAAC;IAED,aAAa;QACX,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;IACtF,CAAC;IAED,aAAa;QACX,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;IACpF,CAAC;IAED,KAAK;QACH,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC1C,CAAC;IAED,iBAAiB,CAAC,KAAY,EAAE,WAAW,GAAG,GAAG;QAC/C,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;QACpD,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;QACpD,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;QACpD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,iBAAiB,CAAC,KAAY,EAAE,WAAW,GAAG,GAAG;QAC/C,MAAM,WAAW,GAAG,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC;QAE9D,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;QACpD,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;QACpD,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;QAEpD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,oBAAoB,CAAC,WAAmB;QACtC,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QAC1C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,oBAAoB,CAAC,WAAmB;QACtC,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QAC1C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,gBAAgB,CAAC,KAAY;QAC3B,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC3C,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC3C,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC3C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,gBAAgB,CAAC,KAAY;QAC3B,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC3C,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC3C,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC3C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,mBAAmB;QACjB,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAC5B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,mBAAmB;QACjB,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAC5B,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AAvQD,sBAuQC;AAED,MAAa,GAAG;IAKd,YAAY,CAAS,EAAE,CAAS,EAAE,CAAS,EAAE,OAAgB;QAC3D,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1D,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1D,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAE1D,IAAI,IAAA,gBAAO,EAAC,OAAO,CAAC,EAAE;YACpB,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,CAAE,OAAkB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAE,OAAkB,CAAC,CAAC,CAAC;SACjG;aAAM;YACL,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;SAClB;IACH,CAAC;IAED,SAAS;QACP,OAAO,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC;IAC7G,CAAC;IACD,SAAS;QACP,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAC7B,OAAO,GAAG,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,OAAO,GAAG,EAAE,CAAC;IACnH,CAAC;IAED,SAAS;QACP,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAC7B,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,IAAA,kBAAQ,EAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;QAErD,OAAO,GAAG,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,OAAO,GAAG,EAAE,CAAC;IACtG,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC;IAC1B,CAAC;CACF;AAnCD,kBAmCC","file":"Color.js","sourcesContent":["/*\nCopyright (c) 2013, Jason Davies.\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice,\n this list of conditions and the following disclaimer in the documentation\n and/or other materials provided with the distribution.\n\n * The name Jason Davies may not be used to endorse or promote products\n derived from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL JASON DAVIES BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\nPROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\nLIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE\nOR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\nADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n// Mike Bostock, https://github.com/d3/d3-color\n/**\n * 参考 d3-color 实现。用于颜色转化\n * 16进制/rgb 转化为r,g,b, o\n */\nimport { clamp, isArray, isNil, isNumber, isValid } from '../common';\nimport hslToRgb from './hslToRgb';\nimport rgbToHsl from './rgbToHsl';\n\nconst REG_HEX = /^#([0-9a-f]{3,8})$/;\n\nconst DEFAULT_COLORS_OPACITY = {\n transparent: 0xffffff00\n};\n\nexport const DEFAULT_COLORS = {\n aliceblue: 0xf0f8ff,\n antiquewhite: 0xfaebd7,\n aqua: 0x00ffff,\n aquamarine: 0x7fffd4,\n azure: 0xf0ffff,\n beige: 0xf5f5dc,\n bisque: 0xffe4c4,\n black: 0x000000,\n blanchedalmond: 0xffebcd,\n blue: 0x0000ff,\n blueviolet: 0x8a2be2,\n brown: 0xa52a2a,\n burlywood: 0xdeb887,\n cadetblue: 0x5f9ea0,\n chartreuse: 0x7fff00,\n chocolate: 0xd2691e,\n coral: 0xff7f50,\n cornflowerblue: 0x6495ed,\n cornsilk: 0xfff8dc,\n crimson: 0xdc143c,\n cyan: 0x00ffff,\n darkblue: 0x00008b,\n darkcyan: 0x008b8b,\n darkgoldenrod: 0xb8860b,\n darkgray: 0xa9a9a9,\n darkgreen: 0x006400,\n darkgrey: 0xa9a9a9,\n darkkhaki: 0xbdb76b,\n darkmagenta: 0x8b008b,\n darkolivegreen: 0x556b2f,\n darkorange: 0xff8c00,\n darkorchid: 0x9932cc,\n darkred: 0x8b0000,\n darksalmon: 0xe9967a,\n darkseagreen: 0x8fbc8f,\n darkslateblue: 0x483d8b,\n darkslategray: 0x2f4f4f,\n darkslategrey: 0x2f4f4f,\n darkturquoise: 0x00ced1,\n darkviolet: 0x9400d3,\n deeppink: 0xff1493,\n deepskyblue: 0x00bfff,\n dimgray: 0x696969,\n dimgrey: 0x696969,\n dodgerblue: 0x1e90ff,\n firebrick: 0xb22222,\n floralwhite: 0xfffaf0,\n forestgreen: 0x228b22,\n fuchsia: 0xff00ff,\n gainsboro: 0xdcdcdc,\n ghostwhite: 0xf8f8ff,\n gold: 0xffd700,\n goldenrod: 0xdaa520,\n gray: 0x808080,\n green: 0x008000,\n greenyellow: 0xadff2f,\n grey: 0x808080,\n honeydew: 0xf0fff0,\n hotpink: 0xff69b4,\n indianred: 0xcd5c5c,\n indigo: 0x4b0082,\n ivory: 0xfffff0,\n khaki: 0xf0e68c,\n lavender: 0xe6e6fa,\n lavenderblush: 0xfff0f5,\n lawngreen: 0x7cfc00,\n lemonchiffon: 0xfffacd,\n lightblue: 0xadd8e6,\n lightcoral: 0xf08080,\n lightcyan: 0xe0ffff,\n lightgoldenrodyellow: 0xfafad2,\n lightgray: 0xd3d3d3,\n lightgreen: 0x90ee90,\n lightgrey: 0xd3d3d3,\n lightpink: 0xffb6c1,\n lightsalmon: 0xffa07a,\n lightseagreen: 0x20b2aa,\n lightskyblue: 0x87cefa,\n lightslategray: 0x778899,\n lightslategrey: 0x778899,\n lightsteelblue: 0xb0c4de,\n lightyellow: 0xffffe0,\n lime: 0x00ff00,\n limegreen: 0x32cd32,\n linen: 0xfaf0e6,\n magenta: 0xff00ff,\n maroon: 0x800000,\n mediumaquamarine: 0x66cdaa,\n mediumblue: 0x0000cd,\n mediumorchid: 0xba55d3,\n mediumpurple: 0x9370db,\n mediumseagreen: 0x3cb371,\n mediumslateblue: 0x7b68ee,\n mediumspringgreen: 0x00fa9a,\n mediumturquoise: 0x48d1cc,\n mediumvioletred: 0xc71585,\n midnightblue: 0x191970,\n mintcream: 0xf5fffa,\n mistyrose: 0xffe4e1,\n moccasin: 0xffe4b5,\n navajowhite: 0xffdead,\n navy: 0x000080,\n oldlace: 0xfdf5e6,\n olive: 0x808000,\n olivedrab: 0x6b8e23,\n orange: 0xffa500,\n orangered: 0xff4500,\n orchid: 0xda70d6,\n palegoldenrod: 0xeee8aa,\n palegreen: 0x98fb98,\n paleturquoise: 0xafeeee,\n palevioletred: 0xdb7093,\n papayawhip: 0xffefd5,\n peachpuff: 0xffdab9,\n peru: 0xcd853f,\n pink: 0xffc0cb,\n plum: 0xdda0dd,\n powderblue: 0xb0e0e6,\n purple: 0x800080,\n rebeccapurple: 0x663399,\n red: 0xff0000,\n rosybrown: 0xbc8f8f,\n royalblue: 0x4169e1,\n saddlebrown: 0x8b4513,\n salmon: 0xfa8072,\n sandybrown: 0xf4a460,\n seagreen: 0x2e8b57,\n seashell: 0xfff5ee,\n sienna: 0xa0522d,\n silver: 0xc0c0c0,\n skyblue: 0x87ceeb,\n slateblue: 0x6a5acd,\n slategray: 0x708090,\n slategrey: 0x708090,\n snow: 0xfffafa,\n springgreen: 0x00ff7f,\n steelblue: 0x4682b4,\n tan: 0xd2b48c,\n teal: 0x008080,\n thistle: 0xd8bfd8,\n tomato: 0xff6347,\n turquoise: 0x40e0d0,\n violet: 0xee82ee,\n wheat: 0xf5deb3,\n white: 0xffffff,\n whitesmoke: 0xf5f5f5,\n yellow: 0xffff00,\n yellowgreen: 0x9acd32\n};\n\nfunction hex(value: number) {\n value = Math.max(0, Math.min(255, Math.round(value) || 0));\n return (value < 16 ? '0' : '') + value.toString(16);\n}\n\nfunction rgb(value: number | number[]): RGB {\n if (isNumber(value)) {\n return new RGB((value as number) >> 16, ((value as number) >> 8) & 0xff, (value as number) & 0xff, 1);\n } else if (isArray(value)) {\n return new RGB(value[0], value[1], value[2]);\n }\n\n // default return\n return new RGB(255, 255, 255);\n}\n\nfunction rgba(value: number | number[]): RGB {\n if (isNumber(value)) {\n return new RGB(\n (value as number) >>> 24,\n ((value as number) >>> 16) & 0xff,\n ((value as number) >>> 8) & 0xff,\n (value as number) & 0xff\n );\n } else if (isArray(value)) {\n return new RGB(value[0], value[1], value[2], value[3]);\n }\n\n // default return\n return new RGB(255, 255, 255, 1);\n}\n\nfunction SRGBToLinear(c: number) {\n return c < 0.04045 ? c * 0.0773993808 : Math.pow(c * 0.9478672986 + 0.0521327014, 2.4);\n}\n\nfunction LinearToSRGB(c: number) {\n return c < 0.0031308 ? c * 12.92 : 1.055 * Math.pow(c, 0.41666) - 0.055;\n}\n\nconst setHex = (formatValue: string, forceHex?: boolean) => {\n const isHex = REG_HEX.exec(formatValue);\n\n if (forceHex || isHex) {\n const hex = parseInt(isHex[1], 16);\n const hexLength = isHex[1].length;\n // #fff\n if (hexLength === 3) {\n return new RGB(\n ((hex >> 8) & 0xf) + (((hex >> 8) & 0xf) << 4),\n ((hex >> 4) & 0xf) + (((hex >> 4) & 0xf) << 4),\n (hex & 0xf) + ((hex & 0xf) << 4),\n 1\n );\n }\n // #ffffff\n if (hexLength === 6) {\n return rgb(hex);\n }\n // #ffffffaa\n else if (hexLength === 8) {\n return new RGB((hex >> 24) & 0xff, (hex >> 16) & 0xff, (hex >> 8) & 0xff, (hex & 0xff) / 0xff);\n }\n\n return null;\n }\n\n return undefined;\n};\n\nexport class Color {\n color!: RGB;\n\n static Brighter(source: string, b = 1) {\n if (b === 1) {\n return source;\n }\n return new Color(source).brighter(b).toRGBA();\n }\n\n static SetOpacity(source: string, o = 1) {\n if (o === 1) {\n return source;\n }\n return new Color(source).setOpacity(o).toRGBA();\n }\n\n static getColorBrightness(source: string | Color, model: 'hsv' | 'hsl' | 'lum' | 'lum2' | 'lum3' = 'hsl') {\n const color = source instanceof Color ? source : new Color(source);\n switch (model) {\n case 'hsv':\n return color.getHSVBrightness();\n case 'hsl':\n return color.getHSLBrightness();\n case 'lum':\n return color.getLuminance();\n case 'lum2':\n return color.getLuminance2();\n case 'lum3':\n return color.getLuminance3();\n default:\n return color.getHSVBrightness();\n }\n }\n\n static parseColorString(value: string) {\n // case0: transparent\n if (isValid(DEFAULT_COLORS_OPACITY[value])) {\n return rgba(DEFAULT_COLORS_OPACITY[value]);\n }\n\n // case1: 简写 ['blue','red']\n if (isValid(DEFAULT_COLORS[value])) {\n return rgb(DEFAULT_COLORS[value]);\n }\n const formatValue = `${value}`.trim().toLowerCase();\n\n // case2: 16进制\n const hexRes = setHex(formatValue);\n\n if (hexRes !== undefined) {\n return hexRes;\n }\n\n // case3 : rgb\n if (/^(rgb|RGB|rgba|RGBA)/.test(formatValue)) {\n const aColor = formatValue.replace(/(?:\\(|\\)|rgba|RGBA|rgb|RGB)*/g, '').split(',');\n return new RGB(parseInt(aColor[0], 10), parseInt(aColor[1], 10), parseInt(aColor[2], 10), parseFloat(aColor[3]));\n }\n\n // case4: hsl\n if (/^(hsl|HSL|hsla|HSLA)/.test(formatValue)) {\n const aColor = formatValue.replace(/(?:\\(|\\)|hsla|HSLA|hsl|HSL)*/g, '').split(',');\n const rgb = hslToRgb(parseInt(aColor[0], 10), parseInt(aColor[1], 10), parseInt(aColor[2], 10));\n\n return new RGB(rgb.r, rgb.g, rgb.b, parseFloat(aColor[3]));\n }\n\n return;\n }\n\n constructor(value: string) {\n const color = Color.parseColorString(value);\n\n // case0: transparent\n if (color) {\n this.color = color;\n } else {\n // default: 白色\n console.warn(`Warn: 传入${value}无法解析为Color`);\n this.color = new RGB(255, 255, 255);\n }\n }\n toRGBA() {\n return this.color.formatRgb();\n }\n toString() {\n return this.color.formatRgb();\n }\n toHex() {\n return this.color.formatHex();\n }\n toHsl() {\n return this.color.formatHsl();\n }\n\n brighter(k: number) {\n const { r, g, b } = this.color;\n this.color.r = Math.max(0, Math.min(255, Math.floor(r * k)));\n this.color.g = Math.max(0, Math.min(255, Math.floor(g * k)));\n this.color.b = Math.max(0, Math.min(255, Math.floor(b * k)));\n return this;\n }\n\n add(color: Color) {\n const { r, g, b } = this.color;\n this.color.r += Math.min(255, r + color.color.r);\n this.color.g += Math.min(255, g + color.color.g);\n this.color.b += Math.min(255, b + color.color.b);\n return this;\n }\n\n sub(color: Color) {\n this.color.r = Math.max(0, this.color.r - color.color.r);\n this.color.g = Math.max(0, this.color.g - color.color.g);\n this.color.b = Math.max(0, this.color.b - color.color.b);\n return this;\n }\n\n multiply(color: Color) {\n const { r, g, b } = this.color;\n this.color.r = Math.max(0, Math.min(255, Math.floor(r * color.color.r)));\n this.color.g = Math.max(0, Math.min(255, Math.floor(g * color.color.g)));\n this.color.b = Math.max(0, Math.min(255, Math.floor(b * color.color.b)));\n return this;\n }\n\n // todo: 这里亮度计算都没考虑alpha通道\n getHSVBrightness() {\n return Math.max(this.color.r, this.color.g, this.color.b) / 255;\n }\n\n getHSLBrightness() {\n return (\n (Math.max(this.color.r, this.color.g, this.color.b) / 255 +\n Math.min(this.color.r, this.color.g, this.color.b) / 255) *\n 0.5\n );\n }\n\n setHsl(h?: number | null | undefined, s?: number | null | undefined, l?: number | null | undefined) {\n const opacity = this.color.opacity;\n const hsl = rgbToHsl(this.color.r, this.color.g, this.color.b);\n\n const rgb = hslToRgb(\n isNil(h) ? hsl.h : clamp(h as number, 0, 360),\n isNil(s) ? hsl.s : s >= 0 && s <= 1 ? s * 100 : s,\n isNil(l) ? hsl.l : l <= 1 && l >= 0 ? l * 100 : l\n );\n this.color = new RGB(rgb.r, rgb.g, rgb.b, opacity);\n\n return this;\n }\n\n setRGB(r: number, g: number, b: number) {\n !isNil(r) && (this.color.r = r);\n !isNil(g) && (this.color.g = g);\n !isNil(b) && (this.color.b = b);\n\n return this;\n }\n\n setHex(value: string) {\n const formatValue = `${value}`.trim().toLowerCase();\n\n const res = setHex(formatValue, true);\n\n return res ?? this;\n }\n\n setColorName(name: string) {\n // color keywords\n const hex = DEFAULT_COLORS[name.toLowerCase()];\n\n if (typeof hex !== 'undefined') {\n // red\n this.setHex(hex);\n } else {\n // unknown color\n console.warn('THREE.Color: Unknown color ' + name);\n }\n\n return this;\n }\n\n setScalar(scalar: number) {\n this.color.r = scalar;\n this.color.g = scalar;\n this.color.b = scalar;\n return this;\n }\n\n setOpacity(o = 1) {\n this.color.opacity = o;\n return this;\n }\n\n getLuminance() {\n return (0.2126 * this.color.r + 0.7152 * this.color.g + 0.0722 * this.color.b) / 255;\n }\n\n getLuminance2() {\n return (0.2627 * this.color.r + 0.678 * this.color.g + 0.0593 * this.color.b) / 255;\n }\n\n getLuminance3() {\n return (0.299 * this.color.r + 0.587 * this.color.g + 0.114 * this.color.b) / 255;\n }\n\n clone() {\n return new Color(this.color.toString());\n }\n\n copyGammaToLinear(color: Color, gammaFactor = 2.0) {\n this.color.r = Math.pow(color.color.r, gammaFactor);\n this.color.g = Math.pow(color.color.g, gammaFactor);\n this.color.b = Math.pow(color.color.b, gammaFactor);\n return this;\n }\n\n copyLinearToGamma(color: Color, gammaFactor = 2.0) {\n const safeInverse = gammaFactor > 0 ? 1.0 / gammaFactor : 1.0;\n\n this.color.r = Math.pow(color.color.r, safeInverse);\n this.color.g = Math.pow(color.color.g, safeInverse);\n this.color.b = Math.pow(color.color.b, safeInverse);\n\n return this;\n }\n\n convertGammaToLinear(gammaFactor: number) {\n this.copyGammaToLinear(this, gammaFactor);\n return this;\n }\n\n convertLinearToGamma(gammaFactor: number) {\n this.copyLinearToGamma(this, gammaFactor);\n return this;\n }\n\n copySRGBToLinear(color: Color) {\n this.color.r = SRGBToLinear(color.color.r);\n this.color.g = SRGBToLinear(color.color.g);\n this.color.b = SRGBToLinear(color.color.b);\n return this;\n }\n\n copyLinearToSRGB(color: Color) {\n this.color.r = LinearToSRGB(color.color.r);\n this.color.g = LinearToSRGB(color.color.g);\n this.color.b = LinearToSRGB(color.color.b);\n return this;\n }\n\n convertSRGBToLinear() {\n this.copySRGBToLinear(this);\n return this;\n }\n\n convertLinearToSRGB() {\n this.copyLinearToSRGB(this);\n return this;\n }\n}\n\nexport class RGB {\n r: number;\n g: number;\n b: number;\n opacity: number;\n constructor(r: number, g: number, b: number, opacity?: number) {\n this.r = isNaN(+r) ? 255 : Math.max(0, Math.min(255, +r));\n this.g = isNaN(+g) ? 255 : Math.max(0, Math.min(255, +g));\n this.b = isNaN(+b) ? 255 : Math.max(0, Math.min(255, +b));\n\n if (isValid(opacity)) {\n this.opacity = isNaN(+(opacity as number)) ? 1 : Math.max(0, Math.min(1, +(opacity as number)));\n } else {\n this.opacity = 1;\n }\n }\n // 转为16进制\n formatHex() {\n return `#${hex(this.r) + hex(this.g) + hex(this.b) + (this.opacity === 1 ? '' : hex(this.opacity * 255))}`;\n }\n formatRgb() {\n const opacity = this.opacity;\n return `${opacity === 1 ? 'rgb(' : 'rgba('}${this.r},${this.g},${this.b}${opacity === 1 ? ')' : `,${opacity})`}`;\n }\n\n formatHsl() {\n const opacity = this.opacity;\n const { h, s, l } = rgbToHsl(this.r, this.g, this.b);\n\n return `${opacity === 1 ? 'hsl(' : 'hsla('}${h},${s}%,${l}%${opacity === 1 ? ')' : `,${opacity})`}`;\n }\n // 转为16进制\n toString() {\n return this.formatHex();\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/color/Color.ts"],"names":[],"mappings":"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","file":"Color.js","sourcesContent":["/*\nCopyright (c) 2013, Jason Davies.\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice,\n this list of conditions and the following disclaimer in the documentation\n and/or other materials provided with the distribution.\n\n * The name Jason Davies may not be used to endorse or promote products\n derived from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL JASON DAVIES BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\nPROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\nLIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE\nOR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\nADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n// Mike Bostock, https://github.com/d3/d3-color\n/**\n * 参考 d3-color 实现。用于颜色转化\n * 16进制/rgb 转化为r,g,b, o\n */\nimport { clamp, isArray, isNil, isNumber, isValid } from '../common';\nimport hslToRgb from './hslToRgb';\nimport rgbToHsl from './rgbToHsl';\n\nconst REG_HEX = /^#([0-9a-f]{3,8})$/;\n\nconst DEFAULT_COLORS_OPACITY = {\n transparent: 0xffffff00\n};\n\nexport const DEFAULT_COLORS = {\n aliceblue: 0xf0f8ff,\n antiquewhite: 0xfaebd7,\n aqua: 0x00ffff,\n aquamarine: 0x7fffd4,\n azure: 0xf0ffff,\n beige: 0xf5f5dc,\n bisque: 0xffe4c4,\n black: 0x000000,\n blanchedalmond: 0xffebcd,\n blue: 0x0000ff,\n blueviolet: 0x8a2be2,\n brown: 0xa52a2a,\n burlywood: 0xdeb887,\n cadetblue: 0x5f9ea0,\n chartreuse: 0x7fff00,\n chocolate: 0xd2691e,\n coral: 0xff7f50,\n cornflowerblue: 0x6495ed,\n cornsilk: 0xfff8dc,\n crimson: 0xdc143c,\n cyan: 0x00ffff,\n darkblue: 0x00008b,\n darkcyan: 0x008b8b,\n darkgoldenrod: 0xb8860b,\n darkgray: 0xa9a9a9,\n darkgreen: 0x006400,\n darkgrey: 0xa9a9a9,\n darkkhaki: 0xbdb76b,\n darkmagenta: 0x8b008b,\n darkolivegreen: 0x556b2f,\n darkorange: 0xff8c00,\n darkorchid: 0x9932cc,\n darkred: 0x8b0000,\n darksalmon: 0xe9967a,\n darkseagreen: 0x8fbc8f,\n darkslateblue: 0x483d8b,\n darkslategray: 0x2f4f4f,\n darkslategrey: 0x2f4f4f,\n darkturquoise: 0x00ced1,\n darkviolet: 0x9400d3,\n deeppink: 0xff1493,\n deepskyblue: 0x00bfff,\n dimgray: 0x696969,\n dimgrey: 0x696969,\n dodgerblue: 0x1e90ff,\n firebrick: 0xb22222,\n floralwhite: 0xfffaf0,\n forestgreen: 0x228b22,\n fuchsia: 0xff00ff,\n gainsboro: 0xdcdcdc,\n ghostwhite: 0xf8f8ff,\n gold: 0xffd700,\n goldenrod: 0xdaa520,\n gray: 0x808080,\n green: 0x008000,\n greenyellow: 0xadff2f,\n grey: 0x808080,\n honeydew: 0xf0fff0,\n hotpink: 0xff69b4,\n indianred: 0xcd5c5c,\n indigo: 0x4b0082,\n ivory: 0xfffff0,\n khaki: 0xf0e68c,\n lavender: 0xe6e6fa,\n lavenderblush: 0xfff0f5,\n lawngreen: 0x7cfc00,\n lemonchiffon: 0xfffacd,\n lightblue: 0xadd8e6,\n lightcoral: 0xf08080,\n lightcyan: 0xe0ffff,\n lightgoldenrodyellow: 0xfafad2,\n lightgray: 0xd3d3d3,\n lightgreen: 0x90ee90,\n lightgrey: 0xd3d3d3,\n lightpink: 0xffb6c1,\n lightsalmon: 0xffa07a,\n lightseagreen: 0x20b2aa,\n lightskyblue: 0x87cefa,\n lightslategray: 0x778899,\n lightslategrey: 0x778899,\n lightsteelblue: 0xb0c4de,\n lightyellow: 0xffffe0,\n lime: 0x00ff00,\n limegreen: 0x32cd32,\n linen: 0xfaf0e6,\n magenta: 0xff00ff,\n maroon: 0x800000,\n mediumaquamarine: 0x66cdaa,\n mediumblue: 0x0000cd,\n mediumorchid: 0xba55d3,\n mediumpurple: 0x9370db,\n mediumseagreen: 0x3cb371,\n mediumslateblue: 0x7b68ee,\n mediumspringgreen: 0x00fa9a,\n mediumturquoise: 0x48d1cc,\n mediumvioletred: 0xc71585,\n midnightblue: 0x191970,\n mintcream: 0xf5fffa,\n mistyrose: 0xffe4e1,\n moccasin: 0xffe4b5,\n navajowhite: 0xffdead,\n navy: 0x000080,\n oldlace: 0xfdf5e6,\n olive: 0x808000,\n olivedrab: 0x6b8e23,\n orange: 0xffa500,\n orangered: 0xff4500,\n orchid: 0xda70d6,\n palegoldenrod: 0xeee8aa,\n palegreen: 0x98fb98,\n paleturquoise: 0xafeeee,\n palevioletred: 0xdb7093,\n papayawhip: 0xffefd5,\n peachpuff: 0xffdab9,\n peru: 0xcd853f,\n pink: 0xffc0cb,\n plum: 0xdda0dd,\n powderblue: 0xb0e0e6,\n purple: 0x800080,\n rebeccapurple: 0x663399,\n red: 0xff0000,\n rosybrown: 0xbc8f8f,\n royalblue: 0x4169e1,\n saddlebrown: 0x8b4513,\n salmon: 0xfa8072,\n sandybrown: 0xf4a460,\n seagreen: 0x2e8b57,\n seashell: 0xfff5ee,\n sienna: 0xa0522d,\n silver: 0xc0c0c0,\n skyblue: 0x87ceeb,\n slateblue: 0x6a5acd,\n slategray: 0x708090,\n slategrey: 0x708090,\n snow: 0xfffafa,\n springgreen: 0x00ff7f,\n steelblue: 0x4682b4,\n tan: 0xd2b48c,\n teal: 0x008080,\n thistle: 0xd8bfd8,\n tomato: 0xff6347,\n turquoise: 0x40e0d0,\n violet: 0xee82ee,\n wheat: 0xf5deb3,\n white: 0xffffff,\n whitesmoke: 0xf5f5f5,\n yellow: 0xffff00,\n yellowgreen: 0x9acd32\n};\n\nfunction hex(value: number) {\n value = Math.max(0, Math.min(255, Math.round(value) || 0));\n return (value < 16 ? '0' : '') + value.toString(16);\n}\n\nfunction rgb(value: number | number[]): RGB {\n if (isNumber(value)) {\n return new RGB((value as number) >> 16, ((value as number) >> 8) & 0xff, (value as number) & 0xff, 1);\n } else if (isArray(value)) {\n return new RGB(value[0], value[1], value[2]);\n }\n\n // default return\n return new RGB(255, 255, 255);\n}\n\nfunction rgba(value: number | number[]): RGB {\n if (isNumber(value)) {\n return new RGB(\n (value as number) >>> 24,\n ((value as number) >>> 16) & 0xff,\n ((value as number) >>> 8) & 0xff,\n (value as number) & 0xff\n );\n } else if (isArray(value)) {\n return new RGB(value[0], value[1], value[2], value[3]);\n }\n\n // default return\n return new RGB(255, 255, 255, 1);\n}\n\nfunction SRGBToLinear(c: number) {\n return c < 0.04045 ? c * 0.0773993808 : Math.pow(c * 0.9478672986 + 0.0521327014, 2.4);\n}\n\nfunction LinearToSRGB(c: number) {\n return c < 0.0031308 ? c * 12.92 : 1.055 * Math.pow(c, 0.41666) - 0.055;\n}\n\nconst setHex = (formatValue: string, forceHex?: boolean) => {\n const isHex = REG_HEX.exec(formatValue);\n\n if (forceHex || isHex) {\n const hex = parseInt(isHex[1], 16);\n const hexLength = isHex[1].length;\n // #fff\n if (hexLength === 3) {\n return new RGB(\n ((hex >> 8) & 0xf) + (((hex >> 8) & 0xf) << 4),\n ((hex >> 4) & 0xf) + (((hex >> 4) & 0xf) << 4),\n (hex & 0xf) + ((hex & 0xf) << 4),\n 1\n );\n }\n // #ffffff\n if (hexLength === 6) {\n return rgb(hex);\n }\n // #ffffffaa\n else if (hexLength === 8) {\n return new RGB((hex >> 24) & 0xff, (hex >> 16) & 0xff, (hex >> 8) & 0xff, (hex & 0xff) / 0xff);\n }\n\n return null;\n }\n\n return undefined;\n};\n\nexport class Color {\n color!: RGB;\n\n static Brighter(source: string, b = 1) {\n if (b === 1) {\n return source;\n }\n return new Color(source).brighter(b).toRGBA();\n }\n\n static SetOpacity(source: string, o = 1) {\n if (o === 1) {\n return source;\n }\n return new Color(source).setOpacity(o).toRGBA();\n }\n\n static getColorBrightness(source: string | Color, model: 'hsv' | 'hsl' | 'lum' | 'lum2' | 'lum3' | 'wcag' = 'hsl') {\n const color = source instanceof Color ? source : new Color(source);\n switch (model) {\n case 'hsv':\n return color.getHSVBrightness();\n case 'hsl':\n return color.getHSLBrightness();\n case 'lum':\n return color.getLuminance();\n case 'lum2':\n return color.getLuminance2();\n case 'lum3':\n return color.getLuminance3();\n case 'wcag':\n return color.getLuminanceWCAG();\n default:\n return color.getHSVBrightness();\n }\n }\n\n static parseColorString(value: string) {\n // case0: transparent\n if (isValid(DEFAULT_COLORS_OPACITY[value])) {\n return rgba(DEFAULT_COLORS_OPACITY[value]);\n }\n\n // case1: 简写 ['blue','red']\n if (isValid(DEFAULT_COLORS[value])) {\n return rgb(DEFAULT_COLORS[value]);\n }\n const formatValue = `${value}`.trim().toLowerCase();\n\n // case2: 16进制\n const hexRes = setHex(formatValue);\n\n if (hexRes !== undefined) {\n return hexRes;\n }\n\n // case3 : rgb\n if (/^(rgb|RGB|rgba|RGBA)/.test(formatValue)) {\n const aColor = formatValue.replace(/(?:\\(|\\)|rgba|RGBA|rgb|RGB)*/g, '').split(',');\n return new RGB(parseInt(aColor[0], 10), parseInt(aColor[1], 10), parseInt(aColor[2], 10), parseFloat(aColor[3]));\n }\n\n // case4: hsl\n if (/^(hsl|HSL|hsla|HSLA)/.test(formatValue)) {\n const aColor = formatValue.replace(/(?:\\(|\\)|hsla|HSLA|hsl|HSL)*/g, '').split(',');\n const rgb = hslToRgb(parseInt(aColor[0], 10), parseInt(aColor[1], 10), parseInt(aColor[2], 10));\n\n return new RGB(rgb.r, rgb.g, rgb.b, parseFloat(aColor[3]));\n }\n\n return;\n }\n\n constructor(value: string) {\n const color = Color.parseColorString(value);\n\n // case0: transparent\n if (color) {\n this.color = color;\n } else {\n // default: 白色\n console.warn(`Warn: 传入${value}无法解析为Color`);\n this.color = new RGB(255, 255, 255);\n }\n }\n toRGBA() {\n return this.color.formatRgb();\n }\n toString() {\n return this.color.formatRgb();\n }\n toHex() {\n return this.color.formatHex();\n }\n toHsl() {\n return this.color.formatHsl();\n }\n\n brighter(k: number) {\n const { r, g, b } = this.color;\n this.color.r = Math.max(0, Math.min(255, Math.floor(r * k)));\n this.color.g = Math.max(0, Math.min(255, Math.floor(g * k)));\n this.color.b = Math.max(0, Math.min(255, Math.floor(b * k)));\n return this;\n }\n\n add(color: Color) {\n const { r, g, b } = this.color;\n this.color.r += Math.min(255, r + color.color.r);\n this.color.g += Math.min(255, g + color.color.g);\n this.color.b += Math.min(255, b + color.color.b);\n return this;\n }\n\n sub(color: Color) {\n this.color.r = Math.max(0, this.color.r - color.color.r);\n this.color.g = Math.max(0, this.color.g - color.color.g);\n this.color.b = Math.max(0, this.color.b - color.color.b);\n return this;\n }\n\n multiply(color: Color) {\n const { r, g, b } = this.color;\n this.color.r = Math.max(0, Math.min(255, Math.floor(r * color.color.r)));\n this.color.g = Math.max(0, Math.min(255, Math.floor(g * color.color.g)));\n this.color.b = Math.max(0, Math.min(255, Math.floor(b * color.color.b)));\n return this;\n }\n\n // todo: 这里亮度计算都没考虑alpha通道\n getHSVBrightness() {\n return Math.max(this.color.r, this.color.g, this.color.b) / 255;\n }\n\n getHSLBrightness() {\n return (\n (Math.max(this.color.r, this.color.g, this.color.b) / 255 +\n Math.min(this.color.r, this.color.g, this.color.b) / 255) *\n 0.5\n );\n }\n\n setHsl(h?: number | null | undefined, s?: number | null | undefined, l?: number | null | undefined) {\n const opacity = this.color.opacity;\n const hsl = rgbToHsl(this.color.r, this.color.g, this.color.b);\n\n const rgb = hslToRgb(\n isNil(h) ? hsl.h : clamp(h as number, 0, 360),\n isNil(s) ? hsl.s : s >= 0 && s <= 1 ? s * 100 : s,\n isNil(l) ? hsl.l : l <= 1 && l >= 0 ? l * 100 : l\n );\n this.color = new RGB(rgb.r, rgb.g, rgb.b, opacity);\n\n return this;\n }\n\n setRGB(r: number, g: number, b: number) {\n !isNil(r) && (this.color.r = r);\n !isNil(g) && (this.color.g = g);\n !isNil(b) && (this.color.b = b);\n\n return this;\n }\n\n setHex(value: string) {\n const formatValue = `${value}`.trim().toLowerCase();\n\n const res = setHex(formatValue, true);\n\n return res ?? this;\n }\n\n setColorName(name: string) {\n // color keywords\n const hex = DEFAULT_COLORS[name.toLowerCase()];\n\n if (typeof hex !== 'undefined') {\n // red\n this.setHex(hex);\n } else {\n // unknown color\n console.warn('THREE.Color: Unknown color ' + name);\n }\n\n return this;\n }\n\n setScalar(scalar: number) {\n this.color.r = scalar;\n this.color.g = scalar;\n this.color.b = scalar;\n return this;\n }\n\n setOpacity(o = 1) {\n this.color.opacity = o;\n return this;\n }\n\n getLuminance() {\n return (0.2126 * this.color.r + 0.7152 * this.color.g + 0.0722 * this.color.b) / 255;\n }\n\n getLuminance2() {\n return (0.2627 * this.color.r + 0.678 * this.color.g + 0.0593 * this.color.b) / 255;\n }\n\n getLuminance3() {\n return (0.299 * this.color.r + 0.587 * this.color.g + 0.114 * this.color.b) / 255;\n }\n\n /**\n * https://www.w3.org/TR/WCAG21/#use-of-color\n */\n getLuminanceWCAG() {\n const RsRGB = this.color.r / 255;\n const GsRGB = this.color.g / 255;\n const BsRGB = this.color.b / 255;\n let R;\n let G;\n let B;\n if (RsRGB <= 0.03928) {\n R = RsRGB / 12.92;\n } else {\n R = Math.pow((RsRGB + 0.055) / 1.055, 2.4);\n }\n if (GsRGB <= 0.03928) {\n G = GsRGB / 12.92;\n } else {\n G = Math.pow((GsRGB + 0.055) / 1.055, 2.4);\n }\n if (BsRGB <= 0.03928) {\n B = BsRGB / 12.92;\n } else {\n B = Math.pow((BsRGB + 0.055) / 1.055, 2.4);\n }\n const L = 0.2126 * R + 0.7152 * G + 0.0722 * B;\n return L;\n }\n\n clone() {\n return new Color(this.color.toString());\n }\n\n copyGammaToLinear(color: Color, gammaFactor = 2.0) {\n this.color.r = Math.pow(color.color.r, gammaFactor);\n this.color.g = Math.pow(color.color.g, gammaFactor);\n this.color.b = Math.pow(color.color.b, gammaFactor);\n return this;\n }\n\n copyLinearToGamma(color: Color, gammaFactor = 2.0) {\n const safeInverse = gammaFactor > 0 ? 1.0 / gammaFactor : 1.0;\n\n this.color.r = Math.pow(color.color.r, safeInverse);\n this.color.g = Math.pow(color.color.g, safeInverse);\n this.color.b = Math.pow(color.color.b, safeInverse);\n\n return this;\n }\n\n convertGammaToLinear(gammaFactor: number) {\n this.copyGammaToLinear(this, gammaFactor);\n return this;\n }\n\n convertLinearToGamma(gammaFactor: number) {\n this.copyLinearToGamma(this, gammaFactor);\n return this;\n }\n\n copySRGBToLinear(color: Color) {\n this.color.r = SRGBToLinear(color.color.r);\n this.color.g = SRGBToLinear(color.color.g);\n this.color.b = SRGBToLinear(color.color.b);\n return this;\n }\n\n copyLinearToSRGB(color: Color) {\n this.color.r = LinearToSRGB(color.color.r);\n this.color.g = LinearToSRGB(color.color.g);\n this.color.b = LinearToSRGB(color.color.b);\n return this;\n }\n\n convertSRGBToLinear() {\n this.copySRGBToLinear(this);\n return this;\n }\n\n convertLinearToSRGB() {\n this.copyLinearToSRGB(this);\n return this;\n }\n}\n\nexport class RGB {\n r: number;\n g: number;\n b: number;\n opacity: number;\n constructor(r: number, g: number, b: number, opacity?: number) {\n this.r = isNaN(+r) ? 255 : Math.max(0, Math.min(255, +r));\n this.g = isNaN(+g) ? 255 : Math.max(0, Math.min(255, +g));\n this.b = isNaN(+b) ? 255 : Math.max(0, Math.min(255, +b));\n\n if (isValid(opacity)) {\n this.opacity = isNaN(+(opacity as number)) ? 1 : Math.max(0, Math.min(1, +(opacity as number)));\n } else {\n this.opacity = 1;\n }\n }\n // 转为16进制\n formatHex() {\n return `#${hex(this.r) + hex(this.g) + hex(this.b) + (this.opacity === 1 ? '' : hex(this.opacity * 255))}`;\n }\n formatRgb() {\n const opacity = this.opacity;\n return `${opacity === 1 ? 'rgb(' : 'rgba('}${this.r},${this.g},${this.b}${opacity === 1 ? ')' : `,${opacity})`}`;\n }\n\n formatHsl() {\n const opacity = this.opacity;\n const { h, s, l } = rgbToHsl(this.r, this.g, this.b);\n\n return `${opacity === 1 ? 'hsl(' : 'hsla('}${h},${s}%,${l}%${opacity === 1 ? ')' : `,${opacity})`}`;\n }\n // 转为16进制\n toString() {\n return this.formatHex();\n }\n}\n"]}
@@ -37,6 +37,7 @@ export interface IBounds {
37
37
  export type IAABBBounds = IBounds;
38
38
  export interface IOBBBounds extends IBounds {
39
39
  angle: number;
40
+ getRotatedCorners: () => IPointLike[];
40
41
  }
41
42
  export declare function transformBoundsWithMatrix(out: IBounds, bounds: IBounds, matrix: IMatrix): IBounds;
42
43
  export declare function transformBounds(bounds: IBounds, x: number, y: number, scaleX: number, scaleY: number, angle: number, rotateCenter?: [number, number]): void;
@@ -82,4 +83,5 @@ export declare class OBBBounds extends Bounds {
82
83
  intersects(b: OBBBounds): boolean;
83
84
  setValue(x1?: number, y1?: number, x2?: number, y2?: number, angle?: number): Bounds;
84
85
  clone(): OBBBounds;
86
+ getRotatedCorners(): IPointLike[];
85
87
  }
@@ -147,6 +147,25 @@ class OBBBounds extends Bounds {
147
147
  clone() {
148
148
  return new OBBBounds(this);
149
149
  }
150
+ getRotatedCorners() {
151
+ const originPoint = {
152
+ x: (this.x1 + this.x2) / 2,
153
+ y: (this.y1 + this.y2) / 2
154
+ };
155
+ return [ (0, graphics_1.rotatePoint)({
156
+ x: this.x1,
157
+ y: this.y1
158
+ }, this.angle, originPoint), (0, graphics_1.rotatePoint)({
159
+ x: this.x2,
160
+ y: this.y1
161
+ }, this.angle, originPoint), (0, graphics_1.rotatePoint)({
162
+ x: this.x1,
163
+ y: this.y2
164
+ }, this.angle, originPoint), (0, graphics_1.rotatePoint)({
165
+ x: this.x2,
166
+ y: this.y2
167
+ }, this.angle, originPoint) ];
168
+ }
150
169
  }
151
170
 
152
171
  exports.OBBBounds = OBBBounds;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/data-structure/bounds.ts"],"names":[],"mappings":"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","file":"bounds.js","sourcesContent":["import { isArray } from '../common';\nimport { isRotateAABBIntersect } from '../graphics';\nimport type { vec4, vec8 } from '../math';\nimport { abs, epsilon } from '../math';\nimport type { IMatrix } from './matrix';\nimport type { IPointLike } from './point';\n\nexport type IBoundsLike = Pick<IBounds, 'x1' | 'y1' | 'x2' | 'y2'>;\nexport type IAABBBoundsLike = IBoundsLike;\nexport type IOBBBoundsLike = Pick<IOBBBounds, 'x1' | 'y1' | 'x2' | 'y2' | 'angle'>;\n\nexport interface IBounds {\n x1: number;\n y1: number;\n x2: number;\n y2: number;\n clone: () => IBounds;\n clear: () => IBounds;\n empty: () => boolean;\n equals: (b: IBounds) => boolean;\n set: (x1: number, y1: number, x2: number, y2: number) => IBounds;\n setValue: (x1: number, y1: number, x2: number, y2: number) => IBounds;\n add: (x: number, y: number) => IBounds;\n expand: (d: number) => IBounds;\n round: () => IBounds;\n translate: (dx: number, dy: number) => IBounds;\n rotate: (angle: number, x: number, y: number) => IBounds;\n scale: (sx: number, sy: number, x: number, y: number) => IBounds;\n /**\n * 并集\n * @param b\n * @returns\n */\n union: (b: IBoundsLike) => IBounds;\n /**\n * 交集\n * @param b\n * @returns\n */\n intersect: (b: IBoundsLike) => IBounds;\n /**\n * 是否包含b\n * @param b\n * @returns\n */\n encloses: (b: IBoundsLike) => boolean;\n /**\n * 是否共边\n * @param b\n * @returns\n */\n alignsWith: (b: IBoundsLike) => boolean;\n /**\n * 是否相交\n * @param b\n * @returns\n */\n intersects: (b: IBoundsLike) => boolean;\n /**\n * 是否包含\n * @param x\n * @param y\n * @returns\n */\n contains: (x: number, y: number) => boolean;\n containsPoint: (p: IPointLike) => boolean;\n width: () => number;\n height: () => number;\n scaleX: (s: number) => IBounds;\n scaleY: (s: number) => IBounds;\n\n copy: (b: IBoundsLike) => IBounds;\n\n transformWithMatrix: (matrix: IMatrix) => IBounds;\n}\n\nexport type IAABBBounds = IBounds;\n\nexport interface IOBBBounds extends IBounds {\n angle: number;\n}\n\nexport function transformBoundsWithMatrix(out: IBounds, bounds: IBounds, matrix: IMatrix): IBounds {\n const { x1, y1, x2, y2 } = bounds;\n // 如果没有旋转和缩放,那就直接translate\n if (matrix.onlyTranslate()) {\n if (out !== bounds) {\n out.setValue(bounds.x1, bounds.y1, bounds.x2, bounds.y2);\n }\n out.translate(matrix.e, matrix.f);\n return bounds;\n }\n out.clear();\n out.add(matrix.a * x1 + matrix.c * y1 + matrix.e, matrix.b * x1 + matrix.d * y1 + matrix.f);\n out.add(matrix.a * x2 + matrix.c * y1 + matrix.e, matrix.b * x2 + matrix.d * y1 + matrix.f);\n out.add(matrix.a * x2 + matrix.c * y2 + matrix.e, matrix.b * x2 + matrix.d * y2 + matrix.f);\n out.add(matrix.a * x1 + matrix.c * y2 + matrix.e, matrix.b * x1 + matrix.d * y2 + matrix.f);\n return bounds;\n}\n\n/**\n * 依据graphic的属性对bounds进行变换\n * @param bounds\n * @param x\n * @param y\n * @param scaleX\n * @param scaleY\n * @param angle\n * @param rotateCenter\n */\nexport function transformBounds(\n bounds: IBounds,\n x: number,\n y: number,\n scaleX: number,\n scaleY: number,\n angle: number,\n rotateCenter?: [number, number]\n) {\n if (abs(scaleX) <= epsilon || abs(scaleY) <= epsilon) {\n return;\n }\n\n scaleX !== 1 && bounds.scaleX(scaleX);\n scaleY !== 1 && bounds.scaleY(scaleY);\n\n if (isFinite(angle) && Math.abs(angle) > epsilon) {\n let rx = 0;\n let ry = 0;\n if (rotateCenter !== undefined) {\n rx = rotateCenter[0];\n ry = rotateCenter[1];\n }\n bounds.rotate(angle, rx, ry);\n }\n\n bounds.translate(x, y);\n}\n\n/**\nCopyright (c) 2015-2021, University of Washington Interactive Data Lab\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n1. Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n2. Redistributions in binary form must reproduce the above copyright notice,\n this list of conditions and the following disclaimer in the documentation\n and/or other materials provided with the distribution.\n\n3. Neither the name of the copyright holder nor the names of its contributors\n may be used to endorse or promote products derived from this software\n without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE\nFOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\nDAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\nSERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\nOR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n// 基于Vega的Bounds重构\n// https://github.com/vega/vega/blob/825bfaba6ccfe3306183df22b8c955a07bb30714/packages/vega-scenegraph/src/Bounds.js\nexport class Bounds implements IBounds {\n // 默认初始值是Number.MAX_VALUE\n x1: number;\n y1: number;\n x2: number;\n y2: number;\n\n constructor(bounds?: Bounds) {\n if (bounds) {\n this.setValue(bounds.x1, bounds.y1, bounds.x2, bounds.y2);\n } else {\n this.clear();\n }\n }\n\n clone() {\n return new Bounds(this);\n }\n\n clear(): Bounds {\n this.x1 = +Number.MAX_VALUE;\n this.y1 = +Number.MAX_VALUE;\n this.x2 = -Number.MAX_VALUE;\n this.y2 = -Number.MAX_VALUE;\n return this;\n }\n empty(): boolean {\n return (\n this.x1 === +Number.MAX_VALUE &&\n this.y1 === +Number.MAX_VALUE &&\n this.x2 === -Number.MAX_VALUE &&\n this.y2 === -Number.MAX_VALUE\n );\n }\n equals(b: IBoundsLike): boolean {\n return this.x1 === b.x1 && this.y1 === b.y1 && this.x2 === b.x2 && this.y2 === b.y2;\n }\n setValue(x1: number = 0, y1: number = 0, x2: number = 0, y2: number = 0): Bounds {\n this.x1 = x1;\n this.y1 = y1;\n this.x2 = x2;\n this.y2 = y2;\n return this;\n }\n set(x1: number = 0, y1: number = 0, x2: number = 0, y2: number = 0): Bounds {\n if (x2 < x1) {\n this.x2 = x1;\n this.x1 = x2;\n } else {\n this.x1 = x1;\n this.x2 = x2;\n }\n if (y2 < y1) {\n this.y2 = y1;\n this.y1 = y2;\n } else {\n this.y1 = y1;\n this.y2 = y2;\n }\n return this;\n }\n add(x: number = 0, y: number = 0): Bounds {\n if (x < this.x1) {\n this.x1 = x;\n }\n if (y < this.y1) {\n this.y1 = y;\n }\n if (x > this.x2) {\n this.x2 = x;\n }\n if (y > this.y2) {\n this.y2 = y;\n }\n return this;\n }\n expand(d: number | [number, number, number, number] = 0): Bounds {\n if (isArray(d)) {\n this.y1 -= d[0];\n this.x2 += d[1];\n this.y2 += d[2];\n this.x1 -= d[3];\n } else {\n this.x1 -= d;\n this.y1 -= d;\n this.x2 += d;\n this.y2 += d;\n }\n return this;\n }\n round(): Bounds {\n this.x1 = Math.floor(this.x1);\n this.y1 = Math.floor(this.y1);\n this.x2 = Math.ceil(this.x2);\n this.y2 = Math.ceil(this.y2);\n return this;\n }\n translate(dx: number = 0, dy: number = 0): Bounds {\n this.x1 += dx;\n this.x2 += dx;\n this.y1 += dy;\n this.y2 += dy;\n return this;\n }\n rotate(angle: number = 0, x: number = 0, y: number = 0) {\n const p = this.rotatedPoints(angle, x, y);\n return this.clear().add(p[0], p[1]).add(p[2], p[3]).add(p[4], p[5]).add(p[6], p[7]);\n }\n scale(sx: number = 0, sy: number = 0, x: number = 0, y: number = 0) {\n const p = this.scalePoints(sx, sy, x, y);\n return this.clear().add(p[0], p[1]).add(p[2], p[3]);\n }\n /**\n * 并集\n * @param b\n * @returns\n */\n union(b: IBoundsLike): Bounds {\n if (b.x1 < this.x1) {\n this.x1 = b.x1;\n }\n if (b.y1 < this.y1) {\n this.y1 = b.y1;\n }\n if (b.x2 > this.x2) {\n this.x2 = b.x2;\n }\n if (b.y2 > this.y2) {\n this.y2 = b.y2;\n }\n return this;\n }\n /**\n * 交集\n * @param b\n * @returns\n */\n intersect(b: IBoundsLike): Bounds {\n if (b.x1 > this.x1) {\n this.x1 = b.x1;\n }\n if (b.y1 > this.y1) {\n this.y1 = b.y1;\n }\n if (b.x2 < this.x2) {\n this.x2 = b.x2;\n }\n if (b.y2 < this.y2) {\n this.y2 = b.y2;\n }\n return this;\n }\n /**\n * 是否包含b\n * @param b\n * @returns\n */\n encloses(b: IBoundsLike): boolean {\n return b && this.x1 <= b.x1 && this.x2 >= b.x2 && this.y1 <= b.y1 && this.y2 >= b.y2;\n }\n /**\n * 是否共边\n * @param b\n * @returns\n */\n alignsWith(b: IBoundsLike): boolean {\n return b && (this.x1 === b.x1 || this.x2 === b.x2 || this.y1 === b.y1 || this.y2 === b.y2);\n }\n /**\n * 是否相交\n * @param b\n * @returns\n */\n intersects(b: IBoundsLike): boolean {\n return b && !(this.x2 < b.x1 || this.x1 > b.x2 || this.y2 < b.y1 || this.y1 > b.y2);\n }\n /**\n * 是否包含\n * @param x\n * @param y\n * @returns\n */\n contains(x: number = 0, y: number = 0): boolean {\n return !(x < this.x1 || x > this.x2 || y < this.y1 || y > this.y2);\n }\n containsPoint(p: IPointLike): boolean {\n return !(p.x < this.x1 || p.x > this.x2 || p.y < this.y1 || p.y > this.y2);\n }\n width(): number {\n if (this.empty()) {\n return 0;\n }\n return this.x2 - this.x1;\n }\n height(): number {\n if (this.empty()) {\n return 0;\n }\n return this.y2 - this.y1;\n }\n scaleX(s: number = 0): Bounds {\n this.x1 *= s;\n this.x2 *= s;\n return this;\n }\n\n scaleY(s: number = 0): Bounds {\n this.y1 *= s;\n this.y2 *= s;\n return this;\n }\n\n transformWithMatrix(matrix: IMatrix): Bounds {\n transformBoundsWithMatrix(this, this, matrix);\n return this;\n }\n\n copy(b: IBoundsLike) {\n this.x1 = b.x1;\n this.y1 = b.y1;\n this.x2 = b.x2;\n this.y2 = b.y2;\n return this;\n }\n private rotatedPoints(angle: number, x: number, y: number): vec8 {\n const { x1, y1, x2, y2 } = this;\n const cos = Math.cos(angle);\n const sin = Math.sin(angle);\n const cx = x - x * cos + y * sin;\n const cy = y - x * sin - y * cos;\n\n return [\n cos * x1 - sin * y1 + cx,\n sin * x1 + cos * y1 + cy,\n cos * x1 - sin * y2 + cx,\n sin * x1 + cos * y2 + cy,\n cos * x2 - sin * y1 + cx,\n sin * x2 + cos * y1 + cy,\n cos * x2 - sin * y2 + cx,\n sin * x2 + cos * y2 + cy\n ];\n }\n private scalePoints(sx: number, sy: number, x: number, y: number): vec4 {\n const { x1, y1, x2, y2 } = this;\n\n return [sx * x1 + (1 - sx) * x, sy * y1 + (1 - sy) * y, sx * x2 + (1 - sx) * x, sy * y2 + (1 - sy) * y];\n }\n}\n\nexport class AABBBounds extends Bounds {}\nexport class OBBBounds extends Bounds {\n angle: number;\n\n constructor(bounds?: Bounds, angle = 0) {\n super(bounds);\n if (bounds) {\n this.angle = (bounds as any).angle ?? angle;\n }\n }\n\n intersects(b: OBBBounds): boolean {\n return isRotateAABBIntersect(this, b);\n }\n\n setValue(x1: number = 0, y1: number = 0, x2: number = 0, y2: number = 0, angle = 0): Bounds {\n super.setValue(x1, y1, x2, y2);\n this.angle = angle;\n return this;\n }\n\n clone(): OBBBounds {\n return new OBBBounds(this);\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/data-structure/bounds.ts"],"names":[],"mappings":"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","file":"bounds.js","sourcesContent":["import { isArray } from '../common';\nimport { isRotateAABBIntersect, rotatePoint } from '../graphics';\nimport type { vec4, vec8 } from '../math';\nimport { abs, epsilon } from '../math';\nimport type { IMatrix } from './matrix';\nimport type { IPointLike } from './point';\n\nexport type IBoundsLike = Pick<IBounds, 'x1' | 'y1' | 'x2' | 'y2'>;\nexport type IAABBBoundsLike = IBoundsLike;\nexport type IOBBBoundsLike = Pick<IOBBBounds, 'x1' | 'y1' | 'x2' | 'y2' | 'angle'>;\n\nexport interface IBounds {\n x1: number;\n y1: number;\n x2: number;\n y2: number;\n clone: () => IBounds;\n clear: () => IBounds;\n empty: () => boolean;\n equals: (b: IBounds) => boolean;\n set: (x1: number, y1: number, x2: number, y2: number) => IBounds;\n setValue: (x1: number, y1: number, x2: number, y2: number) => IBounds;\n add: (x: number, y: number) => IBounds;\n expand: (d: number) => IBounds;\n round: () => IBounds;\n translate: (dx: number, dy: number) => IBounds;\n rotate: (angle: number, x: number, y: number) => IBounds;\n scale: (sx: number, sy: number, x: number, y: number) => IBounds;\n /**\n * 并集\n * @param b\n * @returns\n */\n union: (b: IBoundsLike) => IBounds;\n /**\n * 交集\n * @param b\n * @returns\n */\n intersect: (b: IBoundsLike) => IBounds;\n /**\n * 是否包含b\n * @param b\n * @returns\n */\n encloses: (b: IBoundsLike) => boolean;\n /**\n * 是否共边\n * @param b\n * @returns\n */\n alignsWith: (b: IBoundsLike) => boolean;\n /**\n * 是否相交\n * @param b\n * @returns\n */\n intersects: (b: IBoundsLike) => boolean;\n /**\n * 是否包含\n * @param x\n * @param y\n * @returns\n */\n contains: (x: number, y: number) => boolean;\n containsPoint: (p: IPointLike) => boolean;\n width: () => number;\n height: () => number;\n scaleX: (s: number) => IBounds;\n scaleY: (s: number) => IBounds;\n\n copy: (b: IBoundsLike) => IBounds;\n\n transformWithMatrix: (matrix: IMatrix) => IBounds;\n}\n\nexport type IAABBBounds = IBounds;\n\nexport interface IOBBBounds extends IBounds {\n angle: number;\n getRotatedCorners: () => IPointLike[];\n}\n\nexport function transformBoundsWithMatrix(out: IBounds, bounds: IBounds, matrix: IMatrix): IBounds {\n const { x1, y1, x2, y2 } = bounds;\n // 如果没有旋转和缩放,那就直接translate\n if (matrix.onlyTranslate()) {\n if (out !== bounds) {\n out.setValue(bounds.x1, bounds.y1, bounds.x2, bounds.y2);\n }\n out.translate(matrix.e, matrix.f);\n return bounds;\n }\n out.clear();\n out.add(matrix.a * x1 + matrix.c * y1 + matrix.e, matrix.b * x1 + matrix.d * y1 + matrix.f);\n out.add(matrix.a * x2 + matrix.c * y1 + matrix.e, matrix.b * x2 + matrix.d * y1 + matrix.f);\n out.add(matrix.a * x2 + matrix.c * y2 + matrix.e, matrix.b * x2 + matrix.d * y2 + matrix.f);\n out.add(matrix.a * x1 + matrix.c * y2 + matrix.e, matrix.b * x1 + matrix.d * y2 + matrix.f);\n return bounds;\n}\n\n/**\n * 依据graphic的属性对bounds进行变换\n * @param bounds\n * @param x\n * @param y\n * @param scaleX\n * @param scaleY\n * @param angle\n * @param rotateCenter\n */\nexport function transformBounds(\n bounds: IBounds,\n x: number,\n y: number,\n scaleX: number,\n scaleY: number,\n angle: number,\n rotateCenter?: [number, number]\n) {\n if (abs(scaleX) <= epsilon || abs(scaleY) <= epsilon) {\n return;\n }\n\n scaleX !== 1 && bounds.scaleX(scaleX);\n scaleY !== 1 && bounds.scaleY(scaleY);\n\n if (isFinite(angle) && Math.abs(angle) > epsilon) {\n let rx = 0;\n let ry = 0;\n if (rotateCenter !== undefined) {\n rx = rotateCenter[0];\n ry = rotateCenter[1];\n }\n bounds.rotate(angle, rx, ry);\n }\n\n bounds.translate(x, y);\n}\n\n/**\nCopyright (c) 2015-2021, University of Washington Interactive Data Lab\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n1. Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n2. Redistributions in binary form must reproduce the above copyright notice,\n this list of conditions and the following disclaimer in the documentation\n and/or other materials provided with the distribution.\n\n3. Neither the name of the copyright holder nor the names of its contributors\n may be used to endorse or promote products derived from this software\n without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE\nFOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\nDAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\nSERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\nOR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n// 基于Vega的Bounds重构\n// https://github.com/vega/vega/blob/825bfaba6ccfe3306183df22b8c955a07bb30714/packages/vega-scenegraph/src/Bounds.js\nexport class Bounds implements IBounds {\n // 默认初始值是Number.MAX_VALUE\n x1: number;\n y1: number;\n x2: number;\n y2: number;\n\n constructor(bounds?: Bounds) {\n if (bounds) {\n this.setValue(bounds.x1, bounds.y1, bounds.x2, bounds.y2);\n } else {\n this.clear();\n }\n }\n\n clone() {\n return new Bounds(this);\n }\n\n clear(): Bounds {\n this.x1 = +Number.MAX_VALUE;\n this.y1 = +Number.MAX_VALUE;\n this.x2 = -Number.MAX_VALUE;\n this.y2 = -Number.MAX_VALUE;\n return this;\n }\n empty(): boolean {\n return (\n this.x1 === +Number.MAX_VALUE &&\n this.y1 === +Number.MAX_VALUE &&\n this.x2 === -Number.MAX_VALUE &&\n this.y2 === -Number.MAX_VALUE\n );\n }\n equals(b: IBoundsLike): boolean {\n return this.x1 === b.x1 && this.y1 === b.y1 && this.x2 === b.x2 && this.y2 === b.y2;\n }\n setValue(x1: number = 0, y1: number = 0, x2: number = 0, y2: number = 0): Bounds {\n this.x1 = x1;\n this.y1 = y1;\n this.x2 = x2;\n this.y2 = y2;\n return this;\n }\n set(x1: number = 0, y1: number = 0, x2: number = 0, y2: number = 0): Bounds {\n if (x2 < x1) {\n this.x2 = x1;\n this.x1 = x2;\n } else {\n this.x1 = x1;\n this.x2 = x2;\n }\n if (y2 < y1) {\n this.y2 = y1;\n this.y1 = y2;\n } else {\n this.y1 = y1;\n this.y2 = y2;\n }\n return this;\n }\n add(x: number = 0, y: number = 0): Bounds {\n if (x < this.x1) {\n this.x1 = x;\n }\n if (y < this.y1) {\n this.y1 = y;\n }\n if (x > this.x2) {\n this.x2 = x;\n }\n if (y > this.y2) {\n this.y2 = y;\n }\n return this;\n }\n expand(d: number | [number, number, number, number] = 0): Bounds {\n if (isArray(d)) {\n this.y1 -= d[0];\n this.x2 += d[1];\n this.y2 += d[2];\n this.x1 -= d[3];\n } else {\n this.x1 -= d;\n this.y1 -= d;\n this.x2 += d;\n this.y2 += d;\n }\n return this;\n }\n round(): Bounds {\n this.x1 = Math.floor(this.x1);\n this.y1 = Math.floor(this.y1);\n this.x2 = Math.ceil(this.x2);\n this.y2 = Math.ceil(this.y2);\n return this;\n }\n translate(dx: number = 0, dy: number = 0): Bounds {\n this.x1 += dx;\n this.x2 += dx;\n this.y1 += dy;\n this.y2 += dy;\n return this;\n }\n rotate(angle: number = 0, x: number = 0, y: number = 0) {\n const p = this.rotatedPoints(angle, x, y);\n return this.clear().add(p[0], p[1]).add(p[2], p[3]).add(p[4], p[5]).add(p[6], p[7]);\n }\n scale(sx: number = 0, sy: number = 0, x: number = 0, y: number = 0) {\n const p = this.scalePoints(sx, sy, x, y);\n return this.clear().add(p[0], p[1]).add(p[2], p[3]);\n }\n /**\n * 并集\n * @param b\n * @returns\n */\n union(b: IBoundsLike): Bounds {\n if (b.x1 < this.x1) {\n this.x1 = b.x1;\n }\n if (b.y1 < this.y1) {\n this.y1 = b.y1;\n }\n if (b.x2 > this.x2) {\n this.x2 = b.x2;\n }\n if (b.y2 > this.y2) {\n this.y2 = b.y2;\n }\n return this;\n }\n /**\n * 交集\n * @param b\n * @returns\n */\n intersect(b: IBoundsLike): Bounds {\n if (b.x1 > this.x1) {\n this.x1 = b.x1;\n }\n if (b.y1 > this.y1) {\n this.y1 = b.y1;\n }\n if (b.x2 < this.x2) {\n this.x2 = b.x2;\n }\n if (b.y2 < this.y2) {\n this.y2 = b.y2;\n }\n return this;\n }\n /**\n * 是否包含b\n * @param b\n * @returns\n */\n encloses(b: IBoundsLike): boolean {\n return b && this.x1 <= b.x1 && this.x2 >= b.x2 && this.y1 <= b.y1 && this.y2 >= b.y2;\n }\n /**\n * 是否共边\n * @param b\n * @returns\n */\n alignsWith(b: IBoundsLike): boolean {\n return b && (this.x1 === b.x1 || this.x2 === b.x2 || this.y1 === b.y1 || this.y2 === b.y2);\n }\n /**\n * 是否相交\n * @param b\n * @returns\n */\n intersects(b: IBoundsLike): boolean {\n return b && !(this.x2 < b.x1 || this.x1 > b.x2 || this.y2 < b.y1 || this.y1 > b.y2);\n }\n /**\n * 是否包含\n * @param x\n * @param y\n * @returns\n */\n contains(x: number = 0, y: number = 0): boolean {\n return !(x < this.x1 || x > this.x2 || y < this.y1 || y > this.y2);\n }\n containsPoint(p: IPointLike): boolean {\n return !(p.x < this.x1 || p.x > this.x2 || p.y < this.y1 || p.y > this.y2);\n }\n width(): number {\n if (this.empty()) {\n return 0;\n }\n return this.x2 - this.x1;\n }\n height(): number {\n if (this.empty()) {\n return 0;\n }\n return this.y2 - this.y1;\n }\n scaleX(s: number = 0): Bounds {\n this.x1 *= s;\n this.x2 *= s;\n return this;\n }\n\n scaleY(s: number = 0): Bounds {\n this.y1 *= s;\n this.y2 *= s;\n return this;\n }\n\n transformWithMatrix(matrix: IMatrix): Bounds {\n transformBoundsWithMatrix(this, this, matrix);\n return this;\n }\n\n copy(b: IBoundsLike) {\n this.x1 = b.x1;\n this.y1 = b.y1;\n this.x2 = b.x2;\n this.y2 = b.y2;\n return this;\n }\n private rotatedPoints(angle: number, x: number, y: number): vec8 {\n const { x1, y1, x2, y2 } = this;\n const cos = Math.cos(angle);\n const sin = Math.sin(angle);\n const cx = x - x * cos + y * sin;\n const cy = y - x * sin - y * cos;\n\n return [\n cos * x1 - sin * y1 + cx,\n sin * x1 + cos * y1 + cy,\n cos * x1 - sin * y2 + cx,\n sin * x1 + cos * y2 + cy,\n cos * x2 - sin * y1 + cx,\n sin * x2 + cos * y1 + cy,\n cos * x2 - sin * y2 + cx,\n sin * x2 + cos * y2 + cy\n ];\n }\n private scalePoints(sx: number, sy: number, x: number, y: number): vec4 {\n const { x1, y1, x2, y2 } = this;\n\n return [sx * x1 + (1 - sx) * x, sy * y1 + (1 - sy) * y, sx * x2 + (1 - sx) * x, sy * y2 + (1 - sy) * y];\n }\n}\n\nexport class AABBBounds extends Bounds {}\nexport class OBBBounds extends Bounds {\n angle: number;\n\n constructor(bounds?: Bounds, angle = 0) {\n super(bounds);\n if (bounds) {\n this.angle = (bounds as any).angle ?? angle;\n }\n }\n\n intersects(b: OBBBounds): boolean {\n return isRotateAABBIntersect(this, b);\n }\n\n setValue(x1: number = 0, y1: number = 0, x2: number = 0, y2: number = 0, angle = 0): Bounds {\n super.setValue(x1, y1, x2, y2);\n this.angle = angle;\n return this;\n }\n\n clone(): OBBBounds {\n return new OBBBounds(this);\n }\n\n getRotatedCorners(): IPointLike[] {\n const cx = (this.x1 + this.x2) / 2;\n const cy = (this.y1 + this.y2) / 2;\n\n const originPoint = { x: cx, y: cy };\n return [\n rotatePoint({ x: this.x1, y: this.y1 }, this.angle, originPoint),\n rotatePoint({ x: this.x2, y: this.y1 }, this.angle, originPoint),\n rotatePoint({ x: this.x1, y: this.y2 }, this.angle, originPoint),\n rotatePoint({ x: this.x2, y: this.y2 }, this.angle, originPoint)\n ];\n }\n}\n"]}
@@ -1,7 +1,9 @@
1
- import type { IBoundsLike } from '../data-structure';
1
+ import type { IBoundsLike, IOBBBounds } from '../data-structure';
2
2
  export type InsideBoundsAnchorType = 'inside' | 'inside-top' | 'inside-bottom' | 'inside-left' | 'inside-right';
3
3
  export type BoundsAnchorType = 'top' | 'bottom' | 'left' | 'right' | 'top-right' | 'top-left' | 'bottom-right' | 'bottom-left' | 'center';
4
4
  export declare const calculateAnchorOfBounds: (bounds: IBoundsLike, anchorType: string) => {
5
5
  x: number;
6
6
  y: number;
7
7
  };
8
+ export declare const aabbSeparation: (a: IBoundsLike, b: IBoundsLike) => number;
9
+ export declare const obbSeparation: (a: IOBBBounds, b: IOBBBounds) => number;
@@ -2,7 +2,7 @@
2
2
 
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: !0
5
- }), exports.calculateAnchorOfBounds = void 0;
5
+ }), exports.obbSeparation = exports.aabbSeparation = exports.calculateAnchorOfBounds = void 0;
6
6
 
7
7
  const calculateAnchorOfBounds = (bounds, anchorType) => {
8
8
  const {x1: x1, x2: x2, y1: y1, y2: y2} = bounds, rectWidth = Math.abs(x2 - x1), rectHeight = Math.abs(y2 - y1);
@@ -50,4 +50,41 @@ const calculateAnchorOfBounds = (bounds, anchorType) => {
50
50
  };
51
51
 
52
52
  exports.calculateAnchorOfBounds = calculateAnchorOfBounds;
53
+
54
+ const aabbSeparation = (a, b) => Math.max(b.x1 - a.x2, a.x1 - b.x2, b.y1 - a.y2, a.y1 - b.y2);
55
+
56
+ exports.aabbSeparation = aabbSeparation;
57
+
58
+ const obbSeparation = (a, b) => {
59
+ const axes = [ {
60
+ x: Math.cos(a.angle),
61
+ y: Math.sin(a.angle)
62
+ }, {
63
+ x: -Math.sin(a.angle),
64
+ y: Math.cos(a.angle)
65
+ }, {
66
+ x: Math.cos(b.angle),
67
+ y: Math.sin(a.angle)
68
+ }, {
69
+ x: -Math.sin(b.angle),
70
+ y: Math.cos(a.angle)
71
+ } ];
72
+ function getProjectionRange(obb, axisX, axisY) {
73
+ const projections = obb.getRotatedCorners().map((p => p.x * axisX + p.y * axisY));
74
+ return {
75
+ min: Math.min(...projections),
76
+ max: Math.max(...projections)
77
+ };
78
+ }
79
+ let maxDistance = 0;
80
+ for (const axis of axes) {
81
+ const rangeA = getProjectionRange(a, axis.x, axis.y), rangeB = getProjectionRange(b, axis.x, axis.y);
82
+ let distance;
83
+ distance = rangeA.max < rangeB.min ? rangeB.min - rangeA.max : rangeB.max < rangeA.min ? rangeA.min - rangeB.max : 0,
84
+ maxDistance = Math.max(maxDistance, distance);
85
+ }
86
+ return maxDistance;
87
+ };
88
+
89
+ exports.obbSeparation = obbSeparation;
53
90
  //# sourceMappingURL=bounds-util.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/graphics/bounds-util.ts"],"names":[],"mappings":";;;AAeO,MAAM,uBAAuB,GAAG,CAAC,MAAmB,EAAE,UAAkB,EAAE,EAAE;IACjF,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,MAAM,CAAC;IAClC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;IACpC,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;IACrC,IAAI,OAAO,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;IAC5B,IAAI,OAAO,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;IAE5B,IAAI,EAAE,GAAG,CAAC,CAAC;IACX,IAAI,EAAE,GAAG,CAAC,CAAC;IAEX,QAAQ,UAAU,EAAE;QAClB,KAAK,KAAK,CAAC;QACX,KAAK,YAAY;YACf,EAAE,GAAG,CAAC,GAAG,CAAC;YACV,MAAM;QACR,KAAK,QAAQ,CAAC;QACd,KAAK,eAAe;YAClB,EAAE,GAAG,GAAG,CAAC;YACT,MAAM;QACR,KAAK,MAAM,CAAC;QACZ,KAAK,aAAa;YAChB,EAAE,GAAG,CAAC,GAAG,CAAC;YACV,MAAM;QACR,KAAK,OAAO,CAAC;QACb,KAAK,cAAc;YACjB,EAAE,GAAG,GAAG,CAAC;YACT,MAAM;QACR,KAAK,WAAW;YACd,EAAE,GAAG,GAAG,CAAC;YACT,EAAE,GAAG,CAAC,GAAG,CAAC;YACV,MAAM;QACR,KAAK,UAAU;YACb,EAAE,GAAG,CAAC,GAAG,CAAC;YACV,EAAE,GAAG,CAAC,GAAG,CAAC;YACV,MAAM;QACR,KAAK,cAAc;YACjB,EAAE,GAAG,GAAG,CAAC;YACT,EAAE,GAAG,GAAG,CAAC;YACT,MAAM;QACR,KAAK,aAAa;YAChB,EAAE,GAAG,CAAC,GAAG,CAAC;YACV,EAAE,GAAG,GAAG,CAAC;KACZ;IAED,OAAO,IAAI,EAAE,GAAG,SAAS,CAAC;IAC1B,OAAO,IAAI,EAAE,GAAG,UAAU,CAAC;IAE3B,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC;AACpC,CAAC,CAAC;AAhDW,QAAA,uBAAuB,2BAgDlC","file":"bounds-util.js","sourcesContent":["import type { IBoundsLike } from '../data-structure';\n\nexport type InsideBoundsAnchorType = 'inside' | 'inside-top' | 'inside-bottom' | 'inside-left' | 'inside-right';\n\nexport type BoundsAnchorType =\n | 'top'\n | 'bottom'\n | 'left'\n | 'right'\n | 'top-right'\n | 'top-left'\n | 'bottom-right'\n | 'bottom-left'\n | 'center';\n\nexport const calculateAnchorOfBounds = (bounds: IBoundsLike, anchorType: string) => {\n const { x1, x2, y1, y2 } = bounds;\n const rectWidth = Math.abs(x2 - x1);\n const rectHeight = Math.abs(y2 - y1);\n let anchorX = (x1 + x2) / 2;\n let anchorY = (y1 + y2) / 2;\n\n let sx = 0;\n let sy = 0;\n\n switch (anchorType) {\n case 'top':\n case 'inside-top':\n sy = -0.5;\n break;\n case 'bottom':\n case 'inside-bottom':\n sy = 0.5;\n break;\n case 'left':\n case 'inside-left':\n sx = -0.5;\n break;\n case 'right':\n case 'inside-right':\n sx = 0.5;\n break;\n case 'top-right':\n sx = 0.5;\n sy = -0.5;\n break;\n case 'top-left':\n sx = -0.5;\n sy = -0.5;\n break;\n case 'bottom-right':\n sx = 0.5;\n sy = 0.5;\n break;\n case 'bottom-left':\n sx = -0.5;\n sy = 0.5;\n }\n\n anchorX += sx * rectWidth;\n anchorY += sy * rectHeight;\n\n return { x: anchorX, y: anchorY };\n};\n"]}
1
+ {"version":3,"sources":["../src/graphics/bounds-util.ts"],"names":[],"mappings":"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","file":"bounds-util.js","sourcesContent":["import type { IBoundsLike, IOBBBounds } from '../data-structure';\n\nexport type InsideBoundsAnchorType = 'inside' | 'inside-top' | 'inside-bottom' | 'inside-left' | 'inside-right';\n\nexport type BoundsAnchorType =\n | 'top'\n | 'bottom'\n | 'left'\n | 'right'\n | 'top-right'\n | 'top-left'\n | 'bottom-right'\n | 'bottom-left'\n | 'center';\n\nexport const calculateAnchorOfBounds = (bounds: IBoundsLike, anchorType: string) => {\n const { x1, x2, y1, y2 } = bounds;\n const rectWidth = Math.abs(x2 - x1);\n const rectHeight = Math.abs(y2 - y1);\n let anchorX = (x1 + x2) / 2;\n let anchorY = (y1 + y2) / 2;\n\n let sx = 0;\n let sy = 0;\n\n switch (anchorType) {\n case 'top':\n case 'inside-top':\n sy = -0.5;\n break;\n case 'bottom':\n case 'inside-bottom':\n sy = 0.5;\n break;\n case 'left':\n case 'inside-left':\n sx = -0.5;\n break;\n case 'right':\n case 'inside-right':\n sx = 0.5;\n break;\n case 'top-right':\n sx = 0.5;\n sy = -0.5;\n break;\n case 'top-left':\n sx = -0.5;\n sy = -0.5;\n break;\n case 'bottom-right':\n sx = 0.5;\n sy = 0.5;\n break;\n case 'bottom-left':\n sx = -0.5;\n sy = 0.5;\n }\n\n anchorX += sx * rectWidth;\n anchorY += sy * rectHeight;\n\n return { x: anchorX, y: anchorY };\n};\n\nexport const aabbSeparation = (a: IBoundsLike, b: IBoundsLike) => {\n return Math.max(b.x1 - a.x2, a.x1 - b.x2, b.y1 - a.y2, a.y1 - b.y2);\n};\n\nexport const obbSeparation = (a: IOBBBounds, b: IOBBBounds) => {\n const axes = [\n { x: Math.cos(a.angle), y: Math.sin(a.angle) }, // Rect A's first axis\n { x: -Math.sin(a.angle), y: Math.cos(a.angle) }, // Rect A's second axis\n { x: Math.cos(b.angle), y: Math.sin(a.angle) }, // Rect B's first axis\n { x: -Math.sin(b.angle), y: Math.cos(a.angle) } // Rect B's second axis\n ];\n\n // calculate the projection range of a rectangle on a given axis\n function getProjectionRange(obb: IOBBBounds, axisX: number, axisY: number): { min: number; max: number } {\n const corners = obb.getRotatedCorners();\n const projections = corners.map(p => p.x * axisX + p.y * axisY);\n return { min: Math.min(...projections), max: Math.max(...projections) };\n }\n\n // Calculate distances for all axes\n let maxDistance = 0;\n for (const axis of axes) {\n const rangeA = getProjectionRange(a, axis.x, axis.y);\n const rangeB = getProjectionRange(b, axis.x, axis.y);\n let distance;\n if (rangeA.max < rangeB.min) {\n distance = rangeB.min - rangeA.max; // B is to the right of A\n } else if (rangeB.max < rangeA.min) {\n distance = rangeA.min - rangeB.max; // A is to the right of B\n } else {\n distance = 0; // Overlapping\n }\n maxDistance = Math.max(maxDistance, distance);\n }\n\n return maxDistance;\n};\n"]}
package/dist/index.js CHANGED
@@ -3252,6 +3252,39 @@
3252
3252
  anchorY += sy * rectHeight;
3253
3253
  return { x: anchorX, y: anchorY };
3254
3254
  };
3255
+ const aabbSeparation = (a, b) => {
3256
+ return Math.max(b.x1 - a.x2, a.x1 - b.x2, b.y1 - a.y2, a.y1 - b.y2);
3257
+ };
3258
+ const obbSeparation = (a, b) => {
3259
+ const axes = [
3260
+ { x: Math.cos(a.angle), y: Math.sin(a.angle) },
3261
+ { x: -Math.sin(a.angle), y: Math.cos(a.angle) },
3262
+ { x: Math.cos(b.angle), y: Math.sin(a.angle) },
3263
+ { x: -Math.sin(b.angle), y: Math.cos(a.angle) }
3264
+ ];
3265
+ function getProjectionRange(obb, axisX, axisY) {
3266
+ const corners = obb.getRotatedCorners();
3267
+ const projections = corners.map(p => p.x * axisX + p.y * axisY);
3268
+ return { min: Math.min(...projections), max: Math.max(...projections) };
3269
+ }
3270
+ let maxDistance = 0;
3271
+ for (const axis of axes) {
3272
+ const rangeA = getProjectionRange(a, axis.x, axis.y);
3273
+ const rangeB = getProjectionRange(b, axis.x, axis.y);
3274
+ let distance;
3275
+ if (rangeA.max < rangeB.min) {
3276
+ distance = rangeB.min - rangeA.max;
3277
+ }
3278
+ else if (rangeB.max < rangeA.min) {
3279
+ distance = rangeA.min - rangeB.max;
3280
+ }
3281
+ else {
3282
+ distance = 0;
3283
+ }
3284
+ maxDistance = Math.max(maxDistance, distance);
3285
+ }
3286
+ return maxDistance;
3287
+ };
3255
3288
 
3256
3289
  function transformBoundsWithMatrix(out, bounds, matrix) {
3257
3290
  const { x1, y1, x2, y2 } = bounds;
@@ -3513,6 +3546,17 @@
3513
3546
  clone() {
3514
3547
  return new OBBBounds(this);
3515
3548
  }
3549
+ getRotatedCorners() {
3550
+ const cx = (this.x1 + this.x2) / 2;
3551
+ const cy = (this.y1 + this.y2) / 2;
3552
+ const originPoint = { x: cx, y: cy };
3553
+ return [
3554
+ rotatePoint({ x: this.x1, y: this.y1 }, this.angle, originPoint),
3555
+ rotatePoint({ x: this.x2, y: this.y1 }, this.angle, originPoint),
3556
+ rotatePoint({ x: this.x1, y: this.y2 }, this.angle, originPoint),
3557
+ rotatePoint({ x: this.x2, y: this.y2 }, this.angle, originPoint)
3558
+ ];
3559
+ }
3516
3560
  }
3517
3561
 
3518
3562
  class Matrix {
@@ -4128,6 +4172,8 @@
4128
4172
  return color.getLuminance2();
4129
4173
  case 'lum3':
4130
4174
  return color.getLuminance3();
4175
+ case 'wcag':
4176
+ return color.getLuminanceWCAG();
4131
4177
  default:
4132
4178
  return color.getHSVBrightness();
4133
4179
  }
@@ -4259,6 +4305,34 @@
4259
4305
  getLuminance3() {
4260
4306
  return (0.299 * this.color.r + 0.587 * this.color.g + 0.114 * this.color.b) / 255;
4261
4307
  }
4308
+ getLuminanceWCAG() {
4309
+ const RsRGB = this.color.r / 255;
4310
+ const GsRGB = this.color.g / 255;
4311
+ const BsRGB = this.color.b / 255;
4312
+ let R;
4313
+ let G;
4314
+ let B;
4315
+ if (RsRGB <= 0.03928) {
4316
+ R = RsRGB / 12.92;
4317
+ }
4318
+ else {
4319
+ R = Math.pow((RsRGB + 0.055) / 1.055, 2.4);
4320
+ }
4321
+ if (GsRGB <= 0.03928) {
4322
+ G = GsRGB / 12.92;
4323
+ }
4324
+ else {
4325
+ G = Math.pow((GsRGB + 0.055) / 1.055, 2.4);
4326
+ }
4327
+ if (BsRGB <= 0.03928) {
4328
+ B = BsRGB / 12.92;
4329
+ }
4330
+ else {
4331
+ B = Math.pow((BsRGB + 0.055) / 1.055, 2.4);
4332
+ }
4333
+ const L = 0.2126 * R + 0.7152 * G + 0.0722 * B;
4334
+ return L;
4335
+ }
4262
4336
  clone() {
4263
4337
  return new Color(this.color.toString());
4264
4338
  }
@@ -6131,6 +6205,7 @@
6131
6205
  exports.TextMeasure = TextMeasure;
6132
6206
  exports.TimeUtil = TimeUtil;
6133
6207
  exports.YEAR = YEAR;
6208
+ exports.aabbSeparation = aabbSeparation;
6134
6209
  exports.abs = abs;
6135
6210
  exports.acos = acos;
6136
6211
  exports.array = array;
@@ -6302,6 +6377,7 @@
6302
6377
  exports.normalizeAngle = normalizeAngle;
6303
6378
  exports.normalizePadding = normalizePadding;
6304
6379
  exports.numberSpecifierReg = numberSpecifierReg;
6380
+ exports.obbSeparation = obbSeparation;
6305
6381
  exports.pad = pad;
6306
6382
  exports.parseUint8ToImageData = parseUint8ToImageData;
6307
6383
  exports.pi = pi;