{"id":851,"date":"2012-09-03T18:35:00","date_gmt":"2012-09-03T18:35:00","guid":{"rendered":"http:\/\/www.pycheung.com\/weblog\/?p=851"},"modified":"2012-12-10T17:34:03","modified_gmt":"2012-12-10T17:34:03","slug":"polyline-offset","status":"publish","type":"post","link":"https:\/\/www.pycheung.com\/weblog\/post\/851","title":{"rendered":"polyline offset"},"content":{"rendered":"<p>          <img loading=\"lazy\" src=\"http:\/\/www.pycheung.com\/weblog\/wp-content\/uploads\/zrtn_015p188cbd38_tn.jpg\" style=\"BORDER-BOTTOM: #000000 1px; BORDER-LEFT: #000000 1px; BORDER-TOP: #000000 1px; BORDER-RIGHT: #000000 1px\" height=\"600\" width=\"800\" alt=\"offset3.jpg\" border=\"0\"\/>        <\/p>\n<p>i <a href=\"http:\/\/www.pycheung.com\/weblog\/wp-content\/uploads\/offset_rhino.jpg\" title=\"offset_rhino.jpg\">            <img loading=\"lazy\" src=\"http:\/\/www.pycheung.com\/weblog\/wp-content\/uploads\/zrtn_006n331f9d7d_tn.jpg\" style=\"BORDER-BOTTOM: #000000 1px; BORDER-LEFT: #000000 1px; BORDER-TOP: #000000 1px; BORDER-RIGHT: #000000 1px\" height=\"177\" width=\"250\" alt=\"offset_rhino.jpg\" border=\"0\"\/>          <\/a> ii <a href=\"http:\/\/www.pycheung.com\/weblog\/wp-content\/uploads\/offset_maya2.jpg\" title=\"offset_maya2.jpg\">            <img loading=\"lazy\" src=\"http:\/\/www.pycheung.com\/weblog\/wp-content\/uploads\/zrtn_009n7c6e5382_tn.jpg\" style=\"BORDER-BOTTOM: #000000 1px; BORDER-LEFT: #000000 1px; BORDER-TOP: #000000 1px; BORDER-RIGHT: #000000 1px\" height=\"187\" width=\"250\" alt=\"offset_maya2.jpg\" border=\"0\"\/>          <\/a> iii <a href=\"http:\/\/www.pycheung.com\/weblog\/wp-content\/uploads\/offset_microstation.jpg\" title=\"offset_microstation.jpg\">            <img loading=\"lazy\" src=\"http:\/\/www.pycheung.com\/weblog\/wp-content\/uploads\/zrtn_008n1f94da20_tn.jpg\" style=\"BORDER-BOTTOM: #000000 1px; BORDER-LEFT: #000000 1px; BORDER-TOP: #000000 1px; BORDER-RIGHT: #000000 1px\" height=\"119\" width=\"250\" alt=\"offset_microstation.jpg\" border=\"0\"\/>          <\/a>        <\/p>\n<p>native offset in rhino, maya and microstation for degree 1 curve\/polyline <br \/>i) rhino produces additional segments from its cleaning procedure, it handles single island within closed\/looped polyline <br \/>ii) maya no edge loop removal unless its a degree&gt;1 curve <br \/>iii) microstation (red line) works well as expected as a cad software, handles multiple islands<\/p>\n<p>dotted lines in iii shows the possible result from a simple segment paired offset, yielding unwanted result at kinks (2nd local loop in iv) <br \/>fig iv wouldn&#8217;t work well with post-process edge loop removal, should have either taken into account the directions of the offset vector and previous vector or operating on the curve shattered at kinks by its reflex (orange) and convex (black) vertex (v)<\/p>\n<p>iv <a href=\"http:\/\/www.pycheung.com\/weblog\/wp-content\/uploads\/loop_issue.jpg\" title=\"loop_issue.jpg\">            <img loading=\"lazy\" src=\"http:\/\/www.pycheung.com\/weblog\/wp-content\/uploads\/zrtn_011p3f0ac3f0_tn.jpg\" style=\"BORDER-BOTTOM: #000000 1px; BORDER-LEFT: #000000 1px; BORDER-TOP: #000000 1px; BORDER-RIGHT: #000000 1px\" height=\"187\" width=\"250\" alt=\"loop_issue.jpg\" border=\"0\"\/>          <\/a> v <a href=\"http:\/\/www.pycheung.com\/weblog\/wp-content\/uploads\/reflex_convex_vertex.jpg\" title=\"reflex_convex_vertex.jpg\">            <img loading=\"lazy\" src=\"http:\/\/www.pycheung.com\/weblog\/wp-content\/uploads\/zrtn_012p6de35f46_tn.jpg\" style=\"BORDER-BOTTOM: #000000 1px; BORDER-LEFT: #000000 1px; BORDER-TOP: #000000 1px; BORDER-RIGHT: #000000 1px\" height=\"182\" width=\"250\" alt=\"reflex_convex_vertex.jpg\" border=\"0\"\/>          <\/a> vi <a href=\"http:\/\/www.pycheung.com\/weblog\/wp-content\/uploads\/090611issue.jpg\" title=\"090611issue.jpg\">            <img loading=\"lazy\" src=\"http:\/\/www.pycheung.com\/weblog\/wp-content\/uploads\/zrtn_014p442661b0_tn.jpg\" style=\"BORDER-BOTTOM: #000000 1px; BORDER-LEFT: #000000 1px; BORDER-TOP: #000000 1px; BORDER-RIGHT: #000000 1px\" height=\"188\" width=\"250\" alt=\"090611issue.jpg\" border=\"0\"\/>          <\/a>        <\/p>\n<p>vii <a href=\"http:\/\/www.pycheung.com\/weblog\/wp-content\/uploads\/offset_issue.jpg\" title=\"offset_issue.jpg\">            <img loading=\"lazy\" src=\"http:\/\/www.pycheung.com\/weblog\/wp-content\/uploads\/zrtn_013n3ce1aea4_tn.jpg\" style=\"BORDER-BOTTOM: #000000 1px; BORDER-LEFT: #000000 1px; BORDER-TOP: #000000 1px; BORDER-RIGHT: #000000 1px\" height=\"165\" width=\"250\" alt=\"offset_issue.jpg\" border=\"0\"\/>          <\/a>        <\/p>\n<p>previous implementation on 090611 had issues handling situation shown in iv at the 2nd local loop <br \/>top image: test implementation on polyline works in most simple cases removing local loops, with known issues shown in vii with global loops <\/p>\n<p>todo: global loops, keep global loops as islands, look at computing weighted offset either based on cgal skeleton for closed-polygon or from own implementation primarily for open polylines<\/p>\n","protected":false},"excerpt":{"rendered":"<p>i ii iii native offset in rhino, maya and microstation for degree 1 curve\/polyline i) rhino produces additional segments from its cleaning procedure, it handles single island within closed\/looped polyline&#8230;<\/p>\n<div class=\"royalwp-readmore-wrap\"><a href=\"https:\/\/www.pycheung.com\/weblog\/post\/851\" class=\"royalwp-readmore\">Explore more <i class=\"far fa-hand-point-right\"><\/i><\/a><\/div>\n","protected":false},"author":2,"featured_media":1171,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[153],"tags":[60,132,90],"_links":{"self":[{"href":"https:\/\/www.pycheung.com\/weblog\/wp-json\/wp\/v2\/posts\/851"}],"collection":[{"href":"https:\/\/www.pycheung.com\/weblog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.pycheung.com\/weblog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.pycheung.com\/weblog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.pycheung.com\/weblog\/wp-json\/wp\/v2\/comments?post=851"}],"version-history":[{"count":4,"href":"https:\/\/www.pycheung.com\/weblog\/wp-json\/wp\/v2\/posts\/851\/revisions"}],"predecessor-version":[{"id":1054,"href":"https:\/\/www.pycheung.com\/weblog\/wp-json\/wp\/v2\/posts\/851\/revisions\/1054"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.pycheung.com\/weblog\/wp-json\/wp\/v2\/media\/1171"}],"wp:attachment":[{"href":"https:\/\/www.pycheung.com\/weblog\/wp-json\/wp\/v2\/media?parent=851"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.pycheung.com\/weblog\/wp-json\/wp\/v2\/categories?post=851"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.pycheung.com\/weblog\/wp-json\/wp\/v2\/tags?post=851"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}