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