[{"data":1,"prerenderedAt":4762},["ShallowReactive",2],{"navigation":3,"docs-sdk-4.4-editor-custom-inking":498,"nav-sdk44":4500,"support-index":4693},[4],{"title":5,"path":6,"stem":7,"children":8,"page":40},"Docs","\u002Fdocs","docs",[9,242,320],{"title":10,"path":11,"stem":12,"children":13,"page":40},"Cloud","\u002Fdocs\u002Fcloud","docs\u002Fcloud",[14],{"title":15,"path":16,"stem":17,"children":18,"page":40},"4.5","\u002Fdocs\u002Fcloud\u002F4.5","docs\u002Fcloud\u002F4.5",[19,41,54,79,100,147,172,196,209,234],{"title":20,"path":21,"stem":22,"children":23,"page":40},"Overview","\u002Fdocs\u002Fcloud\u002F4.5\u002Foverview","docs\u002Fcloud\u002F4.5\u002F01.overview",[24,28,32,36],{"title":25,"path":26,"stem":27},"MyScript iink SDK for web-based platform","\u002Fdocs\u002Fcloud\u002F4.5\u002Foverview\u002Fintroduction","docs\u002Fcloud\u002F4.5\u002F01.overview\u002F01.introduction",{"title":29,"path":30,"stem":31},"Choosing between REST or WebSockets","\u002Fdocs\u002Fcloud\u002F4.5\u002Foverview\u002Fhttp-rest-or-websocket","docs\u002Fcloud\u002F4.5\u002F01.overview\u002F02.http-rest-or-websocket",{"title":33,"path":34,"stem":35},"What's new","\u002Fdocs\u002Fcloud\u002F4.5\u002Foverview\u002Fchangelog","docs\u002Fcloud\u002F4.5\u002F01.overview\u002F03.changelog",{"title":37,"path":38,"stem":39},"Migration guide","\u002Fdocs\u002Fcloud\u002F4.5\u002Foverview\u002Fmigration-guide","docs\u002Fcloud\u002F4.5\u002F01.overview\u002F04.migration-guide",false,{"title":42,"path":43,"stem":44,"children":45,"page":40},"Integration","\u002Fdocs\u002Fcloud\u002F4.5\u002Fintegration","docs\u002Fcloud\u002F4.5\u002F02.integration",[46,50],{"title":47,"path":48,"stem":49},"Supported platforms","\u002Fdocs\u002Fcloud\u002F4.5\u002Fintegration\u002Fplatforms","docs\u002Fcloud\u002F4.5\u002F02.integration\u002F01.platforms",{"title":51,"path":52,"stem":53},"Integration levels","\u002Fdocs\u002Fcloud\u002F4.5\u002Fintegration\u002Fintegration-levels","docs\u002Fcloud\u002F4.5\u002F02.integration\u002F02.integration-levels",{"title":55,"path":56,"stem":57,"children":58,"page":40},"Recognition capabilities","\u002Fdocs\u002Fcloud\u002F4.5\u002Frecognition-capabilities","docs\u002Fcloud\u002F4.5\u002F03.recognition-capabilities",[59,63,67,71,75],{"title":60,"path":61,"stem":62},"Recognizers","\u002Fdocs\u002Fcloud\u002F4.5\u002Frecognition-capabilities\u002Frecognizers","docs\u002Fcloud\u002F4.5\u002F03.recognition-capabilities\u002F01.recognizers",{"title":64,"path":65,"stem":66},"Text languages and features","\u002Fdocs\u002Fcloud\u002F4.5\u002Frecognition-capabilities\u002Ftext-languages","docs\u002Fcloud\u002F4.5\u002F03.recognition-capabilities\u002F02.text-languages",{"title":68,"path":69,"stem":70},"Math elements and rules","\u002Fdocs\u002Fcloud\u002F4.5\u002Frecognition-capabilities\u002Fmath-elements-and-rules","docs\u002Fcloud\u002F4.5\u002F03.recognition-capabilities\u002F03.math-elements-and-rules",{"title":72,"path":73,"stem":74},"Shapes and connectors","\u002Fdocs\u002Fcloud\u002F4.5\u002Frecognition-capabilities\u002Fdiagram-features","docs\u002Fcloud\u002F4.5\u002F03.recognition-capabilities\u002F04.diagram-features",{"title":76,"path":77,"stem":78},"Gestures","\u002Fdocs\u002Fcloud\u002F4.5\u002Frecognition-capabilities\u002Fgestures","docs\u002Fcloud\u002F4.5\u002F03.recognition-capabilities\u002F05.gestures",{"title":80,"path":81,"stem":82,"children":83,"page":40},"Interactivity integration","\u002Fdocs\u002Fcloud\u002F4.5\u002Finteractivity-integration","docs\u002Fcloud\u002F4.5\u002F04.interactivity-integration",[84,88,92,96],{"title":85,"path":86,"stem":87},"Content types","\u002Fdocs\u002Fcloud\u002F4.5\u002Finteractivity-integration\u002Fcontent-types","docs\u002Fcloud\u002F4.5\u002F04.interactivity-integration\u002F01.content-types",{"title":89,"path":90,"stem":91},"Interactive features","\u002Fdocs\u002Fcloud\u002F4.5\u002Finteractivity-integration\u002Finteractive-features","docs\u002Fcloud\u002F4.5\u002F04.interactivity-integration\u002F02.interactive-features",{"title":93,"path":94,"stem":95},"Import and export formats","\u002Fdocs\u002Fcloud\u002F4.5\u002Finteractivity-integration\u002Fimport-and-export-formats","docs\u002Fcloud\u002F4.5\u002F04.interactivity-integration\u002F03.import-and-export-formats",{"title":97,"path":98,"stem":99},"Math interactive features","\u002Fdocs\u002Fcloud\u002F4.5\u002Finteractivity-integration\u002Fmath-features","docs\u002Fcloud\u002F4.5\u002F04.interactivity-integration\u002F04.math-features",{"title":101,"path":102,"stem":103,"children":104,"page":40},"iinkTS","\u002Fdocs\u002Fcloud\u002F4.5\u002Fiinkts","docs\u002Fcloud\u002F4.5\u002F05.iinkts",[105,109,113,121,138],{"title":106,"path":107,"stem":108},"Getting started","\u002Fdocs\u002Fcloud\u002F4.5\u002Fiinkts\u002Fget-started","docs\u002Fcloud\u002F4.5\u002F05.iinkts\u002F01.get-started",{"title":110,"path":111,"stem":112},"Canvas","\u002Fdocs\u002Fcloud\u002F4.5\u002Fiinkts\u002Fcanvas","docs\u002Fcloud\u002F4.5\u002F05.iinkts\u002F02.canvas",{"title":114,"path":115,"stem":116,"children":117,"page":40},"Ink Canvas","\u002Fdocs\u002Fcloud\u002F4.5\u002Fiinkts\u002Fink-canvas","docs\u002Fcloud\u002F4.5\u002F05.iinkts\u002F03.ink-canvas",[118],{"title":114,"path":119,"stem":120},"\u002Fdocs\u002Fcloud\u002F4.5\u002Fiinkts\u002Fink-canvas\u002Fink-canvas","docs\u002Fcloud\u002F4.5\u002F05.iinkts\u002F03.ink-canvas\u002F01.ink-canvas",{"title":122,"path":123,"stem":124,"children":125,"page":40},"Interactive Ink Canvas","\u002Fdocs\u002Fcloud\u002F4.5\u002Fiinkts\u002Finteractive-ink-canvas","docs\u002Fcloud\u002F4.5\u002F05.iinkts\u002F04.interactive-ink-canvas",[126,130,134],{"title":127,"path":128,"stem":129},"Interactive ink canvas","\u002Fdocs\u002Fcloud\u002F4.5\u002Fiinkts\u002Finteractive-ink-canvas\u002Finteractive-ink-canvas","docs\u002Fcloud\u002F4.5\u002F05.iinkts\u002F04.interactive-ink-canvas\u002F01.interactive-ink-canvas",{"title":131,"path":132,"stem":133},"Interactive Math","\u002Fdocs\u002Fcloud\u002F4.5\u002Fiinkts\u002Finteractive-ink-canvas\u002Fiicanvas-math","docs\u002Fcloud\u002F4.5\u002F05.iinkts\u002F04.interactive-ink-canvas\u002F02.iicanvas-math",{"title":135,"path":136,"stem":137},"Using a custom rendering","\u002Fdocs\u002Fcloud\u002F4.5\u002Fiinkts\u002Finteractive-ink-canvas\u002Fiicanvas-other-rendering","docs\u002Fcloud\u002F4.5\u002F05.iinkts\u002F04.interactive-ink-canvas\u002F03.iicanvas-other-rendering",{"title":139,"path":140,"stem":141,"children":142,"page":40},"Reference","\u002Fdocs\u002Fcloud\u002F4.5\u002Fiinkts\u002Freference","docs\u002Fcloud\u002F4.5\u002F05.iinkts\u002F05.reference",[143],{"title":144,"path":145,"stem":146},"Configuration","\u002Fdocs\u002Fcloud\u002F4.5\u002Fiinkts\u002Freference\u002Fconfiguration-iinkts","docs\u002Fcloud\u002F4.5\u002F05.iinkts\u002F05.reference\u002F01.configuration-iinkts",{"title":148,"path":149,"stem":150,"children":151,"page":40},"REST","\u002Fdocs\u002Fcloud\u002F4.5\u002Frest","docs\u002Fcloud\u002F4.5\u002F06.rest",[152,156,160,164,168],{"title":153,"path":154,"stem":155},"MyScript iink SDK Web REST Overview","\u002Fdocs\u002Fcloud\u002F4.5\u002Frest\u002Farchitecture","docs\u002Fcloud\u002F4.5\u002F06.rest\u002F01.architecture",{"title":157,"path":158,"stem":159},"MyScript iink SDK Web REST Recognizer API","\u002Fdocs\u002Fcloud\u002F4.5\u002Frest\u002Fnew-api","docs\u002Fcloud\u002F4.5\u002F06.rest\u002F02.new-api",{"title":161,"path":162,"stem":163},"Recognizer configuration","\u002Fdocs\u002Fcloud\u002F4.5\u002Frest\u002Fconfiguration-recognizer-rest","docs\u002Fcloud\u002F4.5\u002F06.rest\u002F03.configuration-recognizer-rest",{"title":165,"path":166,"stem":167},"MyScript iink SDK Web REST Batch API","\u002Fdocs\u002Fcloud\u002F4.5\u002Frest\u002Flegacy-api","docs\u002Fcloud\u002F4.5\u002F06.rest\u002F04.legacy-api",{"title":169,"path":170,"stem":171},"Batch configuration","\u002Fdocs\u002Fcloud\u002F4.5\u002Frest\u002Fconfiguration-rest","docs\u002Fcloud\u002F4.5\u002F06.rest\u002F05.configuration-rest",{"title":173,"path":174,"stem":175,"children":176,"page":40},"WebSockets","\u002Fdocs\u002Fcloud\u002F4.5\u002Fwebsockets","docs\u002Fcloud\u002F4.5\u002F07.websockets",[177,181,185,189,193],{"title":178,"path":179,"stem":180},"MyScript iink SDK WebSockets API architecture","\u002Fdocs\u002Fcloud\u002F4.5\u002Fwebsockets\u002Farchitecture","docs\u002Fcloud\u002F4.5\u002F07.websockets\u002F01.architecture",{"title":182,"path":183,"stem":184},"Offscreen interactivity mode messages","\u002Fdocs\u002Fcloud\u002F4.5\u002Fwebsockets\u002Fmessages-offscreen","docs\u002Fcloud\u002F4.5\u002F07.websockets\u002F02.messages-offscreen",{"title":186,"path":187,"stem":188},"Offscreen interactivity math messages","\u002Fdocs\u002Fcloud\u002F4.5\u002Fwebsockets\u002Fmath-offscreen","docs\u002Fcloud\u002F4.5\u002F07.websockets\u002F03.math-offscreen",{"title":190,"path":191,"stem":192},"Onscreen interactivity mode messages","\u002Fdocs\u002Fcloud\u002F4.5\u002Fwebsockets\u002Fmessages-onscreen","docs\u002Fcloud\u002F4.5\u002F07.websockets\u002F04.messages-onscreen",{"title":144,"path":194,"stem":195},"\u002Fdocs\u002Fcloud\u002F4.5\u002Fwebsockets\u002Fconfiguration-ws","docs\u002Fcloud\u002F4.5\u002F07.websockets\u002F05.configuration-ws",{"title":197,"path":198,"stem":199,"children":200,"page":40},"Specific","\u002Fdocs\u002Fcloud\u002F4.5\u002Fspecific","docs\u002Fcloud\u002F4.5\u002F08.specific",[201,205],{"title":202,"path":203,"stem":204},"Text recognition candidates","\u002Fdocs\u002Fcloud\u002F4.5\u002Fspecific\u002Ftext-recognition-candidates","docs\u002Fcloud\u002F4.5\u002F08.specific\u002F01.text-recognition-candidates",{"title":206,"path":207,"stem":208},"Recognition resources","\u002Fdocs\u002Fcloud\u002F4.5\u002Fspecific\u002Fcustom-recognition","docs\u002Fcloud\u002F4.5\u002F08.specific\u002F02.custom-recognition",{"title":210,"path":211,"stem":212,"children":213,"page":40},"Server","\u002Fdocs\u002Fcloud\u002F4.5\u002Fserver","docs\u002Fcloud\u002F4.5\u002F09.server",[214,218,222,226,230],{"title":215,"path":216,"stem":217},"MyScript Server Installation Preamble and Prerequisites","\u002Fdocs\u002Fcloud\u002F4.5\u002Fserver\u002Fpreamble-prerequisites","docs\u002Fcloud\u002F4.5\u002F09.server\u002F01.preamble-prerequisites",{"title":219,"path":220,"stem":221},"MyScript Server Monoserver Installation Documentation","\u002Fdocs\u002Fcloud\u002F4.5\u002Fserver\u002Fmonoserver-installation","docs\u002Fcloud\u002F4.5\u002F09.server\u002F02.monoserver-installation",{"title":223,"path":224,"stem":225},"MyScript Server Production Installation Documentation","\u002Fdocs\u002Fcloud\u002F4.5\u002Fserver\u002Fproduction-installation","docs\u002Fcloud\u002F4.5\u002F09.server\u002F03.production-installation",{"title":227,"path":228,"stem":229},"MyScript Server Migration Guide","\u002Fdocs\u002Fcloud\u002F4.5\u002Fserver\u002Fserver-migration-guide","docs\u002Fcloud\u002F4.5\u002F09.server\u002F04.server-migration-guide",{"title":231,"path":232,"stem":233},"MyScript Server Administration Guide","\u002Fdocs\u002Fcloud\u002F4.5\u002Fserver\u002Fadministration-guide","docs\u002Fcloud\u002F4.5\u002F09.server\u002F05.administration-guide",{"title":139,"path":235,"stem":236,"children":237,"page":40},"\u002Fdocs\u002Fcloud\u002F4.5\u002Freference","docs\u002Fcloud\u002F4.5\u002F10.reference",[238],{"title":239,"path":240,"stem":241},"JIIX format reference","\u002Fdocs\u002Fcloud\u002F4.5\u002Freference\u002Fjiix","docs\u002Fcloud\u002F4.5\u002F10.reference\u002F01.jiix",{"title":243,"path":244,"stem":245,"children":246,"page":40},"Concepts","\u002Fdocs\u002Fconcepts","docs\u002Fconcepts",[247,250,254],{"title":20,"path":248,"stem":249},"\u002Fdocs\u002Fconcepts\u002Foverview","docs\u002Fconcepts\u002F01.overview",{"title":251,"path":252,"stem":253},"Glossary","\u002Fdocs\u002Fconcepts\u002Fglossary","docs\u002Fconcepts\u002F02.glossary",{"title":255,"path":256,"stem":257,"children":258,"page":40},"Fundamentals","\u002Fdocs\u002Fconcepts\u002Ffundamentals","docs\u002Fconcepts\u002F03.fundamentals",[259,263,292,312],{"title":260,"path":261,"stem":262},"OCR vs digital ink recognition","\u002Fdocs\u002Fconcepts\u002Ffundamentals\u002Fdigital-ink-vs-ocr","docs\u002Fconcepts\u002F03.fundamentals\u002F01.digital-ink-vs-ocr",{"title":264,"path":265,"stem":266,"children":267,"page":40},"Ink interpretation","\u002Fdocs\u002Fconcepts\u002Ffundamentals\u002Fink-interpretation","docs\u002Fconcepts\u002F03.fundamentals\u002F02.ink-interpretation",[268,272,276,280,284,288],{"title":269,"path":270,"stem":271},"Ink processing","\u002Fdocs\u002Fconcepts\u002Ffundamentals\u002Fink-interpretation\u002Fink-interpretation","docs\u002Fconcepts\u002F03.fundamentals\u002F02.ink-interpretation\u002F01.ink-interpretation",{"title":273,"path":274,"stem":275},"Recognition features","\u002Fdocs\u002Fconcepts\u002Ffundamentals\u002Fink-interpretation\u002Fcontent-types","docs\u002Fconcepts\u002F03.fundamentals\u002F02.ink-interpretation\u002F02.content-types",{"title":277,"path":278,"stem":279},"Ink classification","\u002Fdocs\u002Fconcepts\u002Ffundamentals\u002Fink-interpretation\u002Fink-classification","docs\u002Fconcepts\u002F03.fundamentals\u002F02.ink-interpretation\u002F03.ink-classification",{"title":281,"path":282,"stem":283},"What are batch mode and incremental mode?","\u002Fdocs\u002Fconcepts\u002Ffundamentals\u002Fink-interpretation\u002Fbatch-mode","docs\u002Fconcepts\u002F03.fundamentals\u002F02.ink-interpretation\u002F04.batch-mode",{"title":285,"path":286,"stem":287},"Gestures and context","\u002Fdocs\u002Fconcepts\u002Ffundamentals\u002Fink-interpretation\u002Fcontext-gestures","docs\u002Fconcepts\u002F03.fundamentals\u002F02.ink-interpretation\u002F05.context-gestures",{"title":289,"path":290,"stem":291},"What is interactivity","\u002Fdocs\u002Fconcepts\u002Ffundamentals\u002Fink-interpretation\u002Finteractive-ink","docs\u002Fconcepts\u002F03.fundamentals\u002F02.ink-interpretation\u002F06.interactive-ink",{"title":293,"path":294,"stem":295,"children":296,"page":40},"Rendering-driven interactivity","\u002Fdocs\u002Fconcepts\u002Ffundamentals\u002Frendering-driven-interactivity","docs\u002Fconcepts\u002F03.fundamentals\u002F03.rendering-driven-interactivity",[297,301,304,308],{"title":298,"path":299,"stem":300},"Ink capture","\u002Fdocs\u002Fconcepts\u002Ffundamentals\u002Frendering-driven-interactivity\u002Fink-capture","docs\u002Fconcepts\u002F03.fundamentals\u002F03.rendering-driven-interactivity\u002F01.ink-capture",{"title":76,"path":302,"stem":303},"\u002Fdocs\u002Fconcepts\u002Ffundamentals\u002Frendering-driven-interactivity\u002Fediting-gestures","docs\u002Fconcepts\u002F03.fundamentals\u002F03.rendering-driven-interactivity\u002F02.editing-gestures",{"title":305,"path":306,"stem":307},"Smart tools","\u002Fdocs\u002Fconcepts\u002Ffundamentals\u002Frendering-driven-interactivity\u002Fsmart-tools","docs\u002Fconcepts\u002F03.fundamentals\u002F03.rendering-driven-interactivity\u002F03.smart-tools",{"title":309,"path":310,"stem":311},"Responsive and productive","\u002Fdocs\u002Fconcepts\u002Ffundamentals\u002Frendering-driven-interactivity\u002Fresponsive-layout","docs\u002Fconcepts\u002F03.fundamentals\u002F03.rendering-driven-interactivity\u002F04.responsive-layout",{"title":313,"path":314,"stem":315,"children":316,"page":40},"Handwriting generation","\u002Fdocs\u002Fconcepts\u002Ffundamentals\u002Fhandwriting-generation","docs\u002Fconcepts\u002F03.fundamentals\u002F04.handwriting-generation",[317],{"title":313,"path":318,"stem":319},"\u002Fdocs\u002Fconcepts\u002Ffundamentals\u002Fhandwriting-generation\u002Fhandwriting-generation","docs\u002Fconcepts\u002F03.fundamentals\u002F04.handwriting-generation\u002F01.handwriting-generation",{"title":321,"path":322,"stem":323,"children":324,"page":40},"Sdk","\u002Fdocs\u002Fsdk","docs\u002Fsdk",[325],{"title":15,"path":326,"stem":327,"children":328,"page":40},"\u002Fdocs\u002Fsdk\u002F4.5","docs\u002Fsdk\u002F4.5",[329,333,336,339,349,368,381,393,401,417,426,463,467,470,474,477,484],{"title":330,"path":331,"stem":332},"About MyScript iink SDK","\u002Fdocs\u002Fsdk\u002F4.5\u002Fabout","docs\u002Fsdk\u002F4.5\u002F01.about",{"title":33,"path":334,"stem":335},"\u002Fdocs\u002Fsdk\u002F4.5\u002Fchangelog","docs\u002Fsdk\u002F4.5\u002F02.changelog",{"title":37,"path":337,"stem":338},"\u002Fdocs\u002Fsdk\u002F4.5\u002Fmigration-guide","docs\u002Fsdk\u002F4.5\u002F03.migration-guide",{"title":42,"path":340,"stem":341,"children":342,"page":40},"\u002Fdocs\u002Fsdk\u002F4.5\u002Fintegration","docs\u002Fsdk\u002F4.5\u002F04.integration",[343,346],{"title":47,"path":344,"stem":345},"\u002Fdocs\u002Fsdk\u002F4.5\u002Fintegration\u002Fplatforms","docs\u002Fsdk\u002F4.5\u002F04.integration\u002F01.platforms",{"title":51,"path":347,"stem":348},"\u002Fdocs\u002Fsdk\u002F4.5\u002Fintegration\u002Fintegration-levels","docs\u002Fsdk\u002F4.5\u002F04.integration\u002F02.integration-levels",{"title":55,"path":350,"stem":351,"children":352,"page":40},"\u002Fdocs\u002Fsdk\u002F4.5\u002Frecognition-capabilities","docs\u002Fsdk\u002F4.5\u002F05.recognition-capabilities",[353,356,359,362,365],{"title":60,"path":354,"stem":355},"\u002Fdocs\u002Fsdk\u002F4.5\u002Frecognition-capabilities\u002Frecognizers","docs\u002Fsdk\u002F4.5\u002F05.recognition-capabilities\u002F01.recognizers",{"title":64,"path":357,"stem":358},"\u002Fdocs\u002Fsdk\u002F4.5\u002Frecognition-capabilities\u002Ftext-languages","docs\u002Fsdk\u002F4.5\u002F05.recognition-capabilities\u002F02.text-languages",{"title":68,"path":360,"stem":361},"\u002Fdocs\u002Fsdk\u002F4.5\u002Frecognition-capabilities\u002Fmath-elements-and-rules","docs\u002Fsdk\u002F4.5\u002F05.recognition-capabilities\u002F03.math-elements-and-rules",{"title":72,"path":363,"stem":364},"\u002Fdocs\u002Fsdk\u002F4.5\u002Frecognition-capabilities\u002Fdiagram-features","docs\u002Fsdk\u002F4.5\u002F05.recognition-capabilities\u002F04.diagram-features",{"title":76,"path":366,"stem":367},"\u002Fdocs\u002Fsdk\u002F4.5\u002Frecognition-capabilities\u002Fgestures","docs\u002Fsdk\u002F4.5\u002F05.recognition-capabilities\u002F05.gestures",{"title":80,"path":369,"stem":370,"children":371,"page":40},"\u002Fdocs\u002Fsdk\u002F4.5\u002Finteractivity-integration","docs\u002Fsdk\u002F4.5\u002F06.interactivity-integration",[372,375,378],{"title":85,"path":373,"stem":374},"\u002Fdocs\u002Fsdk\u002F4.5\u002Finteractivity-integration\u002Fcontent-types","docs\u002Fsdk\u002F4.5\u002F06.interactivity-integration\u002F01.content-types",{"title":89,"path":376,"stem":377},"\u002Fdocs\u002Fsdk\u002F4.5\u002Finteractivity-integration\u002Finteractive-features","docs\u002Fsdk\u002F4.5\u002F06.interactivity-integration\u002F02.interactive-features",{"title":93,"path":379,"stem":380},"\u002Fdocs\u002Fsdk\u002F4.5\u002Finteractivity-integration\u002Fimport-and-export-formats","docs\u002Fsdk\u002F4.5\u002F06.interactivity-integration\u002F03.import-and-export-formats",{"title":106,"path":382,"stem":383,"children":384,"page":40},"\u002Fdocs\u002Fsdk\u002F4.5\u002Fgetting-started","docs\u002Fsdk\u002F4.5\u002F07.getting-started",[385,389],{"title":386,"path":387,"stem":388},"Setup","\u002Fdocs\u002Fsdk\u002F4.5\u002Fgetting-started\u002Fsetup","docs\u002Fsdk\u002F4.5\u002F07.getting-started\u002F01.setup",{"title":390,"path":391,"stem":392},"Instantiate Engine","\u002Fdocs\u002Fsdk\u002F4.5\u002Fgetting-started\u002Finteractive-ink-runtime","docs\u002Fsdk\u002F4.5\u002F07.getting-started\u002F02.interactive-ink-runtime",{"title":394,"path":395,"stem":396,"children":397,"page":40},"Recognizer","\u002Fdocs\u002Fsdk\u002F4.5\u002Frecognizer","docs\u002Fsdk\u002F4.5\u002F08.recognizer",[398],{"title":60,"path":399,"stem":400},"\u002Fdocs\u002Fsdk\u002F4.5\u002Frecognizer\u002Frecognizers","docs\u002Fsdk\u002F4.5\u002F08.recognizer\u002F01.recognizers",{"title":402,"path":403,"stem":404,"children":405,"page":40},"Interactivity specific","\u002Fdocs\u002Fsdk\u002F4.5\u002Finteractivity","docs\u002Fsdk\u002F4.5\u002F09.interactivity",[406,410,413],{"title":407,"path":408,"stem":409},"Storage","\u002Fdocs\u002Fsdk\u002F4.5\u002Finteractivity\u002Fstorage","docs\u002Fsdk\u002F4.5\u002F09.interactivity\u002F01.storage",{"title":97,"path":411,"stem":412},"\u002Fdocs\u002Fsdk\u002F4.5\u002Finteractivity\u002Fmath-features","docs\u002Fsdk\u002F4.5\u002F09.interactivity\u002F02.math-features",{"title":414,"path":415,"stem":416},"Integrate with the undo\u002Fredo stack of your application","\u002Fdocs\u002Fsdk\u002F4.5\u002Finteractivity\u002Fcombined-undo-redo-stacks","docs\u002Fsdk\u002F4.5\u002F09.interactivity\u002F03.combined-undo-redo-stacks",{"title":418,"path":419,"stem":420,"children":421,"page":40},"OffScreenEditor specific","\u002Fdocs\u002Fsdk\u002F4.5\u002Foffscreen-editor","docs\u002Fsdk\u002F4.5\u002F10.offscreen-editor",[422],{"title":423,"path":424,"stem":425},"OffscreenEditor","\u002Fdocs\u002Fsdk\u002F4.5\u002Foffscreen-editor\u002Foff-screen-usage","docs\u002Fsdk\u002F4.5\u002F10.offscreen-editor\u002F01.off-screen-usage",{"title":427,"path":428,"stem":429,"children":430,"page":40},"Editor specific","\u002Fdocs\u002Fsdk\u002F4.5\u002Feditor","docs\u002Fsdk\u002F4.5\u002F11.editor",[431,435,439,443,447,451,455,459],{"title":432,"path":433,"stem":434},"Rendering","\u002Fdocs\u002Fsdk\u002F4.5\u002Feditor\u002Frendering","docs\u002Fsdk\u002F4.5\u002F11.editor\u002F01.rendering",{"title":436,"path":437,"stem":438},"Editing","\u002Fdocs\u002Fsdk\u002F4.5\u002Feditor\u002Fediting","docs\u002Fsdk\u002F4.5\u002F11.editor\u002F02.editing",{"title":440,"path":441,"stem":442},"Tool controller","\u002Fdocs\u002Fsdk\u002F4.5\u002Feditor\u002Ftool-controller","docs\u002Fsdk\u002F4.5\u002F11.editor\u002F03.tool-controller",{"title":444,"path":445,"stem":446},"Selection and block","\u002Fdocs\u002Fsdk\u002F4.5\u002Feditor\u002Fblock-selection-management","docs\u002Fsdk\u002F4.5\u002F11.editor\u002F04.block-selection-management",{"title":448,"path":449,"stem":450},"Conversion","\u002Fdocs\u002Fsdk\u002F4.5\u002Feditor\u002Fconversion","docs\u002Fsdk\u002F4.5\u002F11.editor\u002F05.conversion",{"title":452,"path":453,"stem":454},"Zooming and scrolling","\u002Fdocs\u002Fsdk\u002F4.5\u002Feditor\u002Fzooming-and-scrolling","docs\u002Fsdk\u002F4.5\u002F11.editor\u002F06.zooming-and-scrolling",{"title":456,"path":457,"stem":458},"Styling","\u002Fdocs\u002Fsdk\u002F4.5\u002Feditor\u002Fstyling","docs\u002Fsdk\u002F4.5\u002F11.editor\u002F07.styling",{"title":460,"path":461,"stem":462},"Custom inking","\u002Fdocs\u002Fsdk\u002F4.5\u002Feditor\u002Fcustom-inking","docs\u002Fsdk\u002F4.5\u002F11.editor\u002F08.custom-inking",{"title":464,"path":465,"stem":466},"Result, import and export","\u002Fdocs\u002Fsdk\u002F4.5\u002Fimport-and-export","docs\u002Fsdk\u002F4.5\u002F12.import-and-export",{"title":202,"path":468,"stem":469},"\u002Fdocs\u002Fsdk\u002F4.5\u002Ftext-recognition-candidates","docs\u002Fsdk\u002F4.5\u002F13.text-recognition-candidates",{"title":471,"path":472,"stem":473},"Error management","\u002Fdocs\u002Fsdk\u002F4.5\u002Ferror-management","docs\u002Fsdk\u002F4.5\u002F14.error-management",{"title":206,"path":475,"stem":476},"\u002Fdocs\u002Fsdk\u002F4.5\u002Fcustom-recognition","docs\u002Fsdk\u002F4.5\u002F15.custom-recognition",{"title":313,"path":478,"stem":479,"children":480,"page":40},"\u002Fdocs\u002Fsdk\u002F4.5\u002Fhandwriting-generation","docs\u002Fsdk\u002F4.5\u002F16.handwriting-generation",[481],{"title":313,"path":482,"stem":483},"\u002Fdocs\u002Fsdk\u002F4.5\u002Fhandwriting-generation\u002Fhandwriting-generation","docs\u002Fsdk\u002F4.5\u002F16.handwriting-generation\u002F01.handwriting-generation",{"title":139,"path":485,"stem":486,"children":487,"page":40},"\u002Fdocs\u002Fsdk\u002F4.5\u002Freference","docs\u002Fsdk\u002F4.5\u002F17.reference",[488,491,494],{"title":144,"path":489,"stem":490},"\u002Fdocs\u002Fsdk\u002F4.5\u002Freference\u002Fconfiguration","docs\u002Fsdk\u002F4.5\u002F17.reference\u002F01.configuration",{"title":239,"path":492,"stem":493},"\u002Fdocs\u002Fsdk\u002F4.5\u002Freference\u002Fjiix","docs\u002Fsdk\u002F4.5\u002F17.reference\u002F02.jiix",{"title":495,"path":496,"stem":497},"Styling reference","\u002Fdocs\u002Fsdk\u002F4.5\u002Freference\u002Fstyling","docs\u002Fsdk\u002F4.5\u002F17.reference\u002F03.styling",{"path":499,"page":500},"\u002Fdocs\u002Fsdk\u002F4.4\u002Feditor\u002Fcustom-inking",{"id":501,"title":460,"body":502,"canonicalPath":461,"description":4490,"extension":4491,"icon":4492,"meta":4493,"navTitle":4494,"navigation":1053,"path":499,"resolveKey":4495,"resolveVersion":4496,"seo":4497,"stem":4498,"__hash__":4499},"sdk44\u002Fdocs\u002Fsdk\u002F4.4\u002F11.editor\u002F08.custom-inking.md",{"type":503,"value":504,"toc":4478},"minimark",[505,509,514,534,544,547,551,554,557,588,595,599,606,609,618,621,625,628,941,945,948,953,960,2030,2036,2039,2317,2325,2517,2525,2623,2626,2630,2642,2656,2663,3271,3274,3757,3771,3959,3986,4431,4475],[506,507,508],"p",{},"This page explains how to customize iink SDK stroke rendering.",[510,511,513],"h2",{"id":512},"terminology","Terminology",[506,515,516,517,521,522,525,526,529,530,533],{},"In MyScript terminology, \"inking\" refers to the process of rendering ink strokes. An inking algorithm typically processes the ",[518,519,520],"strong",{},"coordinates of the points"," of a\nstroke, their associated ",[518,523,524],{},"pressure"," or ",[518,527,528],{},"timestamp"," information, as well as ",[518,531,532],{},"stroke styling"," such as color or width. It consists of two main steps:",[535,536,537,541],"ol",{},[538,539,540],"li",{},"computation of the envelope (i.e. the geometry of the stroke),",[538,542,543],{},"drawing of the stroke itself.",[506,545,546],{},"While iink SDK comes with its own built-in inking, the toolkit is flexible enough to let you customize these steps.",[510,548,550],{"id":549},"use-cases","Use cases",[506,552,553],{},"If you are integrating iink SDK into an application that already implements its own inking capabilities, you may want to make sure that the same rendering\nalgorithm is used for both iink- and application-managed content.",[506,555,556],{},"MyScript iink SDK can be tuned to address the following use cases:",[558,559,560,573],"ul",{},[538,561,562,563,566,567,572],{},"You just want to ",[518,564,565],{},"influence the shape of the strokes"," to render and let iink SDK draw the strokes by stroking or filling the envelop you define. In this\ncase, all you have to do is to ",[568,569,571],"a",{"href":570},"#custom-stroker","implement and register your own stroker",".",[538,574,575,576,579,580,583,584,572],{},"You additionally want to ",[518,577,578],{},"draw the strokes by yourself",", for instance if you need to draw textured strokes or if you rely on a rendering technology like\nOpenGL and want to use particles instead  of filling an envelope. In this case, in addition to ",[568,581,582],{"href":570},"implement your own stroker"," (it is required\nby iink SDK, as explained in the following section), you will need to store information into  generated path to be able to use them to ",[568,585,587],{"href":586},"#custom-drawing-of-the-strokes","render the strokes by\nyourself",[589,590,592],"callout",{"color":591},"secondary",[506,593,594],{},"This inking customization should be considered with special care as modifying the default implementation might reduce drastically the rendering performance.",[510,596,598],{"id":597},"requirements-from-iink-sdk","Requirements from iink SDK",[506,600,601,602,605],{},"Independently from the amount of customization you intend to apply to stroke rendering, iink SDK ",[518,603,604],{},"needs to know as precisely as possible the envelope of the\nstrokes"," you intend to draw.",[506,607,608],{},"An envelope corresponds to the geometrical shape of the stroke, as shown in the following illustration:",[506,610,611],{},[612,613],"img",{"alt":614,"height":615,"src":616,"width":617},"",167.51701,"\u002Fdocs\u002Fimages\u002Fstroke-envelope.svg",319.3894,[506,619,620],{},"Among other things, knowing the envelops of the strokes lets iink SDK optimize rendering operations (by computing areas to refresh following changes in the\nmodel), know which items to render at a given point in time and manage the geometry of selections. A precise envelop definition is key to get good results.",[510,622,624],{"id":623},"how-to-use-the-api","How to use the API",[506,626,627],{},"To define your own stroker, you should:",[629,630,631,763,862,899,915,923,929,933],"partial",{},[632,633,634,698,720,733,739,746],"template",{"v-slot:swift":614},[535,635,636,656,667,690],{},[538,637,638,639,643,644,647,648,651,652,655],{},"Define a custom stroker object that adopts the ",[640,641,642],"code",{},"IINKIStroker"," protocol: its ",[640,645,646],{},"stroke"," and  ",[640,649,650],{},"isFill"," methods respectively let you return the envelop of a given stroke as an ",[640,653,654],{},"IINKIPath"," instance\nand choose whether iink SDK shall fill or just stroke the resulting path.",[538,657,658,659,662,663,666],{},"Define a custom stroker factory that conforms to the ",[640,660,661],{},"IINKIStrokerFactory"," protocol: the ",[640,664,665],{},"createStroker"," method will let you return an instance of your custom stroker.",[538,668,669,670,673,674,677,678,681,682,684,685,689],{},"Instantiate your custom stroker factory and register it to your ",[640,671,672],{},"IINKRenderer"," class with the ",[640,675,676],{},"registerStroker"," method (you can unregister it later using\n",[640,679,680],{},"unregisterStroker"," method of the ",[640,683,672],{},"). This method will also let you specify the name of the ",[686,687,688],"em",{},"brush"," corresponding to your stroker.",[538,691,692,693,697],{},"Use the brush name you defined to ",[568,694,696],{"href":695},"\u002Fdocs\u002Fsdk\u002F4.4\u002Feditor\u002Fstyling","style"," the ink.",[506,699,700,701,703,704,681,706,708,709,711,712,715,716,719],{},"To render the strokes by yourself, you may need to have your own implementation of ",[640,702,654],{}," to store stroke information provided via the ",[640,705,646],{},[640,707,642],{}," interface.\nData stored within ",[640,710,654],{}," objects will then be available in ",[640,713,714],{},"IINKICanvas"," ",[640,717,718],{},"drawPath"," method for you to draw the stroke in a custom way.",[589,721,722],{"color":591},[506,723,724,725,727,728,732],{},"A platform-specific implementation of the ",[640,726,654],{}," protocol is provided for each target platform via the\n",[568,729,731],{"href":730},"\u002Fdocs\u002Fsdk\u002F4.4\u002Feditor\u002Frendering#reference-implementation","UI Reference Implementation",". You may adapt or subclass it to store the stroke information.",[506,734,735,736,738],{},"Note that depending on whether you close or not your paths and the value you return with ",[640,737,650],{},", you will define a different envelope. The following figure shows in black the resulting envelope depending on the options and the state of the path in red:",[506,740,741],{},[612,742],{"alt":614,"height":743,"src":744,"width":745},283.51199,"\u002Fdocs\u002Fimages\u002Fstroke-fill-style.svg",450.35379,[506,747,748,749,752,753,755,756,759,760,762],{},"As you can see, if you choose to return ",[640,750,751],{},"false"," in the ",[640,754,650],{}," property, iink SDK will consider a larger envelope than what is strictly returned by your path,\nas it will take into account the pixel width of the stroke (",[640,757,758],{},"width"," parameter of the ",[640,761,646],{}," method) to stroke the path.",[632,764,765,817,834,843,848,852],{"v-slot:csharp":614},[535,766,767,785,794,813],{},[538,768,769,770,773,774,777,778,781,782,655],{},"Implement the ",[640,771,772],{},"IStroker"," interface: its ",[640,775,776],{},"Stroke"," and ",[640,779,780],{},"IsFill"," methods respectively let you retrieve the envelop of a given stroke as an ",[640,783,784],{},"IPath",[538,786,769,787,790,791,666],{},[640,788,789],{},"IStrokerFactory"," interface: the ",[640,792,793],{},"CreateStroker()",[538,795,796,797,800,801,677,804,807,808,810,811,689],{},"Instantiate your custom stroker factory and register it with the ",[640,798,799],{},"IRenderer"," interface ",[640,802,803],{},"RegisterStroker()",[640,805,806],{},"UnregisterStroker()"," method on the ",[640,809,799],{}," interface ). This method will also let you specify the name of the ",[686,812,688],{},[538,814,692,815,697],{},[568,816,696],{"href":695},[506,818,700,819,821,822,681,824,708,826,711,828,715,831,719],{},[640,820,784],{}," to store stroke information provided via ",[640,823,776],{},[640,825,772],{},[640,827,784],{},[640,829,830],{},"ICanvas",[640,832,833],{},"DrawPath()",[589,835,836],{"color":591},[506,837,724,838,840,841,732],{},[640,839,784],{}," interface is provided for each target platform via the\n",[568,842,731],{"href":730},[506,844,735,845,738],{},[640,846,847],{},"IsFill()",[506,849,850],{},[612,851],{"alt":614,"height":743,"src":744,"width":745},[506,853,748,854,752,856,858,859,861],{},[640,855,751],{},[640,857,847],{}," method, iink SDK will consider a larger envelope than what is strictly returned by your path,\nas it will take into account the pixel width of the stroke (",[640,860,758],{}," parameter of the method) to stroke the path.",[535,863,864,874,881,895],{},[538,865,769,866,773,868,777,870,651,872,655],{},[640,867,772],{},[640,869,646],{},[640,871,650],{},[640,873,784],{},[538,875,769,876,790,878,666],{},[640,877,789],{},[640,879,880],{},"createStroker()",[538,882,796,883,800,885,677,888,807,891,810,893,689],{},[640,884,799],{},[640,886,887],{},"registerStroker()",[640,889,890],{},"unregisterStroker()",[640,892,799],{},[686,894,688],{},[538,896,692,897,697],{},[568,898,696],{"href":695},[506,900,700,901,821,903,681,906,708,908,711,910,715,912,719],{},[640,902,784],{},[640,904,905],{},"#{strokeMethodName}",[640,907,772],{},[640,909,784],{},[640,911,830],{},[640,913,914],{},"drawPath()",[589,916,917],{"color":591},[506,918,724,919,840,921,732],{},[640,920,784],{},[568,922,731],{"href":730},[506,924,735,925,928],{},[640,926,927],{},"isFill()",", you will define a different envelope. The followingfigure shows in black the resulting envelope depending on the options and the state of the path in red:",[506,930,931],{},[612,932],{"alt":614,"height":743,"src":744,"width":745},[506,934,748,935,752,937,858,939,861],{},[640,936,751],{},[640,938,927],{},[640,940,758],{},[510,942,944],{"id":943},"code-snippets","Code snippets",[506,946,947],{},"For the sake of example, this section shows how to implement a very basic inking algorithm based on \"line to\" instructions. If you are interested to develop\nyour own inking, you will likely implement something both smarter and better looking, but the structure of the code will be similar.",[949,950,952],"h3",{"id":951},"custom-stroker","Custom stroker",[506,954,955,956,959],{},"Let's start by implementing the ",[640,957,958],{},"CustomStroker"," class:",[629,961,962,1257,1512,1809],{},[632,963,964],{"v-slot:java":614},[965,966,970],"pre",{"className":967,"code":968,"language":969,"meta":614,"style":614},"language-java shiki shiki-themes blue-hacker-light blue-hacker-light blue-hacker-dark","public class CustomStroker implements IStroker\n{\n    @Override\n    public boolean isFill()\n    {\n        return false;\n    }\n\n    @Override\n    public void stroke(InkPoint[] input, float width, float pixelSize, IPath output)\n    {\n        output.moveTo(input[0].x, input[0].y);\n        for (int i=1; i\u003C input.length; i++)\n        {\n            output.lineTo(input[i].x, input[i].y);\n        }\n    }\n}\n","java",[640,971,972,995,1002,1011,1023,1029,1042,1048,1055,1062,1109,1114,1155,1200,1206,1240,1246,1251],{"__ignoreMap":614},[973,974,977,981,984,988,991],"span",{"class":975,"line":976},"line",1,[973,978,980],{"class":979},"sglaT","public",[973,982,983],{"class":979}," class",[973,985,987],{"class":986},"sVYTS"," CustomStroker",[973,989,990],{"class":979}," implements",[973,992,994],{"class":993},"sZBTK"," IStroker\n",[973,996,998],{"class":975,"line":997},2,[973,999,1001],{"class":1000},"soFc9","{\n",[973,1003,1005,1008],{"class":975,"line":1004},3,[973,1006,1007],{"class":1000},"    @",[973,1009,1010],{"class":979},"Override\n",[973,1012,1014,1017,1020],{"class":975,"line":1013},4,[973,1015,1016],{"class":979},"    public",[973,1018,1019],{"class":979}," boolean",[973,1021,1022],{"class":1000}," isFill()\n",[973,1024,1026],{"class":975,"line":1025},5,[973,1027,1028],{"class":1000},"    {\n",[973,1030,1032,1035,1039],{"class":975,"line":1031},6,[973,1033,1034],{"class":1000},"        return",[973,1036,1038],{"class":1037},"sU2JI"," false",[973,1040,1041],{"class":1000},";\n",[973,1043,1045],{"class":975,"line":1044},7,[973,1046,1047],{"class":1000},"    }\n",[973,1049,1051],{"class":975,"line":1050},8,[973,1052,1054],{"emptyLinePlaceholder":1053},true,"\n",[973,1056,1058,1060],{"class":975,"line":1057},9,[973,1059,1007],{"class":1000},[973,1061,1010],{"class":979},[973,1063,1065,1067,1070,1073,1076,1079,1082,1085,1088,1091,1093,1095,1098,1100,1103,1106],{"class":975,"line":1064},10,[973,1066,1016],{"class":979},[973,1068,1069],{"class":979}," void",[973,1071,1072],{"class":1000}," stroke(",[973,1074,1075],{"class":979},"InkPoint",[973,1077,1078],{"class":1000},"[]",[973,1080,1081],{"class":1037}," input",[973,1083,1084],{"class":1000},",",[973,1086,1087],{"class":979}," float",[973,1089,1090],{"class":1037}," width",[973,1092,1084],{"class":1000},[973,1094,1087],{"class":979},[973,1096,1097],{"class":1037}," pixelSize",[973,1099,1084],{"class":1000},[973,1101,1102],{"class":979}," IPath",[973,1104,1105],{"class":1037}," output",[973,1107,1108],{"class":1000},")\n",[973,1110,1112],{"class":975,"line":1111},11,[973,1113,1028],{"class":1000},[973,1115,1117,1121,1124,1127,1130,1133,1136,1139,1141,1143,1145,1147,1149,1152],{"class":975,"line":1116},12,[973,1118,1120],{"class":1119},"sEQEB","        output",[973,1122,1123],{"class":1000},".moveTo(",[973,1125,1126],{"class":1119},"input",[973,1128,1129],{"class":1000},"[",[973,1131,1132],{"class":1037},"0",[973,1134,1135],{"class":1000},"].",[973,1137,1138],{"class":1119},"x",[973,1140,1084],{"class":1000},[973,1142,1081],{"class":1119},[973,1144,1129],{"class":1000},[973,1146,1132],{"class":1037},[973,1148,1135],{"class":1000},[973,1150,1151],{"class":1119},"y",[973,1153,1154],{"class":1000},");\n",[973,1156,1158,1161,1164,1167,1170,1173,1176,1179,1181,1184,1186,1188,1191,1193,1195,1198],{"class":975,"line":1157},13,[973,1159,1160],{"class":1000},"        for",[973,1162,1163],{"class":1000}," (",[973,1165,1166],{"class":979},"int",[973,1168,1169],{"class":1119}," i",[973,1171,1172],{"class":979},"=",[973,1174,1175],{"class":1037},"1",[973,1177,1178],{"class":1000},";",[973,1180,1169],{"class":1119},[973,1182,1183],{"class":979},"\u003C",[973,1185,1081],{"class":1119},[973,1187,572],{"class":1000},[973,1189,1190],{"class":1119},"length",[973,1192,1178],{"class":1000},[973,1194,1169],{"class":1119},[973,1196,1197],{"class":979},"++",[973,1199,1108],{"class":1000},[973,1201,1203],{"class":975,"line":1202},14,[973,1204,1205],{"class":1000},"        {\n",[973,1207,1209,1212,1215,1217,1219,1222,1224,1226,1228,1230,1232,1234,1236,1238],{"class":975,"line":1208},15,[973,1210,1211],{"class":1119},"            output",[973,1213,1214],{"class":1000},".lineTo(",[973,1216,1126],{"class":1119},[973,1218,1129],{"class":1000},[973,1220,1221],{"class":1119},"i",[973,1223,1135],{"class":1000},[973,1225,1138],{"class":1119},[973,1227,1084],{"class":1000},[973,1229,1081],{"class":1119},[973,1231,1129],{"class":1000},[973,1233,1221],{"class":1119},[973,1235,1135],{"class":1000},[973,1237,1151],{"class":1119},[973,1239,1154],{"class":1000},[973,1241,1243],{"class":975,"line":1242},16,[973,1244,1245],{"class":1000},"        }\n",[973,1247,1249],{"class":975,"line":1248},17,[973,1250,1047],{"class":1000},[973,1252,1254],{"class":975,"line":1253},18,[973,1255,1256],{"class":1119},"}\n",[632,1258,1259],{"v-slot:swift":614},[965,1260,1264],{"className":1261,"code":1262,"language":1263,"meta":614,"style":614},"language-objective-c shiki shiki-themes blue-hacker-light blue-hacker-light blue-hacker-dark","@implementation CustomStroker\n\n- (BOOL)isFill\n{\n    return NO;\n}\n\n- (void)stroke:(nonnull IINKPoint *)input\n        count:(NSInteger)count\n        width:(float)width\n        pixelSize:(float)pixelSize\n        output:(nonnull id\u003CIINKIPath>)output\n{\n    [output moveTo:CGPointMake(input[0].x, input[0].y)];\n\n    for (int i = 1; i \u003C count; ++i)\n        [output lineTo:CGPointMake(input[i].x, input[i].y)];\n}\n\n@end\n","objective-c",[640,1265,1266,1277,1281,1295,1299,1309,1313,1317,1344,1358,1371,1383,1403,1407,1436,1440,1475,1495,1499,1504],{"__ignoreMap":614},[973,1267,1268,1271,1274],{"class":975,"line":976},[973,1269,1270],{"class":1000},"@",[973,1272,1273],{"class":979},"implementation",[973,1275,1276],{"class":986}," CustomStroker\n",[973,1278,1279],{"class":975,"line":997},[973,1280,1054],{"emptyLinePlaceholder":1053},[973,1282,1283,1286,1289,1292],{"class":975,"line":1004},[973,1284,1285],{"class":1119},"- ",[973,1287,1288],{"class":1000},"(",[973,1290,1291],{"class":979},"BOOL",[973,1293,1294],{"class":1000},")isFill\n",[973,1296,1297],{"class":975,"line":1013},[973,1298,1001],{"class":1000},[973,1300,1301,1304,1307],{"class":975,"line":1025},[973,1302,1303],{"class":1000},"    return",[973,1305,1306],{"class":1037}," NO",[973,1308,1041],{"class":1000},[973,1310,1311],{"class":975,"line":1031},[973,1312,1256],{"class":1000},[973,1314,1315],{"class":975,"line":1044},[973,1316,1054],{"emptyLinePlaceholder":1053},[973,1318,1319,1321,1323,1326,1329,1332,1335,1338,1341],{"class":975,"line":1050},[973,1320,1285],{"class":1119},[973,1322,1288],{"class":1000},[973,1324,1325],{"class":979},"void",[973,1327,1328],{"class":1000},")stroke:(",[973,1330,1331],{"class":979},"nonnull",[973,1333,1334],{"class":1119}," IINKPoint ",[973,1336,1337],{"class":979},"*",[973,1339,1340],{"class":1000},")",[973,1342,1343],{"class":1037},"input\n",[973,1345,1346,1349,1353,1355],{"class":975,"line":1057},[973,1347,1348],{"class":1000},"        count:(",[973,1350,1352],{"class":1351},"stZ3G","NSInteger",[973,1354,1340],{"class":1000},[973,1356,1357],{"class":1037},"count\n",[973,1359,1360,1363,1366,1368],{"class":975,"line":1064},[973,1361,1362],{"class":1000},"        width:(",[973,1364,1365],{"class":979},"float",[973,1367,1340],{"class":1000},[973,1369,1370],{"class":1037},"width\n",[973,1372,1373,1376,1378,1380],{"class":975,"line":1111},[973,1374,1375],{"class":1000},"        pixelSize:(",[973,1377,1365],{"class":979},[973,1379,1340],{"class":1000},[973,1381,1382],{"class":1037},"pixelSize\n",[973,1384,1385,1388,1390,1393,1395,1397,1400],{"class":975,"line":1116},[973,1386,1387],{"class":1000},"        output:(",[973,1389,1331],{"class":979},[973,1391,1392],{"class":979}," id",[973,1394,1183],{"class":1000},[973,1396,654],{"class":1119},[973,1398,1399],{"class":1000},">)",[973,1401,1402],{"class":1037},"output\n",[973,1404,1405],{"class":975,"line":1157},[973,1406,1001],{"class":1000},[973,1408,1409,1412,1415,1418,1420,1422,1424,1427,1429,1431,1433],{"class":975,"line":1202},[973,1410,1411],{"class":1000},"    [",[973,1413,1414],{"class":1119},"output ",[973,1416,1417],{"class":1000},"moveTo:CGPointMake(",[973,1419,1126],{"class":1119},[973,1421,1129],{"class":1000},[973,1423,1132],{"class":1037},[973,1425,1426],{"class":1000},"].x, ",[973,1428,1126],{"class":1119},[973,1430,1129],{"class":1000},[973,1432,1132],{"class":1037},[973,1434,1435],{"class":1000},"].y)];\n",[973,1437,1438],{"class":975,"line":1208},[973,1439,1054],{"emptyLinePlaceholder":1053},[973,1441,1442,1445,1447,1449,1452,1454,1457,1459,1461,1463,1466,1468,1471,1473],{"class":975,"line":1242},[973,1443,1444],{"class":1000},"    for",[973,1446,1163],{"class":1000},[973,1448,1166],{"class":979},[973,1450,1451],{"class":1119}," i ",[973,1453,1172],{"class":979},[973,1455,1456],{"class":1037}," 1",[973,1458,1178],{"class":1000},[973,1460,1451],{"class":1119},[973,1462,1183],{"class":979},[973,1464,1465],{"class":1119}," count",[973,1467,1178],{"class":1000},[973,1469,1470],{"class":979}," ++",[973,1472,1221],{"class":1119},[973,1474,1108],{"class":1000},[973,1476,1477,1480,1482,1485,1487,1490,1492],{"class":975,"line":1248},[973,1478,1479],{"class":1000},"        [",[973,1481,1414],{"class":1119},[973,1483,1484],{"class":1000},"lineTo:CGPointMake(",[973,1486,1126],{"class":1119},[973,1488,1489],{"class":1000},"[i].x, ",[973,1491,1126],{"class":1119},[973,1493,1494],{"class":1000},"[i].y)];\n",[973,1496,1497],{"class":975,"line":1253},[973,1498,1256],{"class":1000},[973,1500,1502],{"class":975,"line":1501},19,[973,1503,1054],{"emptyLinePlaceholder":1053},[973,1505,1507,1509],{"class":975,"line":1506},20,[973,1508,1270],{"class":1000},[973,1510,1511],{"class":979},"end\n",[632,1513,1514],{"v-slot:cpp":614},[965,1515,1519],{"className":1516,"code":1517,"language":1518,"meta":614,"style":614},"language-cpp shiki shiki-themes blue-hacker-light blue-hacker-light blue-hacker-dark","class CustomStroker : public IStroker\n{\npublic:\n  CustomStroker() {}\n\npublic:\n  virtual bool isFill() const noexcept\n  {\n    return false;\n  }\n\n  virtual void stroke(const std::vector\u003CInkPoint>& input, float width, float pixelSize, std::shared_ptr\u003CIPath> output) noexcept\n  {\n    int count = input.size();\n\n    output->moveTo(input[0].x, input[0].y);\n\n    for(int i = 1; i \u003C count; i++)\n    {\n        output->lineTo(input[i].x,input[i].y);\n    }\n  }\n};\n","cpp",[640,1520,1521,1536,1540,1547,1555,1559,1565,1582,1587,1595,1600,1604,1669,1673,1688,1692,1724,1728,1758,1762,1793,1798,1803],{"__ignoreMap":614},[973,1522,1523,1526,1528,1531,1534],{"class":975,"line":976},[973,1524,1525],{"class":979},"class",[973,1527,987],{"class":986},[973,1529,1530],{"class":1000}," :",[973,1532,1533],{"class":979}," public",[973,1535,994],{"class":986},[973,1537,1538],{"class":975,"line":997},[973,1539,1001],{"class":1000},[973,1541,1542,1544],{"class":975,"line":1004},[973,1543,980],{"class":979},[973,1545,1546],{"class":1000},":\n",[973,1548,1549,1552],{"class":975,"line":1013},[973,1550,1551],{"class":1000},"  CustomStroker()",[973,1553,1554],{"class":1000}," {}\n",[973,1556,1557],{"class":975,"line":1025},[973,1558,1054],{"emptyLinePlaceholder":1053},[973,1560,1561,1563],{"class":975,"line":1031},[973,1562,980],{"class":979},[973,1564,1546],{"class":1000},[973,1566,1567,1570,1573,1576,1579],{"class":975,"line":1044},[973,1568,1569],{"class":979},"  virtual",[973,1571,1572],{"class":979}," bool",[973,1574,1575],{"class":1000}," isFill()",[973,1577,1578],{"class":979}," const",[973,1580,1581],{"class":979}," noexcept\n",[973,1583,1584],{"class":975,"line":1050},[973,1585,1586],{"class":1000},"  {\n",[973,1588,1589,1591,1593],{"class":975,"line":1057},[973,1590,1303],{"class":1000},[973,1592,1038],{"class":1037},[973,1594,1041],{"class":1000},[973,1596,1597],{"class":975,"line":1064},[973,1598,1599],{"class":1000},"  }\n",[973,1601,1602],{"class":975,"line":1111},[973,1603,1054],{"emptyLinePlaceholder":1053},[973,1605,1606,1608,1610,1612,1615,1618,1621,1624,1626,1628,1631,1634,1636,1638,1640,1642,1644,1646,1648,1650,1652,1654,1657,1659,1661,1663,1665,1667],{"class":975,"line":1116},[973,1607,1569],{"class":979},[973,1609,1069],{"class":979},[973,1611,1072],{"class":1000},[973,1613,1614],{"class":979},"const",[973,1616,1617],{"class":986}," std",[973,1619,1620],{"class":1000},"::",[973,1622,1623],{"class":986},"vector",[973,1625,1183],{"class":1000},[973,1627,1075],{"class":986},[973,1629,1630],{"class":1000},">",[973,1632,1633],{"class":979},"&",[973,1635,1081],{"class":1037},[973,1637,1084],{"class":1000},[973,1639,1087],{"class":979},[973,1641,1090],{"class":1037},[973,1643,1084],{"class":1000},[973,1645,1087],{"class":979},[973,1647,1097],{"class":1037},[973,1649,1084],{"class":1000},[973,1651,1617],{"class":986},[973,1653,1620],{"class":1000},[973,1655,1656],{"class":986},"shared_ptr",[973,1658,1183],{"class":1000},[973,1660,784],{"class":986},[973,1662,1630],{"class":1000},[973,1664,1105],{"class":1037},[973,1666,1340],{"class":1000},[973,1668,1581],{"class":979},[973,1670,1671],{"class":975,"line":1157},[973,1672,1586],{"class":1000},[973,1674,1675,1678,1680,1683,1685],{"class":975,"line":1202},[973,1676,1677],{"class":979},"    int",[973,1679,1465],{"class":1037},[973,1681,1682],{"class":979}," =",[973,1684,1081],{"class":1037},[973,1686,1687],{"class":1000},".size();\n",[973,1689,1690],{"class":975,"line":1208},[973,1691,1054],{"emptyLinePlaceholder":1053},[973,1693,1694,1697,1700,1702,1704,1706,1708,1710,1712,1714,1716,1718,1720,1722],{"class":975,"line":1242},[973,1695,1696],{"class":1037},"    output",[973,1698,1699],{"class":1000},"->moveTo(",[973,1701,1126],{"class":1037},[973,1703,1129],{"class":1000},[973,1705,1132],{"class":1037},[973,1707,1135],{"class":1000},[973,1709,1138],{"class":1037},[973,1711,1084],{"class":1000},[973,1713,1081],{"class":1037},[973,1715,1129],{"class":1000},[973,1717,1132],{"class":1037},[973,1719,1135],{"class":1000},[973,1721,1151],{"class":1037},[973,1723,1154],{"class":1000},[973,1725,1726],{"class":975,"line":1248},[973,1727,1054],{"emptyLinePlaceholder":1053},[973,1729,1730,1733,1735,1737,1739,1741,1743,1745,1748,1750,1752,1754,1756],{"class":975,"line":1253},[973,1731,1732],{"class":1000},"    for(",[973,1734,1166],{"class":979},[973,1736,1169],{"class":1037},[973,1738,1682],{"class":979},[973,1740,1456],{"class":1037},[973,1742,1178],{"class":1000},[973,1744,1169],{"class":1037},[973,1746,1747],{"class":979}," \u003C",[973,1749,1465],{"class":1037},[973,1751,1178],{"class":1000},[973,1753,1169],{"class":1037},[973,1755,1197],{"class":979},[973,1757,1108],{"class":1000},[973,1759,1760],{"class":975,"line":1501},[973,1761,1028],{"class":1000},[973,1763,1764,1766,1769,1771,1773,1775,1777,1779,1781,1783,1785,1787,1789,1791],{"class":975,"line":1506},[973,1765,1120],{"class":1037},[973,1767,1768],{"class":1000},"->lineTo(",[973,1770,1126],{"class":1037},[973,1772,1129],{"class":1000},[973,1774,1221],{"class":1037},[973,1776,1135],{"class":1000},[973,1778,1138],{"class":1037},[973,1780,1084],{"class":1000},[973,1782,1126],{"class":1037},[973,1784,1129],{"class":1000},[973,1786,1221],{"class":1037},[973,1788,1135],{"class":1000},[973,1790,1151],{"class":1037},[973,1792,1154],{"class":1000},[973,1794,1796],{"class":975,"line":1795},21,[973,1797,1047],{"class":1000},[973,1799,1801],{"class":975,"line":1800},22,[973,1802,1599],{"class":1000},[973,1804,1806],{"class":975,"line":1805},23,[973,1807,1808],{"class":1000},"};\n",[632,1810,1811],{"v-slot:csharp":614},[965,1812,1816],{"className":1813,"code":1814,"language":1815,"meta":614,"style":614},"language-csharp shiki shiki-themes blue-hacker-light blue-hacker-light blue-hacker-dark","public class CustomStroker : IStroker\n{\n    public bool IsFill()\n    {\n        return false;\n    }\n\n    public void Stroke(InkPoint[] input, float width, float pixelSize, IPath output)\n    {\n        int count = input.Length;\n        output.MoveTo(input[0].X, input[0].Y);\n        for (int i = 1; i \u003C count; i++)\n        {\n            output.LineTo(input[i].X, input[i].Y);\n        }\n    }\n}\n","csharp",[640,1817,1818,1830,1834,1843,1847,1855,1859,1863,1898,1902,1920,1953,1983,1987,2018,2022,2026],{"__ignoreMap":614},[973,1819,1820,1822,1824,1826,1828],{"class":975,"line":976},[973,1821,980],{"class":979},[973,1823,983],{"class":979},[973,1825,987],{"class":986},[973,1827,1530],{"class":1000},[973,1829,994],{"class":986},[973,1831,1832],{"class":975,"line":997},[973,1833,1001],{"class":1000},[973,1835,1836,1838,1840],{"class":975,"line":1004},[973,1837,1016],{"class":979},[973,1839,1572],{"class":979},[973,1841,1842],{"class":1000}," IsFill()\n",[973,1844,1845],{"class":975,"line":1013},[973,1846,1028],{"class":1000},[973,1848,1849,1851,1853],{"class":975,"line":1025},[973,1850,1034],{"class":1000},[973,1852,1038],{"class":1037},[973,1854,1041],{"class":1000},[973,1856,1857],{"class":975,"line":1031},[973,1858,1047],{"class":1000},[973,1860,1861],{"class":975,"line":1044},[973,1862,1054],{"emptyLinePlaceholder":1053},[973,1864,1865,1867,1869,1872,1874,1876,1878,1880,1882,1884,1886,1888,1890,1892,1894,1896],{"class":975,"line":1050},[973,1866,1016],{"class":979},[973,1868,1069],{"class":979},[973,1870,1871],{"class":1000}," Stroke(",[973,1873,1075],{"class":986},[973,1875,1078],{"class":1000},[973,1877,1081],{"class":986},[973,1879,1084],{"class":1000},[973,1881,1087],{"class":979},[973,1883,1090],{"class":986},[973,1885,1084],{"class":1000},[973,1887,1087],{"class":979},[973,1889,1097],{"class":986},[973,1891,1084],{"class":1000},[973,1893,1102],{"class":986},[973,1895,1105],{"class":986},[973,1897,1108],{"class":1000},[973,1899,1900],{"class":975,"line":1057},[973,1901,1028],{"class":1000},[973,1903,1904,1907,1909,1911,1913,1915,1918],{"class":975,"line":1064},[973,1905,1906],{"class":979},"        int",[973,1908,1465],{"class":986},[973,1910,1682],{"class":979},[973,1912,1081],{"class":1119},[973,1914,572],{"class":1000},[973,1916,1917],{"class":1119},"Length",[973,1919,1041],{"class":1000},[973,1921,1922,1924,1927,1929,1931,1933,1935,1938,1940,1942,1944,1946,1948,1951],{"class":975,"line":1111},[973,1923,1120],{"class":1119},[973,1925,1926],{"class":1000},".MoveTo(",[973,1928,1126],{"class":1119},[973,1930,1129],{"class":1000},[973,1932,1132],{"class":1037},[973,1934,1135],{"class":1000},[973,1936,1937],{"class":1119},"X",[973,1939,1084],{"class":1000},[973,1941,1081],{"class":1119},[973,1943,1129],{"class":1000},[973,1945,1132],{"class":1037},[973,1947,1135],{"class":1000},[973,1949,1950],{"class":1119},"Y",[973,1952,1154],{"class":1000},[973,1954,1955,1957,1959,1961,1963,1965,1967,1969,1971,1973,1975,1977,1979,1981],{"class":975,"line":1116},[973,1956,1160],{"class":1000},[973,1958,1163],{"class":1000},[973,1960,1166],{"class":979},[973,1962,1169],{"class":986},[973,1964,1682],{"class":979},[973,1966,1456],{"class":1037},[973,1968,1178],{"class":1000},[973,1970,1451],{"class":1119},[973,1972,1183],{"class":979},[973,1974,1465],{"class":1119},[973,1976,1178],{"class":1000},[973,1978,1169],{"class":1119},[973,1980,1197],{"class":979},[973,1982,1108],{"class":1000},[973,1984,1985],{"class":975,"line":1157},[973,1986,1205],{"class":1000},[973,1988,1989,1991,1994,1996,1998,2000,2002,2004,2006,2008,2010,2012,2014,2016],{"class":975,"line":1202},[973,1990,1211],{"class":1119},[973,1992,1993],{"class":1000},".LineTo(",[973,1995,1126],{"class":1119},[973,1997,1129],{"class":1000},[973,1999,1221],{"class":1119},[973,2001,1135],{"class":1000},[973,2003,1937],{"class":1119},[973,2005,1084],{"class":1000},[973,2007,1081],{"class":1119},[973,2009,1129],{"class":1000},[973,2011,1221],{"class":1119},[973,2013,1135],{"class":1000},[973,2015,1950],{"class":1119},[973,2017,1154],{"class":1000},[973,2019,2020],{"class":975,"line":1208},[973,2021,1245],{"class":1000},[973,2023,2024],{"class":975,"line":1242},[973,2025,1047],{"class":1000},[973,2027,2028],{"class":975,"line":1248},[973,2029,1256],{"class":1000},[506,2031,2032,2033,2035],{},"Here, the code uses the fact that a non-filled, non-closed path will be stroked by iink SDK to simplify the code. In most cases, however, you will want to\nmanage closed paths to create a beautiful shape for the stroke. The ",[640,2034,1075],{}," structure contains all required information about the points of the stroke.",[506,2037,2038],{},"Now, let's implement the custom stroker factory:",[629,2040,2041,2104,2172,2262],{},[632,2042,2043],{"v-slot:java":614},[965,2044,2046],{"className":967,"code":2045,"language":969,"meta":614,"style":614},"public class CustomStrokerFactory implements IStrokerFactory\n{\n    @Override\n    public IStroker createStroker()\n    {\n        return new CustomStroker();\n    }\n}\n",[640,2047,2048,2062,2066,2072,2082,2086,2096,2100],{"__ignoreMap":614},[973,2049,2050,2052,2054,2057,2059],{"class":975,"line":976},[973,2051,980],{"class":979},[973,2053,983],{"class":979},[973,2055,2056],{"class":986}," CustomStrokerFactory",[973,2058,990],{"class":979},[973,2060,2061],{"class":993}," IStrokerFactory\n",[973,2063,2064],{"class":975,"line":997},[973,2065,1001],{"class":1000},[973,2067,2068,2070],{"class":975,"line":1004},[973,2069,1007],{"class":1000},[973,2071,1010],{"class":979},[973,2073,2074,2076,2079],{"class":975,"line":1013},[973,2075,1016],{"class":979},[973,2077,2078],{"class":979}," IStroker",[973,2080,2081],{"class":1000}," createStroker()\n",[973,2083,2084],{"class":975,"line":1025},[973,2085,1028],{"class":1000},[973,2087,2088,2090,2093],{"class":975,"line":1031},[973,2089,1034],{"class":1000},[973,2091,2092],{"class":1000}," new",[973,2094,2095],{"class":1000}," CustomStroker();\n",[973,2097,2098],{"class":975,"line":1044},[973,2099,1047],{"class":1000},[973,2101,2102],{"class":975,"line":1050},[973,2103,1256],{"class":1119},[632,2105,2106],{"v-slot:swift":614},[965,2107,2109],{"className":1261,"code":2108,"language":1263,"meta":614,"style":614},"@implementation CustomStrokerFactory\n\n- (nonnull id\u003CIINKIStroker>)createStroker\n{\n    return [CustomStroker alloc];\n}\n\n@end\n",[640,2110,2111,2120,2124,2141,2145,2158,2162,2166],{"__ignoreMap":614},[973,2112,2113,2115,2117],{"class":975,"line":976},[973,2114,1270],{"class":1000},[973,2116,1273],{"class":979},[973,2118,2119],{"class":986}," CustomStrokerFactory\n",[973,2121,2122],{"class":975,"line":997},[973,2123,1054],{"emptyLinePlaceholder":1053},[973,2125,2126,2128,2130,2132,2134,2136,2138],{"class":975,"line":1004},[973,2127,1285],{"class":1119},[973,2129,1288],{"class":1000},[973,2131,1331],{"class":979},[973,2133,1392],{"class":979},[973,2135,1183],{"class":1000},[973,2137,642],{"class":1119},[973,2139,2140],{"class":1000},">)createStroker\n",[973,2142,2143],{"class":975,"line":1013},[973,2144,1001],{"class":1000},[973,2146,2147,2149,2152,2155],{"class":975,"line":1025},[973,2148,1303],{"class":1000},[973,2150,2151],{"class":1000}," [",[973,2153,2154],{"class":1119},"CustomStroker ",[973,2156,2157],{"class":1000},"alloc];\n",[973,2159,2160],{"class":975,"line":1031},[973,2161,1256],{"class":1000},[973,2163,2164],{"class":975,"line":1044},[973,2165,1054],{"emptyLinePlaceholder":1053},[973,2167,2168,2170],{"class":975,"line":1050},[973,2169,1270],{"class":1000},[973,2171,1511],{"class":979},[632,2173,2174],{"v-slot:cpp":614},[965,2175,2177],{"className":1516,"code":2176,"language":1518,"meta":614,"style":614},"class CustomStrokerFactory : public IStrokerFactory\n{\npublic:\n  CustomStrokerFactory() {}\n\npublic:\n  virtual std::shared_ptr\u003CIStroker> createStroker() {\n    return std::make_shared\u003CCustomStroker>();\n  }\n};\n",[640,2178,2179,2191,2195,2201,2208,2212,2218,2240,2254,2258],{"__ignoreMap":614},[973,2180,2181,2183,2185,2187,2189],{"class":975,"line":976},[973,2182,1525],{"class":979},[973,2184,2056],{"class":986},[973,2186,1530],{"class":1000},[973,2188,1533],{"class":979},[973,2190,2061],{"class":986},[973,2192,2193],{"class":975,"line":997},[973,2194,1001],{"class":1000},[973,2196,2197,2199],{"class":975,"line":1004},[973,2198,980],{"class":979},[973,2200,1546],{"class":1000},[973,2202,2203,2206],{"class":975,"line":1013},[973,2204,2205],{"class":1000},"  CustomStrokerFactory()",[973,2207,1554],{"class":1000},[973,2209,2210],{"class":975,"line":1025},[973,2211,1054],{"emptyLinePlaceholder":1053},[973,2213,2214,2216],{"class":975,"line":1031},[973,2215,980],{"class":979},[973,2217,1546],{"class":1000},[973,2219,2220,2222,2224,2226,2228,2230,2232,2234,2237],{"class":975,"line":1044},[973,2221,1569],{"class":979},[973,2223,1617],{"class":986},[973,2225,1620],{"class":1000},[973,2227,1656],{"class":986},[973,2229,1183],{"class":1000},[973,2231,772],{"class":986},[973,2233,1630],{"class":1000},[973,2235,2236],{"class":1000}," createStroker()",[973,2238,2239],{"class":1000}," {\n",[973,2241,2242,2244,2246,2249,2251],{"class":975,"line":1050},[973,2243,1303],{"class":1000},[973,2245,1617],{"class":986},[973,2247,2248],{"class":1000},"::make_shared\u003C",[973,2250,958],{"class":986},[973,2252,2253],{"class":1000},">();\n",[973,2255,2256],{"class":975,"line":1057},[973,2257,1599],{"class":1000},[973,2259,2260],{"class":975,"line":1064},[973,2261,1808],{"class":1000},[632,2263,2264],{"v-slot:csharp":614},[965,2265,2267],{"className":1813,"code":2266,"language":1815,"meta":614,"style":614},"public class CustomStrokerFactory : IStrokerFactory\n{\n    public IStroker CreateStroker()\n    {\n    return new CustomStroker();\n    }\n}\n",[640,2268,2269,2281,2285,2294,2298,2309,2313],{"__ignoreMap":614},[973,2270,2271,2273,2275,2277,2279],{"class":975,"line":976},[973,2272,980],{"class":979},[973,2274,983],{"class":979},[973,2276,2056],{"class":986},[973,2278,1530],{"class":1000},[973,2280,2061],{"class":986},[973,2282,2283],{"class":975,"line":997},[973,2284,1001],{"class":1000},[973,2286,2287,2289,2291],{"class":975,"line":1004},[973,2288,1016],{"class":979},[973,2290,2078],{"class":986},[973,2292,2293],{"class":1000}," CreateStroker()\n",[973,2295,2296],{"class":975,"line":1013},[973,2297,1028],{"class":1000},[973,2299,2300,2302,2304,2306],{"class":975,"line":1025},[973,2301,1303],{"class":1000},[973,2303,2092],{"class":979},[973,2305,987],{"class":986},[973,2307,2308],{"class":1000},"();\n",[973,2310,2311],{"class":975,"line":1031},[973,2312,1047],{"class":1000},[973,2314,2315],{"class":975,"line":1044},[973,2316,1256],{"class":1000},[506,2318,2319,2320,2324],{},"All you have to do now is to instantiate your factory and register it to the ",[568,2321,2323],{"href":2322},"\u002Fdocs\u002Fsdk\u002F4.4\u002Feditor\u002Frendering","renderer"," with an appropriate brush name:",[629,2326,2327,2371,2434,2475],{},[632,2328,2329],{"v-slot:java":614},[965,2330,2332],{"className":967,"code":2331,"language":969,"meta":614,"style":614},"CustomStrokerFactory strokerFactory = new CustomStrokerFactory();\nrenderer.registerStroker(\"LineToBrush\", strokerFactory);\n",[640,2333,2334,2349],{"__ignoreMap":614},[973,2335,2336,2339,2342,2344,2346],{"class":975,"line":976},[973,2337,2338],{"class":979},"CustomStrokerFactory",[973,2340,2341],{"class":1119}," strokerFactory ",[973,2343,1172],{"class":979},[973,2345,2092],{"class":1000},[973,2347,2348],{"class":1000}," CustomStrokerFactory();\n",[973,2350,2351,2353,2356,2359,2362,2364,2366,2369],{"class":975,"line":997},[973,2352,2323],{"class":1119},[973,2354,2355],{"class":1000},".registerStroker(",[973,2357,2358],{"class":1000},"\"",[973,2360,2361],{"class":993},"LineToBrush",[973,2363,2358],{"class":1000},[973,2365,1084],{"class":1000},[973,2367,2368],{"class":1119}," strokerFactory",[973,2370,1154],{"class":1000},[632,2372,2373],{"v-slot:swift":614},[965,2374,2376],{"className":1261,"code":2375,"language":1263,"meta":614,"style":614},"self.customStrokerFactory = [CustomStrokerFactory alloc];\nself.editor.renderer registerStroker:@\"LineToBrush\"\n                        factory:self.customStrokerFactory\n                        error:nil];\n",[640,2377,2378,2396,2411,2421],{"__ignoreMap":614},[973,2379,2380,2384,2387,2389,2391,2394],{"class":975,"line":976},[973,2381,2383],{"class":2382},"sYWwX","self",[973,2385,2386],{"class":1119},".customStrokerFactory ",[973,2388,1172],{"class":979},[973,2390,2151],{"class":1000},[973,2392,2393],{"class":1119},"CustomStrokerFactory ",[973,2395,2157],{"class":1000},[973,2397,2398,2400,2403,2406,2408],{"class":975,"line":997},[973,2399,2383],{"class":2382},[973,2401,2402],{"class":1119},".editor.renderer registerStroker:",[973,2404,2405],{"class":1000},"@\"",[973,2407,2361],{"class":993},[973,2409,2410],{"class":1000},"\"\n",[973,2412,2413,2416,2418],{"class":975,"line":1004},[973,2414,2415],{"class":1119},"                        factory:",[973,2417,2383],{"class":2382},[973,2419,2420],{"class":1119},".customStrokerFactory\n",[973,2422,2423,2426,2429,2432],{"class":975,"line":1013},[973,2424,2425],{"class":1119},"                        error:",[973,2427,2428],{"class":1037},"nil",[973,2430,2431],{"class":1119},"]",[973,2433,1041],{"class":1000},[632,2435,2436],{"v-slot:cpp":614},[965,2437,2439],{"className":1516,"code":2438,"language":1518,"meta":614,"style":614},"CustomStrokerFactory strokerFactory = std::make_shared\u003CCustomStrokerFactory>();\nrenderer->registerStroker(\"LineToBrush\", strokerFactory);\n",[640,2440,2441,2456],{"__ignoreMap":614},[973,2442,2443,2446,2448,2450,2452,2454],{"class":975,"line":976},[973,2444,2445],{"class":1119},"CustomStrokerFactory strokerFactory ",[973,2447,1172],{"class":979},[973,2449,1617],{"class":986},[973,2451,2248],{"class":1000},[973,2453,2338],{"class":986},[973,2455,2253],{"class":1000},[973,2457,2458,2460,2463,2465,2467,2469,2471,2473],{"class":975,"line":997},[973,2459,2323],{"class":1119},[973,2461,2462],{"class":1000},"->registerStroker(",[973,2464,2358],{"class":1000},[973,2466,2361],{"class":993},[973,2468,2358],{"class":1000},[973,2470,1084],{"class":1000},[973,2472,2368],{"class":1119},[973,2474,1154],{"class":1000},[632,2476,2477],{"v-slot:csharp":614},[965,2478,2480],{"className":1813,"code":2479,"language":1815,"meta":614,"style":614},"var customStrokerFactory = new CustomStrokerFactory();\nrenderer.RegisterStroker(\"LineToBrush\", customStrokerFactory);\n",[640,2481,2482,2498],{"__ignoreMap":614},[973,2483,2484,2487,2490,2492,2494,2496],{"class":975,"line":976},[973,2485,2486],{"class":979},"var",[973,2488,2489],{"class":986}," customStrokerFactory",[973,2491,1682],{"class":979},[973,2493,2092],{"class":979},[973,2495,2056],{"class":986},[973,2497,2308],{"class":1000},[973,2499,2500,2502,2505,2507,2509,2511,2513,2515],{"class":975,"line":997},[973,2501,2323],{"class":1119},[973,2503,2504],{"class":1000},".RegisterStroker(",[973,2506,2358],{"class":1000},[973,2508,2361],{"class":993},[973,2510,2358],{"class":1000},[973,2512,1084],{"class":1000},[973,2514,2489],{"class":1119},[973,2516,1154],{"class":1000},[506,2518,2519,2520,2524],{},"Finally, you can set the stroker in the theme of the ",[568,2521,2523],{"href":2522},"\u002Fdocs\u002Fsdk\u002F4.4\u002Feditor\u002Fediting","editor",":",[629,2526,2527,2550,2575,2597],{},[632,2528,2529],{"v-slot:java":614},[965,2530,2532],{"className":967,"code":2531,"language":969,"meta":614,"style":614},"editor.setTheme(\"stroke { -myscript-pen-brush: LineToBrush; }\");\n",[640,2533,2534],{"__ignoreMap":614},[973,2535,2536,2538,2541,2543,2546,2548],{"class":975,"line":976},[973,2537,2523],{"class":1119},[973,2539,2540],{"class":1000},".setTheme(",[973,2542,2358],{"class":1000},[973,2544,2545],{"class":993},"stroke { -myscript-pen-brush: LineToBrush; }",[973,2547,2358],{"class":1000},[973,2549,1154],{"class":1000},[632,2551,2552],{"v-slot:swift":614},[965,2553,2555],{"className":1261,"code":2554,"language":1263,"meta":614,"style":614},"self.editor.theme = @\"stroke { -myscript-pen-brush: LineToBrush; }\";\n",[640,2556,2557],{"__ignoreMap":614},[973,2558,2559,2561,2564,2566,2569,2571,2573],{"class":975,"line":976},[973,2560,2383],{"class":2382},[973,2562,2563],{"class":1119},".editor.theme ",[973,2565,1172],{"class":979},[973,2567,2568],{"class":1000}," @\"",[973,2570,2545],{"class":993},[973,2572,2358],{"class":1000},[973,2574,1041],{"class":1000},[632,2576,2577],{"v-slot:cpp":614},[965,2578,2580],{"className":1516,"code":2579,"language":1518,"meta":614,"style":614},"editor->setTheme(\"stroke { -myscript-pen-brush: LineToBrush; }\");\n",[640,2581,2582],{"__ignoreMap":614},[973,2583,2584,2586,2589,2591,2593,2595],{"class":975,"line":976},[973,2585,2523],{"class":1119},[973,2587,2588],{"class":1000},"->setTheme(",[973,2590,2358],{"class":1000},[973,2592,2545],{"class":993},[973,2594,2358],{"class":1000},[973,2596,1154],{"class":1000},[632,2598,2599],{"v-slot:csharp":614},[965,2600,2602],{"className":1813,"code":2601,"language":1815,"meta":614,"style":614},"editor.Theme=\"stroke { -myscript-pen-brush: LineToBrush; }\";\n",[640,2603,2604],{"__ignoreMap":614},[973,2605,2606,2608,2610,2613,2615,2617,2619,2621],{"class":975,"line":976},[973,2607,2523],{"class":1119},[973,2609,572],{"class":1000},[973,2611,2612],{"class":1119},"Theme",[973,2614,1172],{"class":979},[973,2616,2358],{"class":1000},[973,2618,2545],{"class":993},[973,2620,2358],{"class":1000},[973,2622,1041],{"class":1000},[506,2624,2625],{},"That's it! From now on, iink SDK will rely on your custom stroker to render ink strokes!",[949,2627,2629],{"id":2628},"custom-drawing-of-the-strokes","Custom drawing of the strokes",[506,2631,2632,2633,2636,2637,2641],{},"First, implement a custom stroker ",[568,2634,2635],{"href":570},"as described above"," to generate the paths. ",[568,2638,2640],{"href":2639},"#requirements-from-iink-sdk","As explained",", iink SDK requires the stroke envelopes for a variety of tasks even if you draw the strokes by yourself.",[629,2643,2644,2652],{},[632,2645,2646],{"v-slot:swift":614},[506,2647,2648,2649,2651],{},"Next, create your own implementation of ",[640,2650,654],{},"\n(you can modify or subclass the one provided by MyScript) so that you can use it to store information like point coordinates, pressure, etc. that you will need to render your stroke later. Via its internal cache, iink SDK will preserve this information for you and properly free the memory if the strokes are removed from the model.",[506,2653,2648,2654,2651],{},[640,2655,784],{},[506,2657,2658,2659,2662],{},"Here is a possible implementation, based on the ",[640,2660,2661],{},"Path"," class from the UI reference implementation:",[629,2664,2665,2869,3078,3157],{},[632,2666,2667],{"v-slot:java":614},[965,2668,2670],{"className":967,"code":2669,"language":969,"meta":614,"style":614},"public class CustomPath extends Path\n{\n    private InkPoint[] inkPoints;\n    private float width;\n\n    public float getWidth()\n    {\n        return width;\n    }\n\n    public void setWidth(float width)\n    {\n        this.width = width;\n    }\n\n    public InkPoint[] getInkPoints()\n    {\n        return inkPoints;\n    }\n\n    public void setInkPoints(InkPoint[] inkPoints)\n    {\n        this.inkPoints = inkPoints;\n    }\n}\n",[640,2671,2672,2687,2691,2706,2716,2720,2729,2733,2741,2745,2749,2764,2768,2784,2788,2792,2803,2807,2815,2819,2823,2840,2844,2859,2864],{"__ignoreMap":614},[973,2673,2674,2676,2678,2681,2684],{"class":975,"line":976},[973,2675,980],{"class":979},[973,2677,983],{"class":979},[973,2679,2680],{"class":986}," CustomPath",[973,2682,2683],{"class":979}," extends",[973,2685,2686],{"class":993}," Path\n",[973,2688,2689],{"class":975,"line":997},[973,2690,1001],{"class":1000},[973,2692,2693,2696,2699,2701,2704],{"class":975,"line":1004},[973,2694,2695],{"class":979},"    private",[973,2697,2698],{"class":979}," InkPoint",[973,2700,1078],{"class":1000},[973,2702,2703],{"class":1119}," inkPoints",[973,2705,1041],{"class":1000},[973,2707,2708,2710,2712,2714],{"class":975,"line":1013},[973,2709,2695],{"class":979},[973,2711,1087],{"class":979},[973,2713,1090],{"class":1119},[973,2715,1041],{"class":1000},[973,2717,2718],{"class":975,"line":1025},[973,2719,1054],{"emptyLinePlaceholder":1053},[973,2721,2722,2724,2726],{"class":975,"line":1031},[973,2723,1016],{"class":979},[973,2725,1087],{"class":979},[973,2727,2728],{"class":1000}," getWidth()\n",[973,2730,2731],{"class":975,"line":1044},[973,2732,1028],{"class":1000},[973,2734,2735,2737,2739],{"class":975,"line":1050},[973,2736,1034],{"class":1000},[973,2738,1090],{"class":1119},[973,2740,1041],{"class":1000},[973,2742,2743],{"class":975,"line":1057},[973,2744,1047],{"class":1000},[973,2746,2747],{"class":975,"line":1064},[973,2748,1054],{"emptyLinePlaceholder":1053},[973,2750,2751,2753,2755,2758,2760,2762],{"class":975,"line":1111},[973,2752,1016],{"class":979},[973,2754,1069],{"class":979},[973,2756,2757],{"class":1000}," setWidth(",[973,2759,1365],{"class":979},[973,2761,1090],{"class":1037},[973,2763,1108],{"class":1000},[973,2765,2766],{"class":975,"line":1116},[973,2767,1028],{"class":1000},[973,2769,2770,2773,2775,2778,2780,2782],{"class":975,"line":1157},[973,2771,2772],{"class":2382},"        this",[973,2774,572],{"class":1000},[973,2776,2777],{"class":1119},"width ",[973,2779,1172],{"class":979},[973,2781,1090],{"class":1119},[973,2783,1041],{"class":1000},[973,2785,2786],{"class":975,"line":1202},[973,2787,1047],{"class":1000},[973,2789,2790],{"class":975,"line":1208},[973,2791,1054],{"emptyLinePlaceholder":1053},[973,2793,2794,2796,2798,2800],{"class":975,"line":1242},[973,2795,1016],{"class":979},[973,2797,2698],{"class":979},[973,2799,1078],{"class":1000},[973,2801,2802],{"class":1000}," getInkPoints()\n",[973,2804,2805],{"class":975,"line":1248},[973,2806,1028],{"class":1000},[973,2808,2809,2811,2813],{"class":975,"line":1253},[973,2810,1034],{"class":1000},[973,2812,2703],{"class":1119},[973,2814,1041],{"class":1000},[973,2816,2817],{"class":975,"line":1501},[973,2818,1047],{"class":1000},[973,2820,2821],{"class":975,"line":1506},[973,2822,1054],{"emptyLinePlaceholder":1053},[973,2824,2825,2827,2829,2832,2834,2836,2838],{"class":975,"line":1795},[973,2826,1016],{"class":979},[973,2828,1069],{"class":979},[973,2830,2831],{"class":1000}," setInkPoints(",[973,2833,1075],{"class":979},[973,2835,1078],{"class":1000},[973,2837,2703],{"class":1037},[973,2839,1108],{"class":1000},[973,2841,2842],{"class":975,"line":1800},[973,2843,1028],{"class":1000},[973,2845,2846,2848,2850,2853,2855,2857],{"class":975,"line":1805},[973,2847,2772],{"class":2382},[973,2849,572],{"class":1000},[973,2851,2852],{"class":1119},"inkPoints ",[973,2854,1172],{"class":979},[973,2856,2703],{"class":1119},[973,2858,1041],{"class":1000},[973,2860,2862],{"class":975,"line":2861},24,[973,2863,1047],{"class":1000},[973,2865,2867],{"class":975,"line":2866},25,[973,2868,1256],{"class":1119},[632,2870,2871],{"v-slot:swift":614},[965,2872,2874],{"className":1261,"code":2873,"language":1263,"meta":614,"style":614},"@interface Path ()\n\n@end\n\n@implementation CustomPath\n\n- (float)getWidth{\n  return self.width;\n}\n\n- (void)setWidth:(float)width\n{\n  _width = width;\n}\n\n- (void)setInkPoints:(IINKPoint *)inkPoints\n{\n  _inkPoints = inkPoints;\n}\n\n- (IINKPoint *)getInkPoints\n{\n  return self.inkPoints;\n}\n\n@end\n",[640,2875,2876,2889,2893,2899,2903,2912,2916,2927,2941,2945,2949,2966,2970,2981,2985,2989,3010,3014,3025,3029,3033,3046,3050,3063,3067,3071],{"__ignoreMap":614},[973,2877,2878,2880,2883,2886],{"class":975,"line":976},[973,2879,1270],{"class":1000},[973,2881,2882],{"class":979},"interface",[973,2884,2885],{"class":986}," Path",[973,2887,2888],{"class":1000}," ()\n",[973,2890,2891],{"class":975,"line":997},[973,2892,1054],{"emptyLinePlaceholder":1053},[973,2894,2895,2897],{"class":975,"line":1004},[973,2896,1270],{"class":1000},[973,2898,1511],{"class":979},[973,2900,2901],{"class":975,"line":1013},[973,2902,1054],{"emptyLinePlaceholder":1053},[973,2904,2905,2907,2909],{"class":975,"line":1025},[973,2906,1270],{"class":1000},[973,2908,1273],{"class":979},[973,2910,2911],{"class":986}," CustomPath\n",[973,2913,2914],{"class":975,"line":1031},[973,2915,1054],{"emptyLinePlaceholder":1053},[973,2917,2918,2920,2922,2924],{"class":975,"line":1044},[973,2919,1285],{"class":1119},[973,2921,1288],{"class":1000},[973,2923,1365],{"class":979},[973,2925,2926],{"class":1000},")getWidth{\n",[973,2928,2929,2932,2935,2937,2939],{"class":975,"line":1050},[973,2930,2931],{"class":1000},"  return",[973,2933,2934],{"class":2382}," self",[973,2936,572],{"class":1000},[973,2938,758],{"class":1037},[973,2940,1041],{"class":1000},[973,2942,2943],{"class":975,"line":1057},[973,2944,1256],{"class":1000},[973,2946,2947],{"class":975,"line":1064},[973,2948,1054],{"emptyLinePlaceholder":1053},[973,2950,2951,2953,2955,2957,2960,2962,2964],{"class":975,"line":1111},[973,2952,1285],{"class":1119},[973,2954,1288],{"class":1000},[973,2956,1325],{"class":979},[973,2958,2959],{"class":1000},")setWidth:(",[973,2961,1365],{"class":979},[973,2963,1340],{"class":1000},[973,2965,1370],{"class":1037},[973,2967,2968],{"class":975,"line":1116},[973,2969,1001],{"class":1000},[973,2971,2972,2975,2977,2979],{"class":975,"line":1157},[973,2973,2974],{"class":1119},"  _width ",[973,2976,1172],{"class":979},[973,2978,1090],{"class":1119},[973,2980,1041],{"class":1000},[973,2982,2983],{"class":975,"line":1202},[973,2984,1256],{"class":1000},[973,2986,2987],{"class":975,"line":1208},[973,2988,1054],{"emptyLinePlaceholder":1053},[973,2990,2991,2993,2995,2997,3000,3003,3005,3007],{"class":975,"line":1242},[973,2992,1285],{"class":1119},[973,2994,1288],{"class":1000},[973,2996,1325],{"class":979},[973,2998,2999],{"class":1000},")setInkPoints:(",[973,3001,3002],{"class":1119},"IINKPoint ",[973,3004,1337],{"class":979},[973,3006,1340],{"class":1000},[973,3008,3009],{"class":1037},"inkPoints\n",[973,3011,3012],{"class":975,"line":1248},[973,3013,1001],{"class":1000},[973,3015,3016,3019,3021,3023],{"class":975,"line":1253},[973,3017,3018],{"class":1119},"  _inkPoints ",[973,3020,1172],{"class":979},[973,3022,2703],{"class":1119},[973,3024,1041],{"class":1000},[973,3026,3027],{"class":975,"line":1501},[973,3028,1256],{"class":1000},[973,3030,3031],{"class":975,"line":1506},[973,3032,1054],{"emptyLinePlaceholder":1053},[973,3034,3035,3037,3039,3041,3043],{"class":975,"line":1795},[973,3036,1285],{"class":1119},[973,3038,1288],{"class":1000},[973,3040,3002],{"class":1119},[973,3042,1337],{"class":979},[973,3044,3045],{"class":1000},")getInkPoints\n",[973,3047,3048],{"class":975,"line":1800},[973,3049,1001],{"class":1000},[973,3051,3052,3054,3056,3058,3061],{"class":975,"line":1805},[973,3053,2931],{"class":1000},[973,3055,2934],{"class":2382},[973,3057,572],{"class":1000},[973,3059,3060],{"class":1037},"inkPoints",[973,3062,1041],{"class":1000},[973,3064,3065],{"class":975,"line":2861},[973,3066,1256],{"class":1000},[973,3068,3069],{"class":975,"line":2866},[973,3070,1054],{"emptyLinePlaceholder":1053},[973,3072,3074,3076],{"class":975,"line":3073},26,[973,3075,1270],{"class":1000},[973,3077,1511],{"class":979},[632,3079,3080],{"v-slot:cpp":614},[965,3081,3083],{"className":1516,"code":3082,"language":1518,"meta":614,"style":614},"class CustomPath : public Path\n{\npublic:\n  CustomPath() {}\n\npublic:\n  std::vector\u003CInkPoint> points;\n  float width;\n};\n",[640,3084,3085,3097,3101,3107,3114,3118,3124,3144,3153],{"__ignoreMap":614},[973,3086,3087,3089,3091,3093,3095],{"class":975,"line":976},[973,3088,1525],{"class":979},[973,3090,2680],{"class":986},[973,3092,1530],{"class":1000},[973,3094,1533],{"class":979},[973,3096,2686],{"class":986},[973,3098,3099],{"class":975,"line":997},[973,3100,1001],{"class":1000},[973,3102,3103,3105],{"class":975,"line":1004},[973,3104,980],{"class":979},[973,3106,1546],{"class":1000},[973,3108,3109,3112],{"class":975,"line":1013},[973,3110,3111],{"class":1000},"  CustomPath()",[973,3113,1554],{"class":1000},[973,3115,3116],{"class":975,"line":1025},[973,3117,1054],{"emptyLinePlaceholder":1053},[973,3119,3120,3122],{"class":975,"line":1031},[973,3121,980],{"class":979},[973,3123,1546],{"class":1000},[973,3125,3126,3129,3131,3133,3135,3137,3139,3142],{"class":975,"line":1044},[973,3127,3128],{"class":986},"  std",[973,3130,1620],{"class":1000},[973,3132,1623],{"class":986},[973,3134,1183],{"class":1000},[973,3136,1075],{"class":986},[973,3138,1630],{"class":1000},[973,3140,3141],{"class":1037}," points",[973,3143,1041],{"class":1000},[973,3145,3146,3149,3151],{"class":975,"line":1050},[973,3147,3148],{"class":979},"  float",[973,3150,1090],{"class":1037},[973,3152,1041],{"class":1000},[973,3154,3155],{"class":975,"line":1057},[973,3156,1808],{"class":1000},[632,3158,3159],{"v-slot:csharp":614},[965,3160,3162],{"className":1813,"code":3161,"language":1815,"meta":614,"style":614},"public class CustomPath : Path\n{\n    public float _width { get; set; }\n    public InkPoint[] InkPoints { get; set; }\n\n    public CustomPath(CanvasDevice device) : base(device)\n    {\n    }\n};\n",[640,3163,3164,3176,3180,3205,3228,3232,3259,3263,3267],{"__ignoreMap":614},[973,3165,3166,3168,3170,3172,3174],{"class":975,"line":976},[973,3167,980],{"class":979},[973,3169,983],{"class":979},[973,3171,2680],{"class":986},[973,3173,1530],{"class":1000},[973,3175,2686],{"class":986},[973,3177,3178],{"class":975,"line":997},[973,3179,1001],{"class":1000},[973,3181,3182,3184,3186,3189,3192,3195,3197,3200,3202],{"class":975,"line":1004},[973,3183,1016],{"class":979},[973,3185,1087],{"class":979},[973,3187,3188],{"class":986}," _width",[973,3190,3191],{"class":1000}," {",[973,3193,3194],{"class":979}," get",[973,3196,1178],{"class":1000},[973,3198,3199],{"class":979}," set",[973,3201,1178],{"class":1000},[973,3203,3204],{"class":1000}," }\n",[973,3206,3207,3209,3211,3213,3216,3218,3220,3222,3224,3226],{"class":975,"line":1013},[973,3208,1016],{"class":979},[973,3210,2698],{"class":986},[973,3212,1078],{"class":1000},[973,3214,3215],{"class":986}," InkPoints",[973,3217,3191],{"class":1000},[973,3219,3194],{"class":979},[973,3221,1178],{"class":1000},[973,3223,3199],{"class":979},[973,3225,1178],{"class":1000},[973,3227,3204],{"class":1000},[973,3229,3230],{"class":975,"line":1025},[973,3231,1054],{"emptyLinePlaceholder":1053},[973,3233,3234,3236,3239,3242,3245,3247,3249,3252,3254,3257],{"class":975,"line":1031},[973,3235,1016],{"class":979},[973,3237,3238],{"class":1000}," CustomPath(",[973,3240,3241],{"class":986},"CanvasDevice",[973,3243,3244],{"class":986}," device",[973,3246,1340],{"class":1000},[973,3248,1530],{"class":1000},[973,3250,3251],{"class":2382}," base",[973,3253,1288],{"class":1000},[973,3255,3256],{"class":1119},"device",[973,3258,1108],{"class":1000},[973,3260,3261],{"class":975,"line":1044},[973,3262,1028],{"class":1000},[973,3264,3265],{"class":975,"line":1050},[973,3266,1047],{"class":1000},[973,3268,3269],{"class":975,"line":1057},[973,3270,1808],{"class":1000},[506,3272,3273],{},"You can now update your custom stroker implementation to store the information into the path:",[629,3275,3276,3364,3498,3641],{},[632,3277,3278],{"v-slot:java":614},[965,3279,3281],{"className":967,"code":3280,"language":969,"meta":614,"style":614},"public void stroke(InkPoint[] inkPoints, float width, float pixelSize, IPath output)\n{\n    CustomPath customPath = (CustomPath)output;\n    customPath.setInkPoints(inkPoints);\n    customPath.setWidth(width);\n}\n",[640,3282,3283,3311,3315,3337,3349,3360],{"__ignoreMap":614},[973,3284,3285,3287,3289,3291,3293,3296,3298,3301,3303,3306,3308],{"class":975,"line":976},[973,3286,980],{"class":979},[973,3288,1069],{"class":979},[973,3290,1072],{"class":1000},[973,3292,1075],{"class":979},[973,3294,3295],{"class":1000},"[] inkPoints, ",[973,3297,1365],{"class":979},[973,3299,3300],{"class":1000}," width, ",[973,3302,1365],{"class":979},[973,3304,3305],{"class":1000}," pixelSize, ",[973,3307,784],{"class":979},[973,3309,3310],{"class":1000}," output)\n",[973,3312,3313],{"class":975,"line":997},[973,3314,1001],{"class":1000},[973,3316,3317,3320,3323,3325,3327,3330,3332,3335],{"class":975,"line":1004},[973,3318,3319],{"class":979},"    CustomPath",[973,3321,3322],{"class":1119}," customPath ",[973,3324,1172],{"class":979},[973,3326,1163],{"class":1000},[973,3328,3329],{"class":1119},"CustomPath",[973,3331,1340],{"class":1000},[973,3333,3334],{"class":1119},"output",[973,3336,1041],{"class":1000},[973,3338,3339,3342,3345,3347],{"class":975,"line":1013},[973,3340,3341],{"class":1119},"    customPath",[973,3343,3344],{"class":1000},".setInkPoints(",[973,3346,3060],{"class":1119},[973,3348,1154],{"class":1000},[973,3350,3351,3353,3356,3358],{"class":975,"line":1025},[973,3352,3341],{"class":1119},[973,3354,3355],{"class":1000},".setWidth(",[973,3357,758],{"class":1119},[973,3359,1154],{"class":1000},[973,3361,3362],{"class":975,"line":1031},[973,3363,1256],{"class":1000},[632,3365,3366],{"v-slot:swift":614},[965,3367,3369],{"className":1261,"code":3368,"language":1263,"meta":614,"style":614},"- (void)stroke:(nonnull IINKPoint *)input\n        count:(NSInteger)count\n        width:(float)width\n        pixelSize:(float)pixelSize\n        output:(nonnull id\u003CIINKIPath>)output\n{\n    CustomPath *customPath = output;\n    [customPath setInkPoints:input];\n    [customPath setWidth:width];\n}\n",[640,3370,3371,3396,3409,3422,3435,3456,3460,3476,3485,3494],{"__ignoreMap":614},[973,3372,3373,3376,3378,3380,3382,3385,3387,3390,3392,3394],{"class":975,"line":976},[973,3374,3375],{"class":979},"-",[973,3377,1163],{"class":1000},[973,3379,1325],{"class":979},[973,3381,1340],{"class":1000},[973,3383,3384],{"class":1119},"stroke:",[973,3386,1288],{"class":1000},[973,3388,3389],{"class":1119},"nonnull IINKPoint ",[973,3391,1337],{"class":979},[973,3393,1340],{"class":1000},[973,3395,1343],{"class":1119},[973,3397,3398,3401,3403,3405,3407],{"class":975,"line":997},[973,3399,3400],{"class":1119},"        count:",[973,3402,1288],{"class":1000},[973,3404,1352],{"class":1351},[973,3406,1340],{"class":1000},[973,3408,1357],{"class":1119},[973,3410,3411,3414,3416,3418,3420],{"class":975,"line":1004},[973,3412,3413],{"class":1119},"        width:",[973,3415,1288],{"class":1000},[973,3417,1365],{"class":979},[973,3419,1340],{"class":1000},[973,3421,1370],{"class":1119},[973,3423,3424,3427,3429,3431,3433],{"class":975,"line":1013},[973,3425,3426],{"class":1119},"        pixelSize:",[973,3428,1288],{"class":1000},[973,3430,1365],{"class":979},[973,3432,1340],{"class":1000},[973,3434,1382],{"class":1119},[973,3436,3437,3440,3442,3445,3448,3450,3452,3454],{"class":975,"line":1025},[973,3438,3439],{"class":1119},"        output:",[973,3441,1288],{"class":1000},[973,3443,3444],{"class":1119},"nonnull ",[973,3446,3447],{"class":979},"id",[973,3449,1183],{"class":1000},[973,3451,654],{"class":1119},[973,3453,1399],{"class":1000},[973,3455,1402],{"class":1119},[973,3457,3458],{"class":975,"line":1031},[973,3459,1001],{"class":1000},[973,3461,3462,3465,3467,3470,3472,3474],{"class":975,"line":1044},[973,3463,3464],{"class":1119},"    CustomPath ",[973,3466,1337],{"class":979},[973,3468,3469],{"class":1119},"customPath ",[973,3471,1172],{"class":979},[973,3473,1105],{"class":1119},[973,3475,1041],{"class":1000},[973,3477,3478,3480,3482],{"class":975,"line":1050},[973,3479,1411],{"class":1000},[973,3481,3469],{"class":1119},[973,3483,3484],{"class":1000},"setInkPoints:input];\n",[973,3486,3487,3489,3491],{"class":975,"line":1057},[973,3488,1411],{"class":1000},[973,3490,3469],{"class":1119},[973,3492,3493],{"class":1000},"setWidth:width];\n",[973,3495,3496],{"class":975,"line":1064},[973,3497,1256],{"class":1000},[632,3499,3500],{"v-slot:cpp":614},[965,3501,3503],{"className":1516,"code":3502,"language":1518,"meta":614,"style":614},"virtual void stroke(const std::vector\u003CInkPoint>& input, float width, float pixelSize, std::shared_ptr\u003CIPath> output) noexcept\n{\n  ...\n\n  \u002F\u002F Store information\n  auto customPath = std::dynamic_pointer_cast\u003CCustomPath>(output);\n  customPath->points = input;\n  customPath->width = width;\n}\n",[640,3504,3505,3564,3568,3573,3577,3583,3606,3623,3637],{"__ignoreMap":614},[973,3506,3507,3510,3512,3514,3516,3518,3520,3522,3524,3526,3528,3530,3532,3534,3536,3538,3540,3542,3544,3546,3548,3550,3552,3554,3556,3558,3560,3562],{"class":975,"line":976},[973,3508,3509],{"class":979},"virtual",[973,3511,1069],{"class":979},[973,3513,1072],{"class":1000},[973,3515,1614],{"class":979},[973,3517,1617],{"class":986},[973,3519,1620],{"class":1000},[973,3521,1623],{"class":986},[973,3523,1183],{"class":1000},[973,3525,1075],{"class":986},[973,3527,1630],{"class":1000},[973,3529,1633],{"class":979},[973,3531,1081],{"class":1037},[973,3533,1084],{"class":1000},[973,3535,1087],{"class":979},[973,3537,1090],{"class":1037},[973,3539,1084],{"class":1000},[973,3541,1087],{"class":979},[973,3543,1097],{"class":1037},[973,3545,1084],{"class":1000},[973,3547,1617],{"class":986},[973,3549,1620],{"class":1000},[973,3551,1656],{"class":986},[973,3553,1183],{"class":1000},[973,3555,784],{"class":986},[973,3557,1630],{"class":1000},[973,3559,1105],{"class":1037},[973,3561,1340],{"class":1000},[973,3563,1581],{"class":979},[973,3565,3566],{"class":975,"line":997},[973,3567,1001],{"class":1000},[973,3569,3570],{"class":975,"line":1004},[973,3571,3572],{"class":1119},"  ...\n",[973,3574,3575],{"class":975,"line":1013},[973,3576,1054],{"emptyLinePlaceholder":1053},[973,3578,3579],{"class":975,"line":1025},[973,3580,3582],{"class":3581},"sJjcI","  \u002F\u002F Store information\n",[973,3584,3585,3588,3590,3592,3594,3597,3599,3602,3604],{"class":975,"line":1031},[973,3586,3587],{"class":979},"  auto",[973,3589,3322],{"class":1119},[973,3591,1172],{"class":979},[973,3593,1617],{"class":986},[973,3595,3596],{"class":1000},"::dynamic_pointer_cast\u003C",[973,3598,3329],{"class":986},[973,3600,3601],{"class":1000},">(",[973,3603,3334],{"class":1119},[973,3605,1154],{"class":1000},[973,3607,3608,3611,3614,3617,3619,3621],{"class":975,"line":1044},[973,3609,3610],{"class":1119},"  customPath",[973,3612,3613],{"class":1000},"->",[973,3615,3616],{"class":1119},"points ",[973,3618,1172],{"class":979},[973,3620,1081],{"class":1119},[973,3622,1041],{"class":1000},[973,3624,3625,3627,3629,3631,3633,3635],{"class":975,"line":1050},[973,3626,3610],{"class":1119},[973,3628,3613],{"class":1000},[973,3630,2777],{"class":1119},[973,3632,1172],{"class":979},[973,3634,1090],{"class":1119},[973,3636,1041],{"class":1000},[973,3638,3639],{"class":975,"line":1057},[973,3640,1256],{"class":1000},[632,3642,3643],{"v-slot:csharp":614},[965,3644,3646],{"className":1813,"code":3645,"language":1815,"meta":614,"style":614},"public void Stroke(InkPoint[] input, float width, float pixelSize, IPath output)\n{\n    ...\n\n    \u002F\u002F Store information\n    var customPath = (CustomPath)output;\n    customPath._inkPoints = input;\n    customPath._width = width;\n}\n",[640,3647,3648,3682,3686,3694,3698,3703,3723,3738,3753],{"__ignoreMap":614},[973,3649,3650,3652,3654,3656,3658,3660,3662,3664,3666,3668,3670,3672,3674,3676,3678,3680],{"class":975,"line":976},[973,3651,980],{"class":979},[973,3653,1069],{"class":979},[973,3655,1871],{"class":1000},[973,3657,1075],{"class":986},[973,3659,1078],{"class":1000},[973,3661,1081],{"class":986},[973,3663,1084],{"class":1000},[973,3665,1087],{"class":979},[973,3667,1090],{"class":986},[973,3669,1084],{"class":1000},[973,3671,1087],{"class":979},[973,3673,1097],{"class":986},[973,3675,1084],{"class":1000},[973,3677,1102],{"class":986},[973,3679,1105],{"class":986},[973,3681,1108],{"class":1000},[973,3683,3684],{"class":975,"line":997},[973,3685,1001],{"class":1000},[973,3687,3688,3691],{"class":975,"line":1004},[973,3689,3690],{"class":979},"    ..",[973,3692,3693],{"class":1119},".\n",[973,3695,3696],{"class":975,"line":1013},[973,3697,1054],{"emptyLinePlaceholder":1053},[973,3699,3700],{"class":975,"line":1025},[973,3701,3702],{"class":3581},"    \u002F\u002F Store information\n",[973,3704,3705,3708,3711,3713,3715,3717,3719,3721],{"class":975,"line":1031},[973,3706,3707],{"class":979},"    var",[973,3709,3710],{"class":986}," customPath",[973,3712,1682],{"class":979},[973,3714,1163],{"class":1000},[973,3716,3329],{"class":986},[973,3718,1340],{"class":1000},[973,3720,3334],{"class":1119},[973,3722,1041],{"class":1000},[973,3724,3725,3727,3729,3732,3734,3736],{"class":975,"line":1044},[973,3726,3341],{"class":1119},[973,3728,572],{"class":1000},[973,3730,3731],{"class":1119},"_inkPoints ",[973,3733,1172],{"class":979},[973,3735,1081],{"class":1119},[973,3737,1041],{"class":1000},[973,3739,3740,3742,3744,3747,3749,3751],{"class":975,"line":1050},[973,3741,3341],{"class":1119},[973,3743,572],{"class":1000},[973,3745,3746],{"class":1119},"_width ",[973,3748,1172],{"class":979},[973,3750,1090],{"class":1119},[973,3752,1041],{"class":1000},[973,3754,3755],{"class":975,"line":1057},[973,3756,1256],{"class":1000},[629,3758,3759,3767],{},[632,3760,3761],{"v-slot:swift":614},[506,3762,3763,3764,3766],{},"You need to update (or subclass) the provided ",[640,3765,714],{}," implementation to build your custom paths:",[506,3768,3763,3769,3766],{},[640,3770,830],{},[629,3772,3773,3815,3865,3915],{},[632,3774,3775],{"v-slot:java":614},[965,3776,3778],{"className":967,"code":3777,"language":969,"meta":614,"style":614},"@Override\npublic final IPath createPath()\n{\n  return new CustomPath();\n}\n",[640,3779,3780,3786,3798,3802,3811],{"__ignoreMap":614},[973,3781,3782,3784],{"class":975,"line":976},[973,3783,1270],{"class":1000},[973,3785,1010],{"class":979},[973,3787,3788,3790,3793,3795],{"class":975,"line":997},[973,3789,980],{"class":979},[973,3791,3792],{"class":979}," final",[973,3794,1102],{"class":979},[973,3796,3797],{"class":1000}," createPath()\n",[973,3799,3800],{"class":975,"line":1004},[973,3801,1001],{"class":1000},[973,3803,3804,3806,3808],{"class":975,"line":1013},[973,3805,2931],{"class":1000},[973,3807,2092],{"class":1000},[973,3809,3810],{"class":1000}," CustomPath();\n",[973,3812,3813],{"class":975,"line":1025},[973,3814,1256],{"class":1000},[632,3816,3817],{"v-slot:swift":614},[965,3818,3820],{"className":1261,"code":3819,"language":1263,"meta":614,"style":614},"- (nonnull id\u003CIINKIPath>)createPath\n{\n    return [[CustomPath alloc] init];\n}\n",[640,3821,3822,3841,3845,3861],{"__ignoreMap":614},[973,3823,3824,3826,3828,3830,3832,3834,3836,3838],{"class":975,"line":976},[973,3825,3375],{"class":979},[973,3827,1163],{"class":1000},[973,3829,3444],{"class":1119},[973,3831,3447],{"class":979},[973,3833,1183],{"class":1000},[973,3835,654],{"class":1119},[973,3837,1399],{"class":1000},[973,3839,3840],{"class":1119},"createPath\n",[973,3842,3843],{"class":975,"line":997},[973,3844,1001],{"class":1000},[973,3846,3847,3849,3852,3855,3858],{"class":975,"line":1004},[973,3848,1303],{"class":1000},[973,3850,3851],{"class":1000}," [[",[973,3853,3854],{"class":1119},"CustomPath ",[973,3856,3857],{"class":1000},"alloc]",[973,3859,3860],{"class":1000}," init];\n",[973,3862,3863],{"class":975,"line":1013},[973,3864,1256],{"class":1000},[632,3866,3867],{"v-slot:cpp":614},[965,3868,3870],{"className":1516,"code":3869,"language":1518,"meta":614,"style":614},"std::shared_ptr\u003CIPath> Canvas::createPath() noexcept\n{\n  return std::make_shared\u003CCustomPath>();\n}\n",[640,3871,3872,3895,3899,3911],{"__ignoreMap":614},[973,3873,3874,3877,3879,3881,3883,3885,3887,3890,3893],{"class":975,"line":976},[973,3875,3876],{"class":986},"std",[973,3878,1620],{"class":1000},[973,3880,1656],{"class":986},[973,3882,1183],{"class":1000},[973,3884,784],{"class":986},[973,3886,1630],{"class":1000},[973,3888,3889],{"class":986}," Canvas",[973,3891,3892],{"class":1000},"::createPath()",[973,3894,1581],{"class":979},[973,3896,3897],{"class":975,"line":997},[973,3898,1001],{"class":1000},[973,3900,3901,3903,3905,3907,3909],{"class":975,"line":1004},[973,3902,2931],{"class":1000},[973,3904,1617],{"class":986},[973,3906,2248],{"class":1000},[973,3908,3329],{"class":986},[973,3910,2253],{"class":1000},[973,3912,3913],{"class":975,"line":1013},[973,3914,1256],{"class":1000},[632,3916,3917],{"v-slot:csharp":614},[965,3918,3920],{"className":1813,"code":3919,"language":1815,"meta":614,"style":614},"public IPath CreatePath()\n{\n    return new CustomPath(_session.Device);\n}\n",[640,3921,3922,3931,3935,3955],{"__ignoreMap":614},[973,3923,3924,3926,3928],{"class":975,"line":976},[973,3925,980],{"class":979},[973,3927,1102],{"class":986},[973,3929,3930],{"class":1000}," CreatePath()\n",[973,3932,3933],{"class":975,"line":997},[973,3934,1001],{"class":1000},[973,3936,3937,3939,3941,3943,3945,3948,3950,3953],{"class":975,"line":1004},[973,3938,1303],{"class":1000},[973,3940,2092],{"class":979},[973,3942,2680],{"class":986},[973,3944,1288],{"class":1000},[973,3946,3947],{"class":1119},"_session",[973,3949,572],{"class":1000},[973,3951,3952],{"class":1119},"Device",[973,3954,1154],{"class":1000},[973,3956,3957],{"class":975,"line":1013},[973,3958,1256],{"class":1000},[629,3960,3961,3972,3980],{},[632,3962,3963],{"v-slot:swift":614},[506,3964,3965,3966,3968,3969,3971],{},"The ",[640,3967,718],{}," method of ",[640,3970,714],{}," will now be called with our paths and you can access your stored values and draw the stroke the way you want:",[632,3973,3974],{"v-slot:csharp":614},[506,3975,3965,3976,3968,3978,3971],{},[640,3977,833],{},[640,3979,830],{},[506,3981,3965,3982,3968,3984,3971],{},[640,3983,914],{},[640,3985,830],{},[629,3987,3988,4087,4221,4335],{},[632,3989,3990],{"v-slot:java":614},[965,3991,3993],{"className":967,"code":3992,"language":969,"meta":614,"style":614},"public void drawPath(IPath path)\n{\n    \u002F\u002F Retrieve stored information\n    CustomPath customPath = (CustomPath)path;\n    InkPoint[] inkPoints = customPath.getInkPoints();\n    float width = customPath.getWidth();\n\n    \u002F\u002F Custom drawing\n    ...\n}\n",[640,3994,3995,4009,4013,4018,4037,4054,4069,4073,4078,4083],{"__ignoreMap":614},[973,3996,3997,3999,4001,4004,4006],{"class":975,"line":976},[973,3998,980],{"class":979},[973,4000,1069],{"class":979},[973,4002,4003],{"class":1000}," drawPath(",[973,4005,784],{"class":979},[973,4007,4008],{"class":1000}," path)\n",[973,4010,4011],{"class":975,"line":997},[973,4012,1001],{"class":1000},[973,4014,4015],{"class":975,"line":1004},[973,4016,4017],{"class":3581},"    \u002F\u002F Retrieve stored information\n",[973,4019,4020,4022,4024,4026,4028,4030,4032,4035],{"class":975,"line":1013},[973,4021,3319],{"class":979},[973,4023,3322],{"class":1119},[973,4025,1172],{"class":979},[973,4027,1163],{"class":1000},[973,4029,3329],{"class":1119},[973,4031,1340],{"class":1000},[973,4033,4034],{"class":1119},"path",[973,4036,1041],{"class":1000},[973,4038,4039,4042,4044,4047,4049,4051],{"class":975,"line":1025},[973,4040,4041],{"class":979},"    InkPoint",[973,4043,1078],{"class":1000},[973,4045,4046],{"class":1119}," inkPoints ",[973,4048,1172],{"class":979},[973,4050,3710],{"class":1119},[973,4052,4053],{"class":1000},".getInkPoints();\n",[973,4055,4056,4059,4062,4064,4066],{"class":975,"line":1031},[973,4057,4058],{"class":979},"    float",[973,4060,4061],{"class":1119}," width ",[973,4063,1172],{"class":979},[973,4065,3710],{"class":1119},[973,4067,4068],{"class":1000},".getWidth();\n",[973,4070,4071],{"class":975,"line":1044},[973,4072,1054],{"emptyLinePlaceholder":1053},[973,4074,4075],{"class":975,"line":1050},[973,4076,4077],{"class":3581},"    \u002F\u002F Custom drawing\n",[973,4079,4080],{"class":975,"line":1057},[973,4081,4082],{"class":1000},"    ...\n",[973,4084,4085],{"class":975,"line":1064},[973,4086,1256],{"class":1000},[632,4088,4089],{"v-slot:swift":614},[965,4090,4092],{"className":1261,"code":4091,"language":1263,"meta":614,"style":614},"- (void)drawPath:(id\u003CIINKIPath>)path\n{\n    Path *aPath = path;\n    CustomPath *caPath = (CustomPath*) aPath;\n    IINKPoint *inkPoints = caPath.inkPoints;\n    float width = caPath.width;\n\n    \u002F\u002F Custom drawing\n    ...\n\n}\n",[640,4093,4094,4120,4124,4141,4165,4185,4201,4205,4209,4213,4217],{"__ignoreMap":614},[973,4095,4096,4098,4100,4102,4104,4107,4109,4111,4113,4115,4117],{"class":975,"line":976},[973,4097,3375],{"class":979},[973,4099,1163],{"class":1000},[973,4101,1325],{"class":979},[973,4103,1340],{"class":1000},[973,4105,4106],{"class":1119},"drawPath:",[973,4108,1288],{"class":1000},[973,4110,3447],{"class":979},[973,4112,1183],{"class":1000},[973,4114,654],{"class":1119},[973,4116,1399],{"class":1000},[973,4118,4119],{"class":1119},"path\n",[973,4121,4122],{"class":975,"line":997},[973,4123,1001],{"class":1000},[973,4125,4126,4129,4131,4134,4136,4139],{"class":975,"line":1004},[973,4127,4128],{"class":1119},"    Path ",[973,4130,1337],{"class":979},[973,4132,4133],{"class":1119},"aPath ",[973,4135,1172],{"class":979},[973,4137,4138],{"class":1119}," path",[973,4140,1041],{"class":1000},[973,4142,4143,4145,4147,4150,4152,4154,4156,4158,4160,4163],{"class":975,"line":1013},[973,4144,3464],{"class":1119},[973,4146,1337],{"class":979},[973,4148,4149],{"class":1119},"caPath ",[973,4151,1172],{"class":979},[973,4153,1163],{"class":1000},[973,4155,3329],{"class":1119},[973,4157,1337],{"class":979},[973,4159,1340],{"class":1000},[973,4161,4162],{"class":1119}," aPath",[973,4164,1041],{"class":1000},[973,4166,4167,4170,4172,4174,4176,4179,4181,4183],{"class":975,"line":1025},[973,4168,4169],{"class":1119},"    IINKPoint ",[973,4171,1337],{"class":979},[973,4173,2852],{"class":1119},[973,4175,1172],{"class":979},[973,4177,4178],{"class":1037}," caPath",[973,4180,572],{"class":1000},[973,4182,3060],{"class":1037},[973,4184,1041],{"class":1000},[973,4186,4187,4189,4191,4193,4195,4197,4199],{"class":975,"line":1031},[973,4188,4058],{"class":979},[973,4190,4061],{"class":1119},[973,4192,1172],{"class":979},[973,4194,4178],{"class":1037},[973,4196,572],{"class":1000},[973,4198,758],{"class":1037},[973,4200,1041],{"class":1000},[973,4202,4203],{"class":975,"line":1044},[973,4204,1054],{"emptyLinePlaceholder":1053},[973,4206,4207],{"class":975,"line":1050},[973,4208,4077],{"class":3581},[973,4210,4211],{"class":975,"line":1057},[973,4212,4082],{"class":1119},[973,4214,4215],{"class":975,"line":1064},[973,4216,1054],{"emptyLinePlaceholder":1053},[973,4218,4219],{"class":975,"line":1111},[973,4220,1256],{"class":1000},[632,4222,4223],{"v-slot:cpp":614},[965,4224,4226],{"className":1516,"code":4225,"language":1518,"meta":614,"style":614},"void Canvas::drawPath(std::shared_ptr\u003CIPath> path) noexcept\n{\n  \u002F\u002F Retrieve stored information\n  auto customPath = std::dynamic_pointer_cast\u003CCustomPath>(path);\n  auto points = customPath->points;\n  auto width = customPath->width;\n\n  \u002F\u002F Custom drawing\n  ...\n}\n",[640,4227,4228,4255,4259,4264,4284,4302,4318,4322,4327,4331],{"__ignoreMap":614},[973,4229,4230,4232,4234,4237,4239,4241,4243,4245,4247,4249,4251,4253],{"class":975,"line":976},[973,4231,1325],{"class":979},[973,4233,3889],{"class":986},[973,4235,4236],{"class":1000},"::drawPath(",[973,4238,3876],{"class":986},[973,4240,1620],{"class":1000},[973,4242,1656],{"class":986},[973,4244,1183],{"class":1000},[973,4246,784],{"class":986},[973,4248,1630],{"class":1000},[973,4250,4138],{"class":1037},[973,4252,1340],{"class":1000},[973,4254,1581],{"class":979},[973,4256,4257],{"class":975,"line":997},[973,4258,1001],{"class":1000},[973,4260,4261],{"class":975,"line":1004},[973,4262,4263],{"class":3581},"  \u002F\u002F Retrieve stored information\n",[973,4265,4266,4268,4270,4272,4274,4276,4278,4280,4282],{"class":975,"line":1013},[973,4267,3587],{"class":979},[973,4269,3322],{"class":1119},[973,4271,1172],{"class":979},[973,4273,1617],{"class":986},[973,4275,3596],{"class":1000},[973,4277,3329],{"class":986},[973,4279,3601],{"class":1000},[973,4281,4034],{"class":1119},[973,4283,1154],{"class":1000},[973,4285,4286,4288,4291,4293,4295,4297,4300],{"class":975,"line":1025},[973,4287,3587],{"class":979},[973,4289,4290],{"class":1119}," points ",[973,4292,1172],{"class":979},[973,4294,3710],{"class":1119},[973,4296,3613],{"class":1000},[973,4298,4299],{"class":1119},"points",[973,4301,1041],{"class":1000},[973,4303,4304,4306,4308,4310,4312,4314,4316],{"class":975,"line":1031},[973,4305,3587],{"class":979},[973,4307,4061],{"class":1119},[973,4309,1172],{"class":979},[973,4311,3710],{"class":1119},[973,4313,3613],{"class":1000},[973,4315,758],{"class":1119},[973,4317,1041],{"class":1000},[973,4319,4320],{"class":975,"line":1044},[973,4321,1054],{"emptyLinePlaceholder":1053},[973,4323,4324],{"class":975,"line":1050},[973,4325,4326],{"class":3581},"  \u002F\u002F Custom drawing\n",[973,4328,4329],{"class":975,"line":1057},[973,4330,3572],{"class":1119},[973,4332,4333],{"class":975,"line":1064},[973,4334,1256],{"class":1000},[632,4336,4337],{"v-slot:csharp":614},[965,4338,4340],{"className":1813,"code":4339,"language":1815,"meta":614,"style":614},"public void DrawPath(IPath path)\n{\n    var customPath= (CustomPath)path;\n    var inkPoints = customPath._inkPoints;\n    var width = customPath._width;\n\n    \u002F\u002F Custom drawing\n    ...\n}\n",[640,4341,4342,4357,4361,4379,4396,4413,4417,4421,4427],{"__ignoreMap":614},[973,4343,4344,4346,4348,4351,4353,4355],{"class":975,"line":976},[973,4345,980],{"class":979},[973,4347,1069],{"class":979},[973,4349,4350],{"class":1000}," DrawPath(",[973,4352,784],{"class":986},[973,4354,4138],{"class":986},[973,4356,1108],{"class":1000},[973,4358,4359],{"class":975,"line":997},[973,4360,1001],{"class":1000},[973,4362,4363,4365,4367,4369,4371,4373,4375,4377],{"class":975,"line":1004},[973,4364,3707],{"class":979},[973,4366,3710],{"class":986},[973,4368,1172],{"class":979},[973,4370,1163],{"class":1000},[973,4372,3329],{"class":986},[973,4374,1340],{"class":1000},[973,4376,4034],{"class":1119},[973,4378,1041],{"class":1000},[973,4380,4381,4383,4385,4387,4389,4391,4394],{"class":975,"line":1013},[973,4382,3707],{"class":979},[973,4384,2703],{"class":986},[973,4386,1682],{"class":979},[973,4388,3710],{"class":1119},[973,4390,572],{"class":1000},[973,4392,4393],{"class":1119},"_inkPoints",[973,4395,1041],{"class":1000},[973,4397,4398,4400,4402,4404,4406,4408,4411],{"class":975,"line":1025},[973,4399,3707],{"class":979},[973,4401,1090],{"class":986},[973,4403,1682],{"class":979},[973,4405,3710],{"class":1119},[973,4407,572],{"class":1000},[973,4409,4410],{"class":1119},"_width",[973,4412,1041],{"class":1000},[973,4414,4415],{"class":975,"line":1031},[973,4416,1054],{"emptyLinePlaceholder":1053},[973,4418,4419],{"class":975,"line":1044},[973,4420,4077],{"class":3581},[973,4422,4423,4425],{"class":975,"line":1050},[973,4424,3690],{"class":979},[973,4426,3693],{"class":1119},[973,4428,4429],{"class":975,"line":1057},[973,4430,1256],{"class":1000},[629,4432,4433,4447,4450,4470],{},[632,4434,4435,4439],{"v-slot:java":614},[949,4436,4438],{"id":4437},"drawing-of-textured-strokes","Drawing of textured strokes",[506,4440,4441,4442,4446],{},"If you want to support textured strokes, you can implement some additional brushes using dedicated APIs. For more details, refer to ",[568,4443,4445],{"href":4444},"\u002Fdocs\u002Fsdk\u002F4.4\u002Feditor\u002Frendering#additional-brush-implementation","the Rendering"," page.",[949,4448,4438],{"id":4449},"drawing-of-textured-strokes-1",[629,4451,4452,4460,4466],{},[632,4453,4454],{"v-slot:swift":614},[506,4455,4456,4457,4459],{},"If you want to support textured strokes, you can register a custom stroker for each texture you support and store the necessary information for your custom\n",[640,4458,718],{}," implementation to take it into account.",[632,4461,4462],{"v-slot:csharp":614},[506,4463,4456,4464,4459],{},[640,4465,833],{},[506,4467,4456,4468,4459],{},[640,4469,914],{},[589,4471,4472],{"color":591},[506,4473,4474],{},"Ensure that the stroke is entirely drawn inside the envelope. Failure to do so will likely result in rendering issues.",[696,4476,4477],{},"html pre.shiki code .sglaT, html code.shiki .sglaT{--shiki-light:#7751EC;--shiki-default:#7751EC;--shiki-dark:#AC92FC}html pre.shiki code .sVYTS, html code.shiki .sVYTS{--shiki-light:#0081F0;--shiki-default:#0081F0;--shiki-dark:#1A9FFF}html pre.shiki code .sZBTK, html code.shiki .sZBTK{--shiki-light:#002DB3;--shiki-default:#002DB3;--shiki-dark:#80EAFF}html pre.shiki code .soFc9, html code.shiki .soFc9{--shiki-light:#1A9FFF;--shiki-default:#1A9FFF;--shiki-dark:#1A9FFF}html pre.shiki code .sU2JI, html code.shiki .sU2JI{--shiki-light:#005FE4;--shiki-default:#005FE4;--shiki-dark:#80DFFF}html pre.shiki code .sEQEB, html code.shiki .sEQEB{--shiki-light:#051F41;--shiki-default:#051F41;--shiki-dark:#D1E9FA}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .stZ3G, html code.shiki .stZ3G{--shiki-light:#316081;--shiki-default:#316081;--shiki-dark:#7EACCE}html pre.shiki code .sYWwX, html code.shiki .sYWwX{--shiki-light:#005FE4;--shiki-light-font-style:italic;--shiki-default:#005FE4;--shiki-default-font-style:italic;--shiki-dark:#80DFFF;--shiki-dark-font-style:italic}html pre.shiki code .sJjcI, html code.shiki .sJjcI{--shiki-light:#467191;--shiki-light-font-style:italic;--shiki-default:#467191;--shiki-default-font-style:italic;--shiki-dark:#6493B4;--shiki-dark-font-style:italic}",{"title":614,"searchDepth":1004,"depth":1004,"links":4479},[4480,4481,4482,4483,4484],{"id":512,"depth":997,"text":513},{"id":549,"depth":997,"text":550},{"id":597,"depth":997,"text":598},{"id":623,"depth":997,"text":624},{"id":943,"depth":997,"text":944,"children":4485},[4486,4487,4488,4489],{"id":951,"depth":1004,"text":952},{"id":2628,"depth":1004,"text":2629},{"id":4437,"depth":1004,"text":4438},{"id":4449,"depth":1004,"text":4438},"Explanation about how to implement a custom inking","md","i-tabler-brush",{},null,"poaqok","3.1",{"title":460,"description":4490},"docs\u002Fsdk\u002F4.4\u002F11.editor\u002F08.custom-inking","kX6vrKViFElUyFcflcWylYIP0iVfR1MKmuydAC90JNw",[4501],{"title":5,"path":6,"stem":7,"children":4502,"page":40},[4503],{"title":321,"path":322,"stem":323,"children":4504,"page":40},[4505],{"title":4506,"navTitle":4494,"icon":4494,"path":4507,"stem":4508,"children":4509,"page":40},"4.4","\u002Fdocs\u002Fsdk\u002F4.4","docs\u002Fsdk\u002F4.4",[4510,4515,4519,4523,4536,4560,4577,4588,4595,4616,4624,4654,4657,4661,4665,4669,4677],{"title":330,"path":4511,"stem":4512,"navTitle":4513,"icon":4514},"\u002Fdocs\u002Fsdk\u002F4.4\u002Fabout","docs\u002Fsdk\u002F4.4\u002F01.about","About","i-tabler-info-circle",{"title":33,"path":4516,"stem":4517,"navTitle":33,"icon":4518},"\u002Fdocs\u002Fsdk\u002F4.4\u002Fchangelog","docs\u002Fsdk\u002F4.4\u002F02.changelog","i-tabler-bell-ringing",{"title":37,"path":4520,"stem":4521,"navTitle":37,"icon":4522},"\u002Fdocs\u002Fsdk\u002F4.4\u002Fmigration-guide","docs\u002Fsdk\u002F4.4\u002F03.migration-guide","i-tabler-gps",{"title":42,"navTitle":4494,"icon":4494,"path":4524,"stem":4525,"children":4526,"page":40},"\u002Fdocs\u002Fsdk\u002F4.4\u002Fintegration","docs\u002Fsdk\u002F4.4\u002F04.integration",[4527,4532],{"title":47,"path":4528,"stem":4529,"navTitle":4530,"icon":4531},"\u002Fdocs\u002Fsdk\u002F4.4\u002Fintegration\u002Fplatforms","docs\u002Fsdk\u002F4.4\u002F04.integration\u002F01.platforms","Platforms","i-tabler-device-laptop",{"title":51,"path":4533,"stem":4534,"navTitle":51,"icon":4535},"\u002Fdocs\u002Fsdk\u002F4.4\u002Fintegration\u002Fintegration-levels","docs\u002Fsdk\u002F4.4\u002F04.integration\u002F02.integration-levels","i-tabler-stack-2",{"title":55,"navTitle":4494,"icon":4494,"path":4537,"stem":4538,"children":4539,"page":40},"\u002Fdocs\u002Fsdk\u002F4.4\u002Frecognition-capabilities","docs\u002Fsdk\u002F4.4\u002F05.recognition-capabilities",[4540,4544,4548,4552,4556],{"title":60,"path":4541,"stem":4542,"navTitle":4494,"icon":4543},"\u002Fdocs\u002Fsdk\u002F4.4\u002Frecognition-capabilities\u002Frecognizers","docs\u002Fsdk\u002F4.4\u002F05.recognition-capabilities\u002F01.recognizers","i-tabler-text-scan-2",{"title":64,"path":4545,"stem":4546,"navTitle":64,"icon":4547},"\u002Fdocs\u002Fsdk\u002F4.4\u002Frecognition-capabilities\u002Ftext-languages","docs\u002Fsdk\u002F4.4\u002F05.recognition-capabilities\u002F02.text-languages","i-tabler-language",{"title":68,"path":4549,"stem":4550,"navTitle":68,"icon":4551},"\u002Fdocs\u002Fsdk\u002F4.4\u002Frecognition-capabilities\u002Fmath-elements-and-rules","docs\u002Fsdk\u002F4.4\u002F05.recognition-capabilities\u002F03.math-elements-and-rules","i-tabler-math",{"title":72,"path":4553,"stem":4554,"navTitle":72,"icon":4555},"\u002Fdocs\u002Fsdk\u002F4.4\u002Frecognition-capabilities\u002Fdiagram-features","docs\u002Fsdk\u002F4.4\u002F05.recognition-capabilities\u002F04.diagram-features","i-tabler-circle-square",{"title":76,"path":4557,"stem":4558,"navTitle":4494,"icon":4559},"\u002Fdocs\u002Fsdk\u002F4.4\u002Frecognition-capabilities\u002Fgestures","docs\u002Fsdk\u002F4.4\u002F05.recognition-capabilities\u002F05.gestures","i-tabler-hand-finger",{"title":80,"navTitle":4494,"icon":4494,"path":4561,"stem":4562,"children":4563,"page":40},"\u002Fdocs\u002Fsdk\u002F4.4\u002Finteractivity-integration","docs\u002Fsdk\u002F4.4\u002F06.interactivity-integration",[4564,4568,4572],{"title":85,"path":4565,"stem":4566,"navTitle":85,"icon":4567},"\u002Fdocs\u002Fsdk\u002F4.4\u002Finteractivity-integration\u002Fcontent-types","docs\u002Fsdk\u002F4.4\u002F06.interactivity-integration\u002F01.content-types","i-tabler-eye",{"title":89,"path":4569,"stem":4570,"navTitle":89,"icon":4571},"\u002Fdocs\u002Fsdk\u002F4.4\u002Finteractivity-integration\u002Finteractive-features","docs\u002Fsdk\u002F4.4\u002F06.interactivity-integration\u002F02.interactive-features","i-tabler-bolt",{"title":93,"path":4573,"stem":4574,"navTitle":4575,"icon":4576},"\u002Fdocs\u002Fsdk\u002F4.4\u002Finteractivity-integration\u002Fimport-and-export-formats","docs\u002Fsdk\u002F4.4\u002F06.interactivity-integration\u002F03.import-and-export-formats","Import and export","i-tabler-arrows-left-right",{"title":106,"navTitle":4494,"icon":4494,"path":4578,"stem":4579,"children":4580,"page":40},"\u002Fdocs\u002Fsdk\u002F4.4\u002Fgetting-started","docs\u002Fsdk\u002F4.4\u002F07.getting-started",[4581,4585],{"title":386,"path":4582,"stem":4583,"navTitle":4494,"icon":4584},"\u002Fdocs\u002Fsdk\u002F4.4\u002Fgetting-started\u002Fsetup","docs\u002Fsdk\u002F4.4\u002F07.getting-started\u002F01.setup","i-tabler-direction-sign",{"title":390,"path":4586,"stem":4587,"navTitle":4494,"icon":4584},"\u002Fdocs\u002Fsdk\u002F4.4\u002Fgetting-started\u002Finteractive-ink-runtime","docs\u002Fsdk\u002F4.4\u002F07.getting-started\u002F02.interactive-ink-runtime",{"title":394,"navTitle":4494,"icon":4494,"path":4589,"stem":4590,"children":4591,"page":40},"\u002Fdocs\u002Fsdk\u002F4.4\u002Frecognizer","docs\u002Fsdk\u002F4.4\u002F08.recognizer",[4592],{"title":60,"path":4593,"stem":4594,"navTitle":4494,"icon":4543},"\u002Fdocs\u002Fsdk\u002F4.4\u002Frecognizer\u002Frecognizers","docs\u002Fsdk\u002F4.4\u002F08.recognizer\u002F01.recognizers",{"title":402,"navTitle":4494,"icon":4494,"path":4596,"stem":4597,"children":4598,"page":40},"\u002Fdocs\u002Fsdk\u002F4.4\u002Finteractivity","docs\u002Fsdk\u002F4.4\u002F09.interactivity",[4599,4603,4607,4611],{"title":4600,"path":4601,"stem":4602,"navTitle":4494,"icon":4547},"Non-interactive languages","\u002Fdocs\u002Fsdk\u002F4.4\u002Finteractivity\u002Fnon-interactive-languages","docs\u002Fsdk\u002F4.4\u002F09.interactivity\u002F01.non-interactive-languages",{"title":407,"path":4604,"stem":4605,"navTitle":4494,"icon":4606},"\u002Fdocs\u002Fsdk\u002F4.4\u002Finteractivity\u002Fstorage","docs\u002Fsdk\u002F4.4\u002F09.interactivity\u002F02.storage","i-tabler-file-database",{"title":97,"path":4608,"stem":4609,"navTitle":97,"icon":4610},"\u002Fdocs\u002Fsdk\u002F4.4\u002Finteractivity\u002Fmath-features","docs\u002Fsdk\u002F4.4\u002F09.interactivity\u002F03.math-features","i-tabler-calculator",{"title":414,"path":4612,"stem":4613,"navTitle":4614,"icon":4615},"\u002Fdocs\u002Fsdk\u002F4.4\u002Finteractivity\u002Fcombined-undo-redo-stacks","docs\u002Fsdk\u002F4.4\u002F09.interactivity\u002F04.combined-undo-redo-stacks","Combined undo\u002Fredo stacks","i-tabler-arrow-back-up",{"title":418,"navTitle":4494,"icon":4494,"path":4617,"stem":4618,"children":4619,"page":40},"\u002Fdocs\u002Fsdk\u002F4.4\u002Foffscreen-editor","docs\u002Fsdk\u002F4.4\u002F10.offscreen-editor",[4620],{"title":423,"path":4621,"stem":4622,"navTitle":4494,"icon":4623},"\u002Fdocs\u002Fsdk\u002F4.4\u002Foffscreen-editor\u002Foff-screen-usage","docs\u002Fsdk\u002F4.4\u002F10.offscreen-editor\u002F01.off-screen-usage","i-tabler-stack-backward",{"title":427,"navTitle":4494,"icon":4494,"path":4625,"stem":4626,"children":4627,"page":40},"\u002Fdocs\u002Fsdk\u002F4.4\u002Feditor","docs\u002Fsdk\u002F4.4\u002F11.editor",[4628,4631,4634,4638,4642,4646,4650,4653],{"title":432,"path":2322,"stem":4629,"navTitle":4494,"icon":4630},"docs\u002Fsdk\u002F4.4\u002F11.editor\u002F01.rendering","i-tabler-app-window",{"title":436,"path":2522,"stem":4632,"navTitle":4494,"icon":4633},"docs\u002Fsdk\u002F4.4\u002F11.editor\u002F02.editing","i-tabler-edit",{"title":440,"path":4635,"stem":4636,"navTitle":4494,"icon":4637},"\u002Fdocs\u002Fsdk\u002F4.4\u002Feditor\u002Ftool-controller","docs\u002Fsdk\u002F4.4\u002F11.editor\u002F03.tool-controller","i-tabler-adjustments",{"title":444,"path":4639,"stem":4640,"navTitle":4494,"icon":4641},"\u002Fdocs\u002Fsdk\u002F4.4\u002Feditor\u002Fblock-selection-management","docs\u002Fsdk\u002F4.4\u002F11.editor\u002F04.block-selection-management","i-tabler-pointer",{"title":448,"path":4643,"stem":4644,"navTitle":4494,"icon":4645},"\u002Fdocs\u002Fsdk\u002F4.4\u002Feditor\u002Fconversion","docs\u002Fsdk\u002F4.4\u002F11.editor\u002F05.conversion","i-tabler-sparkles",{"title":452,"path":4647,"stem":4648,"navTitle":4494,"icon":4649},"\u002Fdocs\u002Fsdk\u002F4.4\u002Feditor\u002Fzooming-and-scrolling","docs\u002Fsdk\u002F4.4\u002F11.editor\u002F06.zooming-and-scrolling","i-tabler-zoom-pan",{"title":456,"path":695,"stem":4651,"navTitle":4494,"icon":4652},"docs\u002Fsdk\u002F4.4\u002F11.editor\u002F07.styling","i-tabler-palette",{"title":460,"path":499,"stem":4498,"navTitle":4494,"icon":4492},{"title":464,"path":4655,"stem":4656,"navTitle":4494,"icon":4576},"\u002Fdocs\u002Fsdk\u002F4.4\u002Fimport-and-export","docs\u002Fsdk\u002F4.4\u002F12.import-and-export",{"title":202,"path":4658,"stem":4659,"navTitle":4494,"icon":4660},"\u002Fdocs\u002Fsdk\u002F4.4\u002Ftext-recognition-candidates","docs\u002Fsdk\u002F4.4\u002F13.text-recognition-candidates","i-tabler-tags",{"title":471,"path":4662,"stem":4663,"navTitle":4494,"icon":4664},"\u002Fdocs\u002Fsdk\u002F4.4\u002Ferror-management","docs\u002Fsdk\u002F4.4\u002F14.error-management","i-tabler-bug",{"title":206,"path":4666,"stem":4667,"navTitle":4494,"icon":4668},"\u002Fdocs\u002Fsdk\u002F4.4\u002Fcustom-recognition","docs\u002Fsdk\u002F4.4\u002F15.custom-recognition","i-tabler-file-code",{"title":313,"navTitle":4494,"icon":4494,"path":4670,"stem":4671,"children":4672,"page":40},"\u002Fdocs\u002Fsdk\u002F4.4\u002Fhandwriting-generation","docs\u002Fsdk\u002F4.4\u002F16.handwriting-generation",[4673],{"title":313,"path":4674,"stem":4675,"navTitle":313,"icon":4676},"\u002Fdocs\u002Fsdk\u002F4.4\u002Fhandwriting-generation\u002Fhandwriting-generation","docs\u002Fsdk\u002F4.4\u002F16.handwriting-generation\u002F01.handwriting-generation","i-tabler-pencil",{"title":139,"navTitle":4494,"icon":4494,"path":4678,"stem":4679,"children":4680,"page":40},"\u002Fdocs\u002Fsdk\u002F4.4\u002Freference","docs\u002Fsdk\u002F4.4\u002F17.reference",[4681,4685,4690],{"title":144,"path":4682,"stem":4683,"navTitle":4494,"icon":4684},"\u002Fdocs\u002Fsdk\u002F4.4\u002Freference\u002Fconfiguration","docs\u002Fsdk\u002F4.4\u002F17.reference\u002F01.configuration","i-tabler-settings",{"title":239,"path":4686,"stem":4687,"navTitle":4688,"icon":4689},"\u002Fdocs\u002Fsdk\u002F4.4\u002Freference\u002Fjiix","docs\u002Fsdk\u002F4.4\u002F17.reference\u002F02.jiix","JIIX","i-tabler-braces",{"title":495,"path":4691,"stem":4692,"navTitle":456,"icon":4652},"\u002Fdocs\u002Fsdk\u002F4.4\u002Freference\u002Fstyling","docs\u002Fsdk\u002F4.4\u002F17.reference\u002F03.styling",{"id":4694,"title":4695,"body":4696,"canonicalPath":4494,"description":4756,"extension":4491,"icon":4522,"meta":4757,"navTitle":20,"navigation":1053,"path":4758,"resolveKey":4494,"resolveVersion":4494,"seo":4759,"stem":4760,"__hash__":4761},"support\u002Fsupport\u002F01.index.md","Support",{"type":503,"value":4697,"toc":4754},[4698,4701],[506,4699,4700],{},"Find answers to common questions about integrating the iink SDK and MyScript Cloud APIs. Browse the topics below or reach out on the community forum.",[4702,4703,4704,4713,4721,4729,4737,4746],"card-group",{},[4705,4706,4710],"card",{"icon":4707,"title":4708,"to":4709},"i-tabler-package","Recognition assets","\u002Fsupport\u002Frecognition-assets\u002F",[506,4711,4712],{},"Download base assets and build custom resources to fine-tune the recognition.",[4705,4714,4718],{"icon":4715,"title":4716,"to":4717},"i-tabler-key","On-device license management","\u002Fsupport\u002Fon-device\u002Fon-device-license-management\u002F",[506,4719,4720],{},"Manage licenses for applications embedding the on-device iink SDK.",[4705,4722,4726],{"icon":4723,"title":4724,"to":4725},"i-tabler-user-circle","Registering with MyScript Cloud","\u002Fsupport\u002Fcloud\u002Fregistering-myscript-cloud\u002F",[506,4727,4728],{},"Create a Cloud account and obtain the keys to call our recognition APIs.",[4705,4730,4734],{"icon":4731,"title":4732,"to":4733},"i-tabler-rocket","Being production ready","\u002Fsupport\u002Fcloud\u002Fbeing-production-ready\u002F",[506,4735,4736],{},"Best practices and quotas to ship your iink Cloud integration to production.",[4705,4738,4743],{"icon":4739,"title":4740,"to":4741,"target":4742},"i-tabler-message-circle","Forums","https:\u002F\u002Fdeveloper-support.myscript.com\u002Fsupport\u002Flogin","_blank",[506,4744,4745],{},"Ask questions and get answers from the MyScript developer community.",[4705,4747,4751],{"icon":4748,"title":4749,"to":4750,"target":4742},"i-tabler-mail","Contact us","https:\u002F\u002Fwww.myscript.com\u002Fcontact\u002F",[506,4752,4753],{},"Can't find what you're looking for? Reach out to our team.",{"title":614,"searchDepth":1004,"depth":1004,"links":4755},[],"MyScript Developer Support hub",{},"\u002Fsupport",{"title":4695,"description":4756},"support\u002F01.index","jENFmcn55y_8r3_6pH5xxlH1dZJBwoAuq9F7gXQtow8",1792566639975]