{"id":7,"date":"2025-11-26T12:30:57","date_gmt":"2025-11-26T12:30:57","guid":{"rendered":"http:\/\/bimsoft.qa\/?p=7"},"modified":"2025-11-26T12:30:57","modified_gmt":"2025-11-26T12:30:57","slug":"navisworks-c-pick-point","status":"publish","type":"post","link":"https:\/\/bimsoft.qa\/index.php\/2025\/11\/26\/navisworks-c-pick-point\/","title":{"rendered":"NavisWorks C# Pick Point"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Lest deep dive in Autodesk NavisWorks api. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">First, we need a tool plugin with mouse down Interceptor:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" style=\"color:#E6E6E6;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>using Autodesk.Navisworks.Api;\nusing Autodesk.Navisworks.Api.Plugins;\n\n    &#91;Plugin(\"PickModelPointPlugin\", \"ADSK\")&#93;\n    class PickModelPointPlugin : ToolPlugin\n    {\n        public override bool MouseDown(View view, KeyModifiers modifiers,\n                                         ushort button, int x, int y,\n                                         double timeOffset)\n        {\n                \/\/ get current selection\n                PickItemResult pickedResult = view.PickItemFromPoint(x, y);\n\n                if (pickedResult != null)\n                {\n                    Autodesk.Navisworks.Api.Point3D clickedPoint =          \n                                                        pickedResult.Point;\n\n                \/\/ Sent to static exchange, to make click result available \n                \/\/ for Addin Plugins in namespace\n                \/\/ convert to custom Point, to reduce coupling. \n                StaticExchange.PickedPoint = new cPoint(clickedPoint.X,\n                                                        clickedPoint.Y,\n                                                        clickedPoint.Z);\n                }\n            return base.MouseDown(view, modifiers, button, x, y, \n                                  timeOffset);\n        }\n    }<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki slack-dark\" style=\"background-color: #222222\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #569CD6\">using<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #4EC9B0\">Autodesk<\/span><span style=\"color: #E6E6E6\">.<\/span><span style=\"color: #4EC9B0\">Navisworks<\/span><span style=\"color: #E6E6E6\">.<\/span><span style=\"color: #4EC9B0\">Api<\/span><span style=\"color: #E6E6E6\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">using<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #4EC9B0\">Autodesk<\/span><span style=\"color: #E6E6E6\">.<\/span><span style=\"color: #4EC9B0\">Navisworks<\/span><span style=\"color: #E6E6E6\">.<\/span><span style=\"color: #4EC9B0\">Api<\/span><span style=\"color: #E6E6E6\">.<\/span><span style=\"color: #4EC9B0\">Plugins<\/span><span style=\"color: #E6E6E6\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">    &#91;<\/span><span style=\"color: #4EC9B0\">Plugin<\/span><span style=\"color: #E6E6E6\">(<\/span><span style=\"color: #CE9178\">&quot;PickModelPointPlugin&quot;<\/span><span style=\"color: #E6E6E6\">, <\/span><span style=\"color: #CE9178\">&quot;ADSK&quot;<\/span><span style=\"color: #E6E6E6\">)&#93;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">    <\/span><span style=\"color: #569CD6\">class<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #4EC9B0\">PickModelPointPlugin<\/span><span style=\"color: #E6E6E6\"> : <\/span><span style=\"color: #4EC9B0\">ToolPlugin<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">    {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">        <\/span><span style=\"color: #569CD6\">public<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #569CD6\">override<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #569CD6\">bool<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #DCDCAA\">MouseDown<\/span><span style=\"color: #E6E6E6\">(<\/span><span style=\"color: #4EC9B0\">View<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #9CDCFE\">view<\/span><span style=\"color: #E6E6E6\">, <\/span><span style=\"color: #4EC9B0\">KeyModifiers<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #9CDCFE\">modifiers<\/span><span style=\"color: #E6E6E6\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">                                         <\/span><span style=\"color: #569CD6\">ushort<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #9CDCFE\">button<\/span><span style=\"color: #E6E6E6\">, <\/span><span style=\"color: #569CD6\">int<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #9CDCFE\">x<\/span><span style=\"color: #E6E6E6\">, <\/span><span style=\"color: #569CD6\">int<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #9CDCFE\">y<\/span><span style=\"color: #E6E6E6\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">                                         <\/span><span style=\"color: #569CD6\">double<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #9CDCFE\">timeOffset<\/span><span style=\"color: #E6E6E6\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">        {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">                \/\/ get current selection<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">                <\/span><span style=\"color: #4EC9B0\">PickItemResult<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #9CDCFE\">pickedResult<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #D4D4D4\">=<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #9CDCFE\">view<\/span><span style=\"color: #E6E6E6\">.<\/span><span style=\"color: #DCDCAA\">PickItemFromPoint<\/span><span style=\"color: #E6E6E6\">(<\/span><span style=\"color: #9CDCFE\">x<\/span><span style=\"color: #E6E6E6\">, <\/span><span style=\"color: #9CDCFE\">y<\/span><span style=\"color: #E6E6E6\">);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">                <\/span><span style=\"color: #C586C0\">if<\/span><span style=\"color: #E6E6E6\"> (<\/span><span style=\"color: #9CDCFE\">pickedResult<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #D4D4D4\">!=<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #569CD6\">null<\/span><span style=\"color: #E6E6E6\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">                {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">                    <\/span><span style=\"color: #4EC9B0\">Autodesk<\/span><span style=\"color: #E6E6E6\">.<\/span><span style=\"color: #4EC9B0\">Navisworks<\/span><span style=\"color: #E6E6E6\">.<\/span><span style=\"color: #4EC9B0\">Api<\/span><span style=\"color: #E6E6E6\">.<\/span><span style=\"color: #4EC9B0\">Point3D<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #9CDCFE\">clickedPoint<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #D4D4D4\">=<\/span><span style=\"color: #E6E6E6\">          <\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">                                                        <\/span><span style=\"color: #9CDCFE\">pickedResult<\/span><span style=\"color: #E6E6E6\">.<\/span><span style=\"color: #9CDCFE\">Point<\/span><span style=\"color: #E6E6E6\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">                \/\/ Sent to static exchange, to make click result available <\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">                \/\/ for Addin Plugins in namespace<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">                \/\/ convert to custom Point, to reduce coupling. <\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">                <\/span><span style=\"color: #9CDCFE\">StaticExchange<\/span><span style=\"color: #E6E6E6\">.<\/span><span style=\"color: #9CDCFE\">PickedPoint<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #D4D4D4\">=<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #569CD6\">new<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #4EC9B0\">cPoint<\/span><span style=\"color: #E6E6E6\">(<\/span><span style=\"color: #9CDCFE\">clickedPoint<\/span><span style=\"color: #E6E6E6\">.<\/span><span style=\"color: #9CDCFE\">X<\/span><span style=\"color: #E6E6E6\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">                                                        <\/span><span style=\"color: #9CDCFE\">clickedPoint<\/span><span style=\"color: #E6E6E6\">.<\/span><span style=\"color: #9CDCFE\">Y<\/span><span style=\"color: #E6E6E6\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">                                                        <\/span><span style=\"color: #9CDCFE\">clickedPoint<\/span><span style=\"color: #E6E6E6\">.<\/span><span style=\"color: #9CDCFE\">Z<\/span><span style=\"color: #E6E6E6\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">                }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">            <\/span><span style=\"color: #C586C0\">return<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #569CD6\">base<\/span><span style=\"color: #E6E6E6\">.<\/span><span style=\"color: #DCDCAA\">MouseDown<\/span><span style=\"color: #E6E6E6\">(<\/span><span style=\"color: #9CDCFE\">view<\/span><span style=\"color: #E6E6E6\">, <\/span><span style=\"color: #9CDCFE\">modifiers<\/span><span style=\"color: #E6E6E6\">, <\/span><span style=\"color: #9CDCFE\">button<\/span><span style=\"color: #E6E6E6\">, <\/span><span style=\"color: #9CDCFE\">x<\/span><span style=\"color: #E6E6E6\">, <\/span><span style=\"color: #9CDCFE\">y<\/span><span style=\"color: #E6E6E6\">, <\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">                                  <\/span><span style=\"color: #9CDCFE\">timeOffset<\/span><span style=\"color: #E6E6E6\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">        }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">    }<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">First, we need a tool plugin with mouse down Interceptor:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" style=\"color:#E6E6E6;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>   class StaticExchange\n    {\n        public static event PointDelegate PointUpdate;\n        public delegate void PointDelegate(PointEventArgs e);\n        private static cPoint point;\n\n        public static cPoint PickedPoint\n        {\n            get {\n                    return point;\n                }\n            set {\n                    point = value;\n                    PointUpdate?.Invoke(new PointEventArgs(point));\n                }\n        }\n    }<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki slack-dark\" style=\"background-color: #222222\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #E6E6E6\">   <\/span><span style=\"color: #569CD6\">class<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #4EC9B0\">StaticExchange<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">    {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">        <\/span><span style=\"color: #569CD6\">public<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #569CD6\">static<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #569CD6\">event<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #4EC9B0\">PointDelegate<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #9CDCFE\">PointUpdate<\/span><span style=\"color: #E6E6E6\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">        <\/span><span style=\"color: #569CD6\">public<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #569CD6\">delegate<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #569CD6\">void<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #4EC9B0\">PointDelegate<\/span><span style=\"color: #E6E6E6\">(<\/span><span style=\"color: #4EC9B0\">PointEventArgs<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #9CDCFE\">e<\/span><span style=\"color: #E6E6E6\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">        <\/span><span style=\"color: #569CD6\">private<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #569CD6\">static<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #4EC9B0\">cPoint<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #9CDCFE\">point<\/span><span style=\"color: #E6E6E6\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">        <\/span><span style=\"color: #569CD6\">public<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #569CD6\">static<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #4EC9B0\">cPoint<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #9CDCFE\">PickedPoint<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">        {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">            <\/span><span style=\"color: #569CD6\">get<\/span><span style=\"color: #E6E6E6\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">                    <\/span><span style=\"color: #C586C0\">return<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #9CDCFE\">point<\/span><span style=\"color: #E6E6E6\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">                }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">            <\/span><span style=\"color: #569CD6\">set<\/span><span style=\"color: #E6E6E6\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">                    <\/span><span style=\"color: #9CDCFE\">point<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #D4D4D4\">=<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #9CDCFE\">value<\/span><span style=\"color: #E6E6E6\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">                    <\/span><span style=\"color: #9CDCFE\">PointUpdate<\/span><span style=\"color: #D4D4D4\">?<\/span><span style=\"color: #E6E6E6\">.<\/span><span style=\"color: #DCDCAA\">Invoke<\/span><span style=\"color: #E6E6E6\">(<\/span><span style=\"color: #569CD6\">new<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #4EC9B0\">PointEventArgs<\/span><span style=\"color: #E6E6E6\">(<\/span><span style=\"color: #9CDCFE\">point<\/span><span style=\"color: #E6E6E6\">));<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">                }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">        }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">    }<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Obviously, we may need to do some actions as soon as user click on something. That`s why event delegate has been presented in StaticExchange.<br>Finally, in our Addin we call A plugin and await for result. In my case it&#8217;s a form with buttons, so on a button I bind click handler:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" style=\"color:#E6E6E6;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>private async void btnPickNavisPoint_Click(object sender, EventArgs e)\n{\n      try { \n            \/\/search for plugin availability \n            ToolPluginRecord toolPluginRecord =                    \n                   (ToolPluginRecord)ANA.Application.Plugins\n                       .FindPlugin(\"PickModelPointPlugin.ADSK\");\n        \/\/set Plugin for execution                                \n        ANA.Application.MainDocument.Tool\n            .SetCustomToolPlugin(toolPluginRecord.LoadPlugin());\n                \/\/Subscribe on event\n                StaticExchange.PointUpdate += onPointUpdate; \n                \/\/Patiently wait for result\n                Point3D result = await WaitForUserChoiceAsync();\n\n                MessageBox.Show(\n                    \"Point: \"+\n                     \"X:\" + result.X.ToString(\"0.##\") + \" \" +\n                     \"Y:\" + result.Y.ToString(\"0.##\") + \" \" +\n                     \"Z:\" + result.Z.ToString(\"0.##\") + \" \");\n            }\n            catch (Exception ex)\n            {\n                MessageBox.Show(ex.Message);\n            }\n            finally\n            {\n                \/\/Unsubscribe and switch back to Tool.Select\n                StaticExchange.PointUpdate -= onPointUpdate; \n                ANA.Application.MainDocument.Tool.Value = Tool.Select;\n            }\n        }<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki slack-dark\" style=\"background-color: #222222\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #569CD6\">private<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #569CD6\">async<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #569CD6\">void<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #DCDCAA\">btnPickNavisPoint_Click<\/span><span style=\"color: #E6E6E6\">(<\/span><span style=\"color: #569CD6\">object<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #9CDCFE\">sender<\/span><span style=\"color: #E6E6E6\">, <\/span><span style=\"color: #4EC9B0\">EventArgs<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #9CDCFE\">e<\/span><span style=\"color: #E6E6E6\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">      <\/span><span style=\"color: #C586C0\">try<\/span><span style=\"color: #E6E6E6\"> { <\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">            \/\/search for plugin availability <\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">            <\/span><span style=\"color: #4EC9B0\">ToolPluginRecord<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #9CDCFE\">toolPluginRecord<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #D4D4D4\">=<\/span><span style=\"color: #E6E6E6\">                    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">                   (<\/span><span style=\"color: #4EC9B0\">ToolPluginRecord<\/span><span style=\"color: #E6E6E6\">)<\/span><span style=\"color: #9CDCFE\">ANA<\/span><span style=\"color: #E6E6E6\">.<\/span><span style=\"color: #9CDCFE\">Application<\/span><span style=\"color: #E6E6E6\">.<\/span><span style=\"color: #9CDCFE\">Plugins<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">                       .<\/span><span style=\"color: #DCDCAA\">FindPlugin<\/span><span style=\"color: #E6E6E6\">(<\/span><span style=\"color: #CE9178\">&quot;PickModelPointPlugin.ADSK&quot;<\/span><span style=\"color: #E6E6E6\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">        \/\/set Plugin for execution                                <\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">        <\/span><span style=\"color: #9CDCFE\">ANA<\/span><span style=\"color: #E6E6E6\">.<\/span><span style=\"color: #9CDCFE\">Application<\/span><span style=\"color: #E6E6E6\">.<\/span><span style=\"color: #9CDCFE\">MainDocument<\/span><span style=\"color: #E6E6E6\">.<\/span><span style=\"color: #9CDCFE\">Tool<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">            .<\/span><span style=\"color: #DCDCAA\">SetCustomToolPlugin<\/span><span style=\"color: #E6E6E6\">(<\/span><span style=\"color: #9CDCFE\">toolPluginRecord<\/span><span style=\"color: #E6E6E6\">.<\/span><span style=\"color: #DCDCAA\">LoadPlugin<\/span><span style=\"color: #E6E6E6\">());<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">                \/\/Subscribe on event<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">                <\/span><span style=\"color: #9CDCFE\">StaticExchange<\/span><span style=\"color: #E6E6E6\">.<\/span><span style=\"color: #9CDCFE\">PointUpdate<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #D4D4D4\">+=<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #9CDCFE\">onPointUpdate<\/span><span style=\"color: #E6E6E6\">; <\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">                \/\/Patiently wait for result<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">                <\/span><span style=\"color: #4EC9B0\">Point3D<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #9CDCFE\">result<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #D4D4D4\">=<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #569CD6\">await<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #DCDCAA\">WaitForUserChoiceAsync<\/span><span style=\"color: #E6E6E6\">();<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">                <\/span><span style=\"color: #9CDCFE\">MessageBox<\/span><span style=\"color: #E6E6E6\">.<\/span><span style=\"color: #DCDCAA\">Show<\/span><span style=\"color: #E6E6E6\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">                    <\/span><span style=\"color: #CE9178\">&quot;Point: &quot;<\/span><span style=\"color: #D4D4D4\">+<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">                     <\/span><span style=\"color: #CE9178\">&quot;X:&quot;<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #D4D4D4\">+<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #9CDCFE\">result<\/span><span style=\"color: #E6E6E6\">.<\/span><span style=\"color: #9CDCFE\">X<\/span><span style=\"color: #E6E6E6\">.<\/span><span style=\"color: #DCDCAA\">ToString<\/span><span style=\"color: #E6E6E6\">(<\/span><span style=\"color: #CE9178\">&quot;0.##&quot;<\/span><span style=\"color: #E6E6E6\">) <\/span><span style=\"color: #D4D4D4\">+<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #CE9178\">&quot; &quot;<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #D4D4D4\">+<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">                     <\/span><span style=\"color: #CE9178\">&quot;Y:&quot;<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #D4D4D4\">+<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #9CDCFE\">result<\/span><span style=\"color: #E6E6E6\">.<\/span><span style=\"color: #9CDCFE\">Y<\/span><span style=\"color: #E6E6E6\">.<\/span><span style=\"color: #DCDCAA\">ToString<\/span><span style=\"color: #E6E6E6\">(<\/span><span style=\"color: #CE9178\">&quot;0.##&quot;<\/span><span style=\"color: #E6E6E6\">) <\/span><span style=\"color: #D4D4D4\">+<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #CE9178\">&quot; &quot;<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #D4D4D4\">+<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">                     <\/span><span style=\"color: #CE9178\">&quot;Z:&quot;<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #D4D4D4\">+<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #9CDCFE\">result<\/span><span style=\"color: #E6E6E6\">.<\/span><span style=\"color: #9CDCFE\">Z<\/span><span style=\"color: #E6E6E6\">.<\/span><span style=\"color: #DCDCAA\">ToString<\/span><span style=\"color: #E6E6E6\">(<\/span><span style=\"color: #CE9178\">&quot;0.##&quot;<\/span><span style=\"color: #E6E6E6\">) <\/span><span style=\"color: #D4D4D4\">+<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #CE9178\">&quot; &quot;<\/span><span style=\"color: #E6E6E6\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">            }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">            <\/span><span style=\"color: #C586C0\">catch<\/span><span style=\"color: #E6E6E6\"> (<\/span><span style=\"color: #4EC9B0\">Exception<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #9CDCFE\">ex<\/span><span style=\"color: #E6E6E6\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">            {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">                <\/span><span style=\"color: #9CDCFE\">MessageBox<\/span><span style=\"color: #E6E6E6\">.<\/span><span style=\"color: #DCDCAA\">Show<\/span><span style=\"color: #E6E6E6\">(<\/span><span style=\"color: #9CDCFE\">ex<\/span><span style=\"color: #E6E6E6\">.<\/span><span style=\"color: #9CDCFE\">Message<\/span><span style=\"color: #E6E6E6\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">            }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">            <\/span><span style=\"color: #C586C0\">finally<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">            {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">                \/\/Unsubscribe and switch back to Tool.Select<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">                <\/span><span style=\"color: #9CDCFE\">StaticExchange<\/span><span style=\"color: #E6E6E6\">.<\/span><span style=\"color: #9CDCFE\">PointUpdate<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #D4D4D4\">-=<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #9CDCFE\">onPointUpdate<\/span><span style=\"color: #E6E6E6\">; <\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">                <\/span><span style=\"color: #9CDCFE\">ANA<\/span><span style=\"color: #E6E6E6\">.<\/span><span style=\"color: #9CDCFE\">Application<\/span><span style=\"color: #E6E6E6\">.<\/span><span style=\"color: #9CDCFE\">MainDocument<\/span><span style=\"color: #E6E6E6\">.<\/span><span style=\"color: #9CDCFE\">Tool<\/span><span style=\"color: #E6E6E6\">.<\/span><span style=\"color: #9CDCFE\">Value<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #D4D4D4\">=<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #9CDCFE\">Tool<\/span><span style=\"color: #E6E6E6\">.<\/span><span style=\"color: #9CDCFE\">Select<\/span><span style=\"color: #E6E6E6\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">            }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">        }<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">And now final peace &#8211; where magic is live.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Declare TaskCompletionSource,<\/li>\n\n\n\n<li>Wrap it into WaitUserChoice.<\/li>\n\n\n\n<li>In event handler call Source and pass argument.<\/li>\n<\/ol>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" style=\"color:#E6E6E6;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>        private TaskCompletionSource&lt;Point3D> _userChoiceTcs;\n\n        private async Task&lt;Point3D> WaitForUserChoiceAsync()\n        {\n            \/\/ Create a new TaskCompletionSource for this operation\n            _userChoiceTcs = new TaskCompletionSource&lt;Point3D>();\n            try\n            {\n                Point3D result = await _userChoiceTcs.Task;\n                return result;\n            }\n            finally\n            {\n                \/\/ Clean up\n                _userChoiceTcs = null;\n            }\n        }\n\n        private void onPointUpdate(PointEventArgs p)\n        {\n            \/\/Here come the user click result\n            _userChoiceTcs?.TrySetResult(new Point3D(p.Point.X,\n                p.Point.Y,\n                p.Point.Z));\n        }<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki slack-dark\" style=\"background-color: #222222\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #E6E6E6\">        <\/span><span style=\"color: #569CD6\">private<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #4EC9B0\">TaskCompletionSource<\/span><span style=\"color: #E6E6E6\">&lt;<\/span><span style=\"color: #4EC9B0\">Point3D<\/span><span style=\"color: #E6E6E6\">&gt; <\/span><span style=\"color: #9CDCFE\">_userChoiceTcs<\/span><span style=\"color: #E6E6E6\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">        <\/span><span style=\"color: #569CD6\">private<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #569CD6\">async<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #4EC9B0\">Task<\/span><span style=\"color: #E6E6E6\">&lt;<\/span><span style=\"color: #4EC9B0\">Point3D<\/span><span style=\"color: #E6E6E6\">&gt; <\/span><span style=\"color: #DCDCAA\">WaitForUserChoiceAsync<\/span><span style=\"color: #E6E6E6\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">        {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">            \/\/ Create a new TaskCompletionSource for this operation<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">            <\/span><span style=\"color: #9CDCFE\">_userChoiceTcs<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #D4D4D4\">=<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #569CD6\">new<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #4EC9B0\">TaskCompletionSource<\/span><span style=\"color: #E6E6E6\">&lt;<\/span><span style=\"color: #4EC9B0\">Point3D<\/span><span style=\"color: #E6E6E6\">&gt;();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">            <\/span><span style=\"color: #C586C0\">try<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">            {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">                <\/span><span style=\"color: #4EC9B0\">Point3D<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #9CDCFE\">result<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #D4D4D4\">=<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #569CD6\">await<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #9CDCFE\">_userChoiceTcs<\/span><span style=\"color: #E6E6E6\">.<\/span><span style=\"color: #9CDCFE\">Task<\/span><span style=\"color: #E6E6E6\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">                <\/span><span style=\"color: #C586C0\">return<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #9CDCFE\">result<\/span><span style=\"color: #E6E6E6\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">            }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">            <\/span><span style=\"color: #C586C0\">finally<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">            {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">                \/\/ Clean up<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">                <\/span><span style=\"color: #9CDCFE\">_userChoiceTcs<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #D4D4D4\">=<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #569CD6\">null<\/span><span style=\"color: #E6E6E6\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">            }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">        }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">        <\/span><span style=\"color: #569CD6\">private<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #569CD6\">void<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #DCDCAA\">onPointUpdate<\/span><span style=\"color: #E6E6E6\">(<\/span><span style=\"color: #4EC9B0\">PointEventArgs<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #9CDCFE\">p<\/span><span style=\"color: #E6E6E6\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">        {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">            \/\/Here come the user click result<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">            <\/span><span style=\"color: #9CDCFE\">_userChoiceTcs<\/span><span style=\"color: #D4D4D4\">?<\/span><span style=\"color: #E6E6E6\">.<\/span><span style=\"color: #DCDCAA\">TrySetResult<\/span><span style=\"color: #E6E6E6\">(<\/span><span style=\"color: #569CD6\">new<\/span><span style=\"color: #E6E6E6\"> <\/span><span style=\"color: #4EC9B0\">Point3D<\/span><span style=\"color: #E6E6E6\">(<\/span><span style=\"color: #9CDCFE\">p<\/span><span style=\"color: #E6E6E6\">.<\/span><span style=\"color: #9CDCFE\">Point<\/span><span style=\"color: #E6E6E6\">.<\/span><span style=\"color: #9CDCFE\">X<\/span><span style=\"color: #E6E6E6\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">                <\/span><span style=\"color: #9CDCFE\">p<\/span><span style=\"color: #E6E6E6\">.<\/span><span style=\"color: #9CDCFE\">Point<\/span><span style=\"color: #E6E6E6\">.<\/span><span style=\"color: #9CDCFE\">Y<\/span><span style=\"color: #E6E6E6\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">                <\/span><span style=\"color: #9CDCFE\">p<\/span><span style=\"color: #E6E6E6\">.<\/span><span style=\"color: #9CDCFE\">Point<\/span><span style=\"color: #E6E6E6\">.<\/span><span style=\"color: #9CDCFE\">Z<\/span><span style=\"color: #E6E6E6\">));<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E6E6E6\">        }<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">As a result we got message with coordinates of clicked points, as soon as user click on some object.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Lest deep dive in Autodesk NavisWorks api. First, we need a tool plugin with mouse down Interceptor: First, we need a tool plugin with mouse down Interceptor: Obviously, we may need to do some actions as soon as user click &hellip; <a href=\"https:\/\/bimsoft.qa\/index.php\/2025\/11\/26\/navisworks-c-pick-point\/\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3,6,4,5],"tags":[],"class_list":["post-7","post","type-post","status-publish","format-standard","hentry","category-api","category-autodesk","category-c","category-navisworks"],"_links":{"self":[{"href":"https:\/\/bimsoft.qa\/index.php\/wp-json\/wp\/v2\/posts\/7","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/bimsoft.qa\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/bimsoft.qa\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/bimsoft.qa\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/bimsoft.qa\/index.php\/wp-json\/wp\/v2\/comments?post=7"}],"version-history":[{"count":1,"href":"https:\/\/bimsoft.qa\/index.php\/wp-json\/wp\/v2\/posts\/7\/revisions"}],"predecessor-version":[{"id":8,"href":"https:\/\/bimsoft.qa\/index.php\/wp-json\/wp\/v2\/posts\/7\/revisions\/8"}],"wp:attachment":[{"href":"https:\/\/bimsoft.qa\/index.php\/wp-json\/wp\/v2\/media?parent=7"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/bimsoft.qa\/index.php\/wp-json\/wp\/v2\/categories?post=7"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/bimsoft.qa\/index.php\/wp-json\/wp\/v2\/tags?post=7"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}