{"id":50939032,"url":"https://github.com/nikitchenkosergey/scheme-designer","last_synced_at":"2026-06-17T12:01:26.225Z","repository":{"id":48715525,"uuid":"122242262","full_name":"NikitchenkoSergey/scheme-designer","owner":"NikitchenkoSergey","description":"Canvas scheme designer","archived":false,"fork":false,"pushed_at":"2021-07-13T12:45:59.000Z","size":385,"stargazers_count":59,"open_issues_count":4,"forks_count":15,"subscribers_count":5,"default_branch":"master","last_synced_at":"2026-06-16T09:29:46.345Z","etag":null,"topics":["canvas","constructor","interactive","scheme-designer"],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/NikitchenkoSergey.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-02-20T19:04:17.000Z","updated_at":"2026-02-15T23:12:26.000Z","dependencies_parsed_at":"2022-09-07T17:35:22.417Z","dependency_job_id":null,"html_url":"https://github.com/NikitchenkoSergey/scheme-designer","commit_stats":null,"previous_names":[],"tags_count":11,"template":false,"template_full_name":null,"purl":"pkg:github/NikitchenkoSergey/scheme-designer","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NikitchenkoSergey%2Fscheme-designer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NikitchenkoSergey%2Fscheme-designer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NikitchenkoSergey%2Fscheme-designer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NikitchenkoSergey%2Fscheme-designer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/NikitchenkoSergey","download_url":"https://codeload.github.com/NikitchenkoSergey/scheme-designer/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NikitchenkoSergey%2Fscheme-designer/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34447266,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-17T02:00:05.408Z","response_time":127,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["canvas","constructor","interactive","scheme-designer"],"created_at":"2026-06-17T12:00:57.846Z","updated_at":"2026-06-17T12:01:26.214Z","avatar_url":"https://github.com/NikitchenkoSergey.png","language":"TypeScript","funding_links":["https://www.paypal.me/NikitchenkoSergey/25"],"categories":[],"sub_categories":[],"readme":"\u003ch1\u003eScheme designer\u003c/h1\u003e\n\u003cp\u003eConstructor for interactive schemes on canvas \u003cbr /\u003e\nDemo: \u003ca href=\"http://nikitchenko.ru/scheme-designer/examples/\"\u003ehttp://nikitchenko.ru/scheme-designer/examples/\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=center\u003e\u003cimg src=\"http://nikitchenko.ru/scheme-designer/scheme-designer.gif\" width=\"600\"\u003e\u003c/p\u003e\n\n\u003ch2\u003eFeatures\u003c/h2\u003e\n\u003cul\u003e\n    \u003cli\u003eNo dependencies\u003c/li\u003e\n    \u003cli\u003eRender only visible objects\u003c/li\u003e\n    \u003cli\u003eLayers support\u003c/li\u003e\n    \u003cli\u003eResponsible\u003c/li\u003e\n    \u003cli\u003eObjects stored in search tree\u003c/li\u003e\n    \u003cli\u003eTouch support\u003c/li\u003e\n    \u003cli\u003eMany api methods and events\u003c/li\u003e\n\u003c/ul\u003e\n\n\u003ch2\u003eUsage Instructions\u003c/h2\u003e\n1. Link file:\n\n```\n\u003cscript src=\"dist/scheme-designer.min.js\"\u003e\u003c/script\u003e\n```\n\n2. Add Markup\n```\n\u003ccanvas id=\"canvas\" width=\"800\" height=\"500\"\u003e\u003c/canvas\u003e\n```\nfor adaptive add wrapper (relative):\n```\n \u003cdiv style=\"width: 100%; height: 500px; position:relative;\"\u003e\n       \u003ccanvas id=\"canvas\"\u003e\u003c/canvas\u003e\n \u003c/div\u003e\n```\n\n3. Init, create layers, add objects to layers and render (see examples)\n```\nvar defaultLayer = new SchemeDesigner.Layer('default', {zIndex: 1});\n\nvar schemeObject = new SchemeDesigner.SchemeObject({\n            x: 0.5 + leftOffset,\n            y: 0.5 + topOffset,\n            width: width,\n            height: height,\n            renderFunction: renderPlace\n});\n\ndefaultLayer.addObject(schemeObject);\n\nvar canvas = document.getElementById('canvas');\nvar mapCanvas = document.getElementById('canvas_map');\nvar schemeDesigner = new SchemeDesigner.Scheme(canvas, {\n    options: {\n        cacheSchemeRatio: 2\n    },\n    scroll: {\n        maxHiddenPart: 0.85\n    },\n    zoom: {\n        padding: 0.1,\n        maxScale: 8,\n        zoomCoefficient: 1.04\n    },\n    storage: {\n        treeDepth: 6\n    },\n    map: {\n        mapCanvas: mapCanvas\n    }\n});\n\nschemeDesigner.addLayer(defaultLayer);\n\nschemeDesigner.render();\n```\n\n\u003ch2\u003eOptions\u003c/h2\u003e\n\u003ch3\u003eScheme\u003c/h3\u003e\n\u003ctable\u003e\n    \u003ctr\u003e\n        \u003cth\u003eOption\u003c/th\u003e\n        \u003cth\u003eDefault\u003c/th\u003e\n        \u003cth\u003eDescription\u003c/th\u003e\n    \u003c/tr\u003e\n     \u003ctr\u003e\n        \u003ctd colspan=3 align=center\u003e\u003cstrong\u003eOptions\u003c/strong\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n     \u003ctr\u003e\n        \u003ctd\u003ecacheSchemeRatio\u003c/td\u003e\n        \u003ctd\u003e2\u003c/td\u003e\n        \u003ctd\u003eRatio for scheme cache. Set false to disable cache.\u003c/td\u003e\n    \u003c/tr\u003e\n     \u003ctr\u003e\n            \u003ctd\u003ebackground\u003c/td\u003e\n            \u003ctd\u003enull\u003c/td\u003e\n            \u003ctd\u003eBackground of scheme. If define - disable alpha of context (increases performance and turn on subpixel text render).\n            Else - transparent.\n            \u003c/td\u003e\n        \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd colspan=3 align=center\u003e\u003cstrong\u003eScroll\u003c/strong\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n     \u003ctr\u003e\n        \u003ctd\u003emaxHiddenPart\u003c/td\u003e\n        \u003ctd\u003e0.85\u003c/td\u003e\n        \u003ctd\u003eMax hidden part on scroll\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd colspan=3 align=center\u003e\u003cstrong\u003eZoom\u003c/strong\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n     \u003ctr\u003e\n        \u003ctd\u003epadding\u003c/td\u003e\n        \u003ctd\u003e0.1\u003c/td\u003e\n        \u003ctd\u003ePadding from objects to canvas border\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003emaxScale\u003c/td\u003e\n        \u003ctd\u003e5\u003c/td\u003e\n        \u003ctd\u003eMax scale\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003ezoomCoefficient\u003c/td\u003e\n        \u003ctd\u003e1.04\u003c/td\u003e\n        \u003ctd\u003eZoom coefficient (Math.pow(zoomCoefficient, delta))\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n            \u003ctd\u003eclickZoomDelta\u003c/td\u003e\n            \u003ctd\u003e14\u003c/td\u003e\n            \u003ctd\u003eZoom delta on double click\u003c/td\u003e\n        \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd colspan=3 align=center\u003e\u003cstrong\u003eStorage\u003c/strong\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n     \u003ctr\u003e\n        \u003ctd\u003etreeDepth\u003c/td\u003e\n        \u003ctd\u003e0.6\u003c/td\u003e\n        \u003ctd\u003eDepth of search tree\u003c/td\u003e\n    \u003c/tr\u003e\n\u003c/table\u003e\n\n\u003ch3\u003eLayer\u003c/h3\u003e\n\u003ctable\u003e\n    \u003ctr\u003e\n        \u003cth\u003eOption\u003c/th\u003e\n        \u003cth\u003eDefault\u003c/th\u003e\n        \u003cth\u003eDescription\u003c/th\u003e\n    \u003c/tr\u003e\n     \u003ctr\u003e\n        \u003ctd\u003ezIndex: number\u003c/td\u003e\n        \u003ctd\u003e0\u003c/td\u003e\n        \u003ctd\u003eZ index\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003evisible: boolean\u003c/td\u003e\n        \u003ctd\u003etrue\u003c/td\u003e\n        \u003ctd\u003eLayer is visible\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003eactive: boolean\u003c/td\u003e\n        \u003ctd\u003etrue\u003c/td\u003e\n        \u003ctd\u003eLayer is active: objects can process events\u003c/td\u003e\n    \u003c/tr\u003e\n\u003c/table\u003e\n\n\u003ch3\u003eSchemeObject\u003c/h3\u003e\n\u003ctable\u003e\n    \u003ctr\u003e\n        \u003cth\u003eOption\u003c/th\u003e\n        \u003cth\u003eDefault\u003c/th\u003e\n        \u003cth\u003eDescription\u003c/th\u003e\n    \u003c/tr\u003e\n     \u003ctr\u003e\n        \u003ctd\u003ex: number\u003c/td\u003e\n        \u003ctd\u003e\u003c/td\u003e\n        \u003ctd\u003eX position\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003ewidth: number\u003c/td\u003e\n        \u003ctd\u003e\u003c/td\u003e\n        \u003ctd\u003eWidth\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003eheight: number\u003c/td\u003e\n        \u003ctd\u003e\u003c/td\u003e\n        \u003ctd\u003eHeight\u003c/td\u003e\n    \u003c/tr\u003e\n     \u003ctr\u003e\n        \u003ctd\u003erotation: number\u003c/td\u003e\n        \u003ctd\u003e0\u003c/td\u003e\n        \u003ctd\u003eRotation\u003c/td\u003e\n    \u003c/tr\u003e\n     \u003ctr\u003e\n        \u003ctd\u003eactive: boolean\u003c/td\u003e\n        \u003ctd\u003etrue\u003c/td\u003e\n        \u003ctd\u003eActive object can hanlde events.\u003c/td\u003e\n    \u003c/tr\u003e\n     \u003ctr\u003e\n        \u003ctd\u003ecursorStyle: string\u003c/td\u003e\n        \u003ctd\u003epointer\u003c/td\u003e\n        \u003ctd\u003eCursor style on object\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003erenderFunction: Function(schemeObject: SchemeObject, scheme: Scheme, view: View)\u003c/td\u003e\n        \u003ctd\u003e\u003c/td\u003e\n        \u003ctd\u003eFunction for rendering object, see examples\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003epointInObjectFunction: Function(schemeObject: SchemeObject, point: Coordinates, scheme: Scheme, view: View)\u003c/td\u003e\n        \u003ctd\u003e\u003c/td\u003e\n        \u003ctd\u003eDefined hit region detection for object: if return true - hit. Point is normalized by object rect coordinates of cursor. See examples/index.html. If not defined check hit in object rect.\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003eclickFunction: Function(schemeObject: SchemeObject, scheme: Scheme, view: View, e: Event)\u003c/td\u003e\n        \u003ctd\u003e\u003c/td\u003e\n        \u003ctd\u003eFunction for handle click on object\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003emouseOverFunction: Function(schemeObject: SchemeObject, scheme: Scheme, view: View, e: Event)\u003c/td\u003e\n        \u003ctd\u003e\u003c/td\u003e\n        \u003ctd\u003eFunction for handle mouseover on object\u003c/td\u003e\n    \u003c/tr\u003e\n   \u003ctr\u003e\n       \u003ctd\u003emouseLeaveFunction: Function(schemeObject: SchemeObject, scheme: Scheme, view: View, e: Event)\u003c/td\u003e\n       \u003ctd\u003e\u003c/td\u003e\n       \u003ctd\u003eFunction for handle mouseleave on object\u003c/td\u003e\n   \u003c/tr\u003e\n     \u003ctr\u003e\n       \u003ctd\u003eclearFunction: Function(schemeObject: SchemeObject, scheme: Scheme, view: View)\u003c/td\u003e\n       \u003ctd\u003e\u003c/td\u003e\n       \u003ctd\u003eFunction for clear object on scheme cache\u003c/td\u003e\n   \u003c/tr\u003e\n\u003c/table\u003e\n\n\u003ch2\u003eApi\u003c/h2\u003e\n\nExamples:\n```\nvar schemeDesigner = new SchemeDesigner.Scheme(canvas);\n\nSchemeDesigner.setCursorStyle('move');\nschemeDesigner.getZoomManager().zoomToCenter(10);\nschemeDesigner.getScrollManager().scroll(100, 200);\nschemeDesigner.getStorageManager().showNodesParts();\nschemeDesigner.getStorageManager().setLayerVisibility('background', true);\n```\n\n\n\u003ctable\u003e\n    \u003ctr\u003e\n        \u003cth\u003eMethod\u003c/th\u003e\n        \u003cth\u003eReturn\u003c/th\u003e\n        \u003cth\u003eDescription\u003c/th\u003e\n    \u003c/tr\u003e\n     \u003ctr\u003e\n        \u003ctd colspan=3 align=center\u003e\u003cstrong\u003eSchemeDesigner\u003c/strong\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003egetEventManager()\u003c/td\u003e\n        \u003ctd\u003eEventManager\u003c/td\u003e\n        \u003ctd\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003egetScrollManager()\u003c/td\u003e\n        \u003ctd\u003eScrollManager\u003c/td\u003e\n        \u003ctd\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003egetZoomManager()\u003c/td\u003e\n        \u003ctd\u003eZoomManager\u003c/td\u003e\n        \u003ctd\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003egetStorageManager()\u003c/td\u003e\n        \u003ctd\u003eStorageManager\u003c/td\u003e\n        \u003ctd\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003egetMapManager()\u003c/td\u003e\n        \u003ctd\u003eMapManager\u003c/td\u003e\n        \u003ctd\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n     \u003ctr\u003e\n        \u003ctd\u003egetWidth()\u003c/td\u003e\n        \u003ctd\u003enumber\u003c/td\u003e\n        \u003ctd\u003eScheme width\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003egetHeight()\u003c/td\u003e\n        \u003ctd\u003enumber\u003c/td\u003e\n        \u003ctd\u003eScheme height\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003eclearContext()\u003c/td\u003e\n        \u003ctd\u003eSchemeDesigner\u003c/td\u003e\n        \u003ctd\u003eClear canvas context\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003erequestRenderAll()\u003c/td\u003e\n        \u003ctd\u003eSchemeDesigner\u003c/td\u003e\n        \u003ctd\u003eRequest redraw canvas\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003erequestDrawFromCache()\u003c/td\u003e\n        \u003ctd\u003eSchemeDesigner\u003c/td\u003e\n        \u003ctd\u003eRequest draw scheme from cache\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003erender()\u003c/td\u003e\n        \u003ctd\u003e\u003c/td\u003e\n        \u003ctd\u003eRequest redraw canvas, create search tree and scroll with zoom to center\u003c/td\u003e\n    \u003c/tr\u003e\n        \u003ctr\u003e\n        \u003ctd\u003egetCanvas()\u003c/td\u003e\n        \u003ctd\u003eHTMLCanvasElement\u003c/td\u003e\n        \u003ctd\u003eCanvas element\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003egetCanvas2DContext()\u003c/td\u003e\n        \u003ctd\u003eCanvasRenderingContext2D\u003c/td\u003e\n        \u003ctd\u003eCanvas context\u003c/td\u003e\n    \u003c/tr\u003e\n     \u003ctr\u003e\n        \u003ctd\u003esetCursorStyle(cursor: string)\u003c/td\u003e\n        \u003ctd\u003eSchemeDesigner\u003c/td\u003e\n        \u003ctd\u003eSet cursor style\u003c/td\u003e\n    \u003c/tr\u003e\n     \u003ctr\u003e\n        \u003ctd\u003eupdateCache(onlyChanged: boolean)\u003c/td\u003e\n        \u003ctd\u003e\u003c/td\u003e\n        \u003ctd\u003eRedraw scheme cache\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003egetView()\u003c/td\u003e\n        \u003ctd\u003eView\u003c/td\u003e\n        \u003ctd\u003eMain view\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003eaddChangedObject(schemeObject: SchemeObject)\u003c/td\u003e\n        \u003ctd\u003e\u003c/td\u003e\n        \u003ctd\u003eAdd object to changed list for redraw cache\u003c/td\u003e\n    \u003c/tr\u003e\n     \u003ctr\u003e\n        \u003ctd colspan=3 align=center\u003e\u003cstrong\u003eLayer\u003c/strong\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003egetObjects()\u003c/td\u003e\n        \u003ctd\u003eSchemeObject[]\u003c/td\u003e\n        \u003ctd\u003eGet all objects\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003eaddObject(object: SchemeObject)\u003c/td\u003e\n        \u003ctd\u003e\u003c/td\u003e\n        \u003ctd\u003eAdd object\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003eremoveObject(object: SchemeObject)\u003c/td\u003e\n        \u003ctd\u003e\u003c/td\u003e\n        \u003ctd\u003eRemove object\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003eremoveObjects()\u003c/td\u003e\n        \u003ctd\u003e\u003c/td\u003e\n        \u003ctd\u003eRemove all objects\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003esetZIndex(value: number)\u003c/td\u003e\n        \u003ctd\u003e\u003c/td\u003e\n        \u003ctd\u003eSet z-index\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003esetActive(value: boolean)\u003c/td\u003e\n        \u003ctd\u003e\u003c/td\u003e\n        \u003ctd\u003eSet active flag\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003esetVisible(value: boolean)\u003c/td\u003e\n        \u003ctd\u003e\u003c/td\u003e\n        \u003ctd\u003eSet visible flag\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd colspan=3 align=center\u003e\u003cstrong\u003eScroll manager\u003c/strong\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n     \u003ctr\u003e\n        \u003ctd\u003egetScrollLeft()\u003c/td\u003e\n        \u003ctd\u003enumber\u003c/td\u003e\n        \u003ctd\u003eLeft offset\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003egetScrollTop()\u003c/td\u003e\n        \u003ctd\u003enumber\u003c/td\u003e\n        \u003ctd\u003eTop offset\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003escroll(left: number, top: number)\u003c/td\u003e\n        \u003ctd\u003e\u003c/td\u003e\n        \u003ctd\u003eSet scroll\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003etoCenter()\u003c/td\u003e\n        \u003ctd\u003e\u003c/td\u003e\n        \u003ctd\u003eScroll to objects center\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003esetMaxHiddenPart(value: number)\u003c/td\u003e\n        \u003ctd\u003e\u003c/td\u003e\n        \u003ctd\u003eSet maxHiddenPart\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd colspan=3 align=center\u003e\u003cstrong\u003eZoom manager\u003c/strong\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003ezoom(delta: number)\u003c/td\u003e\n        \u003ctd\u003eboolean\u003c/td\u003e\n        \u003ctd\u003eZoom scheme if posible\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003esetScale(scale: number)\u003c/td\u003e\n        \u003ctd\u003eboolean\u003c/td\u003e\n        \u003ctd\u003eSet scale if posible\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003egetScaleWithAllObjects()\u003c/td\u003e\n        \u003ctd\u003enumber\u003c/td\u003e\n        \u003ctd\u003eGet scale when all objects are visible\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003ecanZoomByFactor(factor: number)\u003c/td\u003e\n        \u003ctd\u003eboolean\u003c/td\u003e\n        \u003ctd\u003eCan by factor\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003ezoomByFactor(factor: number)\u003c/td\u003e\n        \u003ctd\u003eboolean\u003c/td\u003e\n        \u003ctd\u003eZoom by factor if posible\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003egetScale()\u003c/td\u003e\n        \u003ctd\u003enumber\u003c/td\u003e\n        \u003ctd\u003eCurrent scale\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003ezoomToCenter(delta: number)\u003c/td\u003e\n        \u003ctd\u003e\u003c/td\u003e\n        \u003ctd\u003eZoom to center\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003ezoomToPoint(point: Coordinates, delta: number)\u003c/td\u003e\n        \u003ctd\u003e\u003c/td\u003e\n        \u003ctd\u003eZoom to point\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003esetPadding(value: number)\u003c/td\u003e\n        \u003ctd\u003e\u003c/td\u003e\n        \u003ctd\u003eSet padding\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003esetMaxScale(value: number)\u003c/td\u003e\n        \u003ctd\u003e\u003c/td\u003e\n        \u003ctd\u003eSet maxScale\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003esetZoomCoefficient(value: number)\u003c/td\u003e\n        \u003ctd\u003e\u003c/td\u003e\n        \u003ctd\u003eSet zoomCoefficient \u003c/td\u003e\n    \u003c/tr\u003e\n     \u003ctr\u003e\n        \u003ctd colspan=3 align=center\u003e\u003cstrong\u003eStorage manager\u003c/strong\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n     \u003ctr\u003e\n        \u003ctd\u003eaddLayer(layer: Layer)\u003c/td\u003e\n        \u003ctd\u003e\u003c/td\u003e\n        \u003ctd\u003eAdd layer\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003eremoveLayers()\u003c/td\u003e\n        \u003ctd\u003e\u003c/td\u003e\n        \u003ctd\u003eRemove all layers\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003eremoveLayer(layerId: string)\u003c/td\u003e\n        \u003ctd\u003e\u003c/td\u003e\n        \u003ctd\u003eRemove layer by id\u003c/td\u003e\n    \u003c/tr\u003e\n     \u003ctr\u003e\n        \u003ctd\u003esetLayerVisibility(layerId: string, visible: boolean)\u003c/td\u003e\n        \u003ctd\u003e\u003c/td\u003e\n        \u003ctd\u003eSet layer visibility and rerender scheme\u003c/td\u003e\n    \u003c/tr\u003e\n     \u003ctr\u003e\n        \u003ctd\u003esetLayerActivity(layerId: string, activity: boolean)\u003c/td\u003e\n        \u003ctd\u003e\u003c/td\u003e\n        \u003ctd\u003eSet layer activity\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003efindObjectsByCoordinates(coordinates: Coordinates)\u003c/td\u003e\n        \u003ctd\u003eSchemeObject[]\u003c/td\u003e\n        \u003ctd\u003eFind objects by coordinates\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003egetObjectsBoundingRect()\u003c/td\u003e\n        \u003ctd\u003eBoundingRect\u003c/td\u003e\n        \u003ctd\u003eBounding rect of all objects\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003ereCalcObjectsBoundingRect()\u003c/td\u003e\n        \u003ctd\u003e\u003c/td\u003e\n        \u003ctd\u003eRequest fo recalculate bounding rect of all objects\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003esetTreeDepth(value: number)\u003c/td\u003e\n        \u003ctd\u003e\u003c/td\u003e\n        \u003ctd\u003eSet treeDepth\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003erequestBuildTree()\u003c/td\u003e\n        \u003ctd\u003e\u003c/td\u003e\n        \u003ctd\u003eRequest rebuild search tree\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003egetTree()\u003c/td\u003e\n        \u003ctd\u003eTreeNode\u003c/td\u003e\n        \u003ctd\u003eGet root tree node\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003eapplyStructureChange()\u003c/td\u003e\n        \u003ctd\u003e\u003c/td\u003e\n        \u003ctd\u003eRecalculate all cructure dependencies\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003eshowNodesParts()\u003c/td\u003e\n        \u003ctd\u003e\u003c/td\u003e\n        \u003ctd\u003eDraw rect of nodes for testing\u003c/td\u003e\n    \u003c/tr\u003e\n     \u003ctr\u003e\n        \u003ctd colspan=3 align=center\u003e\u003cstrong\u003eMap manager\u003c/strong\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n     \u003ctr\u003e\n        \u003ctd\u003edrawMap()\u003c/td\u003e\n        \u003ctd\u003e\u003c/td\u003e\n        \u003ctd\u003eDraw map\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003esetMapCanvas(value: HTMLCanvasElement)\u003c/td\u003e\n        \u003ctd\u003e\u003c/td\u003e\n        \u003ctd\u003eSet canvas for drawing map\u003c/td\u003e\n    \u003c/tr\u003e\n     \u003ctr\u003e\n        \u003ctd\u003eresize()\u003c/td\u003e\n        \u003ctd\u003e\u003c/td\u003e\n        \u003ctd\u003eRecalculate canvas dimensions\u003c/td\u003e\n    \u003c/tr\u003e\n\u003c/table\u003e\n\n\n\u003ch2\u003eEvents\u003c/h2\u003e\n\n\u003ctable\u003e\n    \u003ctr\u003e\n        \u003cth\u003eEvent\u003c/th\u003e\n        \u003cth\u003eDescription\u003c/th\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003eschemeDesigner.beforeRenderAll\u003c/td\u003e\n        \u003ctd\u003eBefore render all\u003c/td\u003e\n    \u003c/tr\u003e\n        \u003ctr\u003e\n        \u003ctd\u003eschemeDesigner.afterRenderAll\u003c/td\u003e\n        \u003ctd\u003eAfter render all\u003c/td\u003e\n    \u003c/tr\u003e\n        \u003ctr\u003e\n        \u003ctd\u003eschemeDesigner.clickOnObject\u003c/td\u003e\n        \u003ctd\u003eClick on object\u003c/td\u003e\n    \u003c/tr\u003e\n        \u003ctr\u003e\n        \u003ctd\u003eschemeDesigner.mouseOverObject\u003c/td\u003e\n        \u003ctd\u003eMouse over on object\u003c/td\u003e\n    \u003c/tr\u003e\n        \u003ctr\u003e\n        \u003ctd\u003eschemeDesigner.mouseLeaveObject\u003c/td\u003e\n        \u003ctd\u003eMouse leave from object\u003c/td\u003e\n    \u003c/tr\u003e\n        \u003ctr\u003e\n        \u003ctd\u003eschemeDesigner.scroll\u003c/td\u003e\n        \u003ctd\u003eOn scroll\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003eschemeDesigner.zoom\u003c/td\u003e\n        \u003ctd\u003eOn zoom\u003c/td\u003e\n    \u003c/tr\u003e\n\u003c/table\u003e\n\n\u003ch2\u003eDonation\u003c/h2\u003e\n\n\u003cp\u003ePayPal: \u003ca href=\"https://www.paypal.me/NikitchenkoSergey/25\"\u003enikitchenko.sergey@yandex.ru\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eYandex.Money: \u003ca href=\"https://money.yandex.ru/to/410011704835851/200\"\u003e410011704835851\u003c/a\u003e\u003c/p\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnikitchenkosergey%2Fscheme-designer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnikitchenkosergey%2Fscheme-designer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnikitchenkosergey%2Fscheme-designer/lists"}