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