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