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