index.ts 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. import { Pos } from "@/utils/math.ts";
  2. import { themeMouseColors } from "@/constant/help-style.ts";
  3. import { BaseItem, generateSnapInfos, getBaseItem } from "../util.ts";
  4. import { getMouseColors } from "@/utils/colors.ts";
  5. import { InteractiveFix, InteractiveTo } from "../index.ts";
  6. export { default as Component } from "./line.vue";
  7. export { default as TempComponent } from "./temp-line.vue";
  8. export const shapeName = "线段";
  9. export const defaultStyle = {
  10. stroke: themeMouseColors.theme,
  11. strokeWidth: 5,
  12. dash: [30, 0],
  13. };
  14. export const addMode = "dots";
  15. export const getMouseStyle = (data: LineData) => {
  16. const strokeStatus = getMouseColors(data.stroke || defaultStyle.stroke);
  17. const strokeWidth = data.strokeWidth || defaultStyle.strokeWidth;
  18. return {
  19. default: { stroke: strokeStatus.pub, strokeWidth },
  20. hover: { stroke: strokeStatus.hover },
  21. select: { stroke: strokeStatus.select },
  22. press: { stroke: strokeStatus.press },
  23. };
  24. };
  25. export const getSnapInfos = (data: LineData) =>
  26. generateSnapInfos(getSnapPoints(data), true, true, true);
  27. export const getSnapPoints = (data: LineData) => {
  28. return data.points;
  29. };
  30. export type LineData = Partial<typeof defaultStyle> &
  31. BaseItem & {
  32. points: Pos[];
  33. attitude: number[];
  34. };
  35. export const interactiveToData: InteractiveTo<"line"> = ({
  36. info,
  37. preset = {},
  38. ...args
  39. }) => {
  40. if (info.cur) {
  41. return interactiveFixData({
  42. ...args,
  43. info,
  44. data: {
  45. ...getBaseItem(),
  46. ...preset,
  47. points: [],
  48. attitude: [1, 0, 0, 1, 0, 0],
  49. },
  50. });
  51. }
  52. };
  53. export const interactiveFixData: InteractiveFix<"line"> = ({ data, info }) => {
  54. data.points = [...info.consumed, info.cur!];
  55. return data;
  56. };