index.ts 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. import { themeMouseColors } from "@/constant/help-style.ts";
  2. import { Transform } from "konva/lib/Util";
  3. import { BaseItem, generateSnapInfos, getBaseItem, getRectSnapPoints } from "../util.ts";
  4. import { getMouseColors } from "@/utils/colors.ts";
  5. import { AddMessage } from "@/core/hook/use-draw.ts";
  6. export { default as Component } from "./icon.vue";
  7. export { default as TempComponent } from "./temp-icon.vue";
  8. export const shapeName = "图例";
  9. export const defaultStyle = {
  10. coverFill: themeMouseColors.theme,
  11. coverOpcatiy: 0,
  12. strokeScaleEnabled: false,
  13. width: 80,
  14. height: 80,
  15. };
  16. export const addMode = "dot";
  17. export const getSnapInfos = (data: IconData) => {
  18. const tf = new Transform(data.mat);
  19. const w = data.width || defaultStyle.width;
  20. const h = data.height || defaultStyle.height;
  21. const points = getRectSnapPoints(w, h)
  22. return generateSnapInfos(
  23. points.map((v) => tf.point(v)),
  24. true,
  25. false
  26. );
  27. };
  28. export const getMouseStyle = (data: IconData) => {
  29. const fillStatus = getMouseColors(data.coverFill || defaultStyle.coverFill);
  30. const hCoverOpcaoty = data.coverOpcatiy ? data.coverOpcatiy : 0.3
  31. return {
  32. default: { coverFill: fillStatus.pub, coverOpcatiy: data.coverOpcatiy ||0 },
  33. hover: { coverFill: fillStatus.hover, coverOpcatiy: hCoverOpcaoty },
  34. press: { coverFill: fillStatus.press, coverOpcatiy: hCoverOpcaoty },
  35. };
  36. };
  37. export type IconData = Partial<typeof defaultStyle> &
  38. BaseItem & {
  39. fill?: string,
  40. stroke?: string,
  41. strokeWidth?: number,
  42. coverFill?: string;
  43. coverStroke?: string;
  44. coverStrokeWidth?: number;
  45. width: number;
  46. height: number;
  47. mat: number[];
  48. url: string;
  49. };
  50. export const dataToConfig = (data: IconData) => {
  51. return {
  52. ...defaultStyle,
  53. ...data,
  54. };
  55. };
  56. export const interactiveToData = (
  57. info: AddMessage<'icon'>,
  58. preset: Partial<IconData> = {}
  59. ): IconData | undefined => {
  60. if (info.cur) {
  61. return interactiveFixData(
  62. { ...getBaseItem(), ...preset } as unknown as IconData,
  63. info
  64. );
  65. }
  66. };
  67. export const interactiveFixData = (
  68. data: IconData,
  69. info: AddMessage<'icon'>
  70. ) => {
  71. const mat = new Transform().translate(info.cur!.x, info.cur!.y);
  72. data.mat = mat.m;
  73. return data;
  74. };