import { types } from "mobx-state-tree"; import Registry from "../../core/Registry"; import { Hotkey } from "../../core/Hotkey"; import ControlBase from "./Base"; import { customTypes } from "../../core/CustomTypes"; import Types from "../../core/Types"; import { AnnotationMixin } from "../../mixins/AnnotationMixin"; import SeparatedControlMixin from "../../mixins/SeparatedControlMixin"; import { ToolManagerMixin } from "../../mixins/ToolManagerMixin"; const hotkeys = Hotkey("Vectors"); /** * The `Vector` tag is used to add vectors to an image without selecting a label. This can be useful when you have only one label to assign to the vector. Use for image segmentation tasks. * * Use with the following data types: image. * @example * * * * * * @name Vector * @meta_title Vector Tag for Adding Vectors to Images * @meta_description Customize Label Studio with the Vector tag by adding vectors to images for segmentation machine learning and data science projects. * @param {string} name - Name of tag * @param {string} toname - Name of image to label * @param {number} [opacity=0.6] - Opacity of vector * @param {string} [fillColor=transparent] - Vector fill color in hexadecimal or HTML color name * @param {string} [strokeColor=#f48a42] - Stroke color in hexadecimal * @param {number} [strokeWidth=3] - Width of stroke * @param {small|medium|large} [pointSize=small] - Size of vector handle points * @param {rectangle|circle} [pointStyle=circle] - Style of points * @param {boolean} [smart] - Show smart tool for interactive pre-annotations * @param {boolean} [smartOnly] - Only show smart tool for interactive pre-annotations * @param {pixel|none} [snap=none] - Snap vector to image pixels * @param {boolean} [closable=false] - Allow closed shapes * @param {boolean} [curves=false] - Allow Bezier curves * @param {boolean} [skeleton=false] - Enables skeleton mode to allow branch paths * @param {number|none} [minPoints=none] - Minimum allowed number of points * @param {number|none} [maxPoints=none] - Maximum allowed number of points * @param {number} [pointSizeEnabled=5] - Size of a point in pixels when shape is selected * @param {number} [pointSizeDisabled=3] - Size of a point in pixels when shape is not selected */ const TagAttrs = types.model({ toname: types.maybeNull(types.string), opacity: types.optional(customTypes.range(), "0.2"), fillcolor: types.optional(customTypes.color, "#f48a42"), strokewidth: types.optional(types.string, "2"), strokecolor: types.optional(customTypes.color, "#f48a42"), snap: types.optional(types.string, "none"), pointsize: types.optional(types.string, "small"), pointstyle: types.optional(types.string, "circle"), closable: types.optional(types.maybeNull(types.boolean), false), curves: types.optional(types.maybeNull(types.boolean), false), minpoints: types.optional(types.maybeNull(types.string), null), maxpoints: types.optional(types.maybeNull(types.string), null), skeleton: types.optional(types.maybeNull(types.boolean), false), pointsizeenabled: types.optional(types.maybeNull(types.string), "5"), pointsizedisabled: types.optional(types.maybeNull(types.string), "3"), }); const Validation = types.model({ controlledTags: Types.unionTag(["Image"]), }); const Model = types .model({ type: "vector", // regions: types.array(RectRegionModel), _value: types.optional(types.string, ""), }) .volatile(() => ({ toolNames: ["Vector"], })); const VectorModel = types.compose( "VectorModel", ControlBase, AnnotationMixin, SeparatedControlMixin, TagAttrs, Validation, ToolManagerMixin, Model, ); const HtxView = () => null; Registry.addTag("vector", VectorModel, HtxView); export { HtxView, VectorModel };