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