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