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