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