<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Insert DXF or DWG into a planar sketch using COM/C++ in Inventor Programming - iLogic, Macros, AddIns &amp; Apprentice</title>
    <link>https://forums.autodesk.com/t5/inventor-programming-ilogic/insert-dxf-or-dwg-into-a-planar-sketch-using-com-c/m-p/8737143#M96638</link>
    <description>&lt;P&gt;In the API help there is some VB code to do this and I'm translating it into COM/C++.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I think I'm there but I've probably used a bad cast or a wrong pointer type because the very last part crashes&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;// THIS CALL CRASHES, I SUSPECT THE LAST PARAMETER
hRes = pDwgTranslator-&amp;gt;Open(pDataMedium, pTranslationContext, pOptions, (IDispatch**)&amp;amp;pPartDoc);
&lt;/PRE&gt;
&lt;P&gt;I also suspect this line of mine:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;pTranslationContext-&amp;gt;OpenIntoExisting = pNewSketch ;
&lt;/PRE&gt;
&lt;P&gt;I'm also not sure about...&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;    CComPtr&amp;lt;ApplicationAddIn&amp;gt; pAppAddIn;
    hRes = pAppAddIns-&amp;gt;get_ItemById(CComBSTR("{C24E3AC2-122E-11D5-8E91-0010B541CD80}"), &amp;amp;pAppAddIn);
    if (FAILED(hRes)) {
        gLogger.Printf(ekErrMsg, L"get_ItemById failed");
        return;
    }

    CComPtr&amp;lt;TranslatorAddIn&amp;gt; pDwgTranslator;
    pDwgTranslator = pAppAddIn; // Is this correct?
&lt;/PRE&gt;
&lt;P&gt;The full fragment is here...&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;    hRes = pInvApp-&amp;gt;get_ApplicationAddIns(&amp;amp;pAppAddIns);
    if (FAILED(hRes)) {
        gLogger.Printf(ekErrMsg, L"get_ApplicationAddIns failed");
        return;
    }

    CComPtr&amp;lt;ApplicationAddIn&amp;gt; pAppAddIn;
    hRes = pAppAddIns-&amp;gt;get_ItemById(CComBSTR("{C24E3AC2-122E-11D5-8E91-0010B541CD80}"), &amp;amp;pAppAddIn);
    if (FAILED(hRes)) {
        gLogger.Printf(ekErrMsg, L"get_ItemById failed");
        return;
    }

    CComPtr&amp;lt;TranslatorAddIn&amp;gt; pDwgTranslator;
    pDwgTranslator = pAppAddIn;
    if (pDwgTranslator == nullptr) {
        gLogger.Printf(ekErrMsg, L"pDwgTranslator = pAppAddIn did not work");
        return;
    }

    CComPtr&amp;lt;TransientObjects&amp;gt; pTransientObjects = GetTransientObjectsPtr();
    CComPtr&amp;lt;DataMedium&amp;gt; pDataMedium;
    hRes = pTransientObjects-&amp;gt;CreateDataMedium(&amp;amp;pDataMedium);
    if (FAILED(hRes)) {
        gLogger.Printf(ekErrMsg, L"CreateDataMedium failed");
        return;
    }

    pDataMedium-&amp;gt;put_FileName(CComBSTR("C:\\Users\\Owen\\TEST.dxf"));

    CComPtr&amp;lt;TranslationContext&amp;gt; pTranslationContext;
    hRes = pTransientObjects-&amp;gt;CreateTranslationContext(&amp;amp;pTranslationContext);
    if (FAILED(hRes)) {
        gLogger.Printf(ekErrMsg, L"CreateTranslationContext failed");
        return;
    }

    hRes = pNewSketch-&amp;gt;Edit();
    if (FAILED(hRes)) {
        gLogger.Printf(ekErrMsg, L"Edit failed");
        return;
    }

    // !!! I SUSPECT THIS !!!
    pTranslationContext-&amp;gt;OpenIntoExisting = pNewSketch ;

    CComPtr&amp;lt;NameValueMap&amp;gt; pOptions;
    hRes = pTransientObjects-&amp;gt;CreateNameValueMap(&amp;amp;pOptions);
    if (FAILED(hRes)) {
        gLogger.Printf(ekErrMsg, L"Edit failed");
        return;
    }

    // Specify the layers to import
    pOptions-&amp;gt;Add(BSTR("SelectedLayers"), CComVariant("0"));
    pOptions-&amp;gt;Add(BSTR("InvertLayersSelection"), CComVariant (VARIANT_TRUE));

    // Specify the units
    pOptions-&amp;gt;Add(BSTR("FileUnits"), CComVariant("Centimeters"));

    //    ' Set to constraint the end points.
    pOptions-&amp;gt;Add(BSTR("ConstrainEndPoints"), CComVariant (VARIANT_TRUE));

    // !!!THIS CALL CRASHES I SUSPECT THE LAST PARAMETER!!!
    hRes = pDwgTranslator-&amp;gt;Open(pDataMedium, pTranslationContext, pOptions, (IDispatch**)&amp;amp;pPartDoc);
    if (FAILED(hRes)) {
        gLogger.Printf(ekErrMsg, L"Open DataMedium failed");
        return;
    }

    pNewSketch-&amp;gt;ExitEdit();
&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
    <pubDate>Wed, 17 Apr 2019 12:51:58 GMT</pubDate>
    <dc:creator>oransen</dc:creator>
    <dc:date>2019-04-17T12:51:58Z</dc:date>
    <item>
      <title>Insert DXF or DWG into a planar sketch using COM/C++</title>
      <link>https://forums.autodesk.com/t5/inventor-programming-ilogic/insert-dxf-or-dwg-into-a-planar-sketch-using-com-c/m-p/8737143#M96638</link>
      <description>&lt;P&gt;In the API help there is some VB code to do this and I'm translating it into COM/C++.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I think I'm there but I've probably used a bad cast or a wrong pointer type because the very last part crashes&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;// THIS CALL CRASHES, I SUSPECT THE LAST PARAMETER
hRes = pDwgTranslator-&amp;gt;Open(pDataMedium, pTranslationContext, pOptions, (IDispatch**)&amp;amp;pPartDoc);
&lt;/PRE&gt;
&lt;P&gt;I also suspect this line of mine:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;pTranslationContext-&amp;gt;OpenIntoExisting = pNewSketch ;
&lt;/PRE&gt;
&lt;P&gt;I'm also not sure about...&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;    CComPtr&amp;lt;ApplicationAddIn&amp;gt; pAppAddIn;
    hRes = pAppAddIns-&amp;gt;get_ItemById(CComBSTR("{C24E3AC2-122E-11D5-8E91-0010B541CD80}"), &amp;amp;pAppAddIn);
    if (FAILED(hRes)) {
        gLogger.Printf(ekErrMsg, L"get_ItemById failed");
        return;
    }

    CComPtr&amp;lt;TranslatorAddIn&amp;gt; pDwgTranslator;
    pDwgTranslator = pAppAddIn; // Is this correct?
&lt;/PRE&gt;
&lt;P&gt;The full fragment is here...&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;    hRes = pInvApp-&amp;gt;get_ApplicationAddIns(&amp;amp;pAppAddIns);
    if (FAILED(hRes)) {
        gLogger.Printf(ekErrMsg, L"get_ApplicationAddIns failed");
        return;
    }

    CComPtr&amp;lt;ApplicationAddIn&amp;gt; pAppAddIn;
    hRes = pAppAddIns-&amp;gt;get_ItemById(CComBSTR("{C24E3AC2-122E-11D5-8E91-0010B541CD80}"), &amp;amp;pAppAddIn);
    if (FAILED(hRes)) {
        gLogger.Printf(ekErrMsg, L"get_ItemById failed");
        return;
    }

    CComPtr&amp;lt;TranslatorAddIn&amp;gt; pDwgTranslator;
    pDwgTranslator = pAppAddIn;
    if (pDwgTranslator == nullptr) {
        gLogger.Printf(ekErrMsg, L"pDwgTranslator = pAppAddIn did not work");
        return;
    }

    CComPtr&amp;lt;TransientObjects&amp;gt; pTransientObjects = GetTransientObjectsPtr();
    CComPtr&amp;lt;DataMedium&amp;gt; pDataMedium;
    hRes = pTransientObjects-&amp;gt;CreateDataMedium(&amp;amp;pDataMedium);
    if (FAILED(hRes)) {
        gLogger.Printf(ekErrMsg, L"CreateDataMedium failed");
        return;
    }

    pDataMedium-&amp;gt;put_FileName(CComBSTR("C:\\Users\\Owen\\TEST.dxf"));

    CComPtr&amp;lt;TranslationContext&amp;gt; pTranslationContext;
    hRes = pTransientObjects-&amp;gt;CreateTranslationContext(&amp;amp;pTranslationContext);
    if (FAILED(hRes)) {
        gLogger.Printf(ekErrMsg, L"CreateTranslationContext failed");
        return;
    }

    hRes = pNewSketch-&amp;gt;Edit();
    if (FAILED(hRes)) {
        gLogger.Printf(ekErrMsg, L"Edit failed");
        return;
    }

    // !!! I SUSPECT THIS !!!
    pTranslationContext-&amp;gt;OpenIntoExisting = pNewSketch ;

    CComPtr&amp;lt;NameValueMap&amp;gt; pOptions;
    hRes = pTransientObjects-&amp;gt;CreateNameValueMap(&amp;amp;pOptions);
    if (FAILED(hRes)) {
        gLogger.Printf(ekErrMsg, L"Edit failed");
        return;
    }

    // Specify the layers to import
    pOptions-&amp;gt;Add(BSTR("SelectedLayers"), CComVariant("0"));
    pOptions-&amp;gt;Add(BSTR("InvertLayersSelection"), CComVariant (VARIANT_TRUE));

    // Specify the units
    pOptions-&amp;gt;Add(BSTR("FileUnits"), CComVariant("Centimeters"));

    //    ' Set to constraint the end points.
    pOptions-&amp;gt;Add(BSTR("ConstrainEndPoints"), CComVariant (VARIANT_TRUE));

    // !!!THIS CALL CRASHES I SUSPECT THE LAST PARAMETER!!!
    hRes = pDwgTranslator-&amp;gt;Open(pDataMedium, pTranslationContext, pOptions, (IDispatch**)&amp;amp;pPartDoc);
    if (FAILED(hRes)) {
        gLogger.Printf(ekErrMsg, L"Open DataMedium failed");
        return;
    }

    pNewSketch-&amp;gt;ExitEdit();
&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 17 Apr 2019 12:51:58 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/inventor-programming-ilogic/insert-dxf-or-dwg-into-a-planar-sketch-using-com-c/m-p/8737143#M96638</guid>
      <dc:creator>oransen</dc:creator>
      <dc:date>2019-04-17T12:51:58Z</dc:date>
    </item>
    <item>
      <title>Re: Insert DXF or DWG into a planar sketch using COM/C++</title>
      <link>https://forums.autodesk.com/t5/inventor-programming-ilogic/insert-dxf-or-dwg-into-a-planar-sketch-using-com-c/m-p/8741552#M96716</link>
      <description>&lt;P&gt;Can you share your C++ project to reproduce the problem? And let me which Inventor you are using. Don't share any confidential data here.&lt;/P&gt;</description>
      <pubDate>Fri, 19 Apr 2019 07:19:12 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/inventor-programming-ilogic/insert-dxf-or-dwg-into-a-planar-sketch-using-com-c/m-p/8741552#M96716</guid>
      <dc:creator>YuhanZhang</dc:creator>
      <dc:date>2019-04-19T07:19:12Z</dc:date>
    </item>
    <item>
      <title>Re: Insert DXF or DWG into a planar sketch using COM/C++</title>
      <link>https://forums.autodesk.com/t5/inventor-programming-ilogic/insert-dxf-or-dwg-into-a-planar-sketch-using-com-c/m-p/8746723#M96782</link>
      <description>&lt;P&gt;Thanks for the reply, I'll knock together something simple over the next day or so...&lt;/P&gt;</description>
      <pubDate>Tue, 23 Apr 2019 07:19:37 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/inventor-programming-ilogic/insert-dxf-or-dwg-into-a-planar-sketch-using-com-c/m-p/8746723#M96782</guid>
      <dc:creator>oransen</dc:creator>
      <dc:date>2019-04-23T07:19:37Z</dc:date>
    </item>
    <item>
      <title>Re: Insert DXF or DWG into a planar sketch using COM/C++</title>
      <link>https://forums.autodesk.com/t5/inventor-programming-ilogic/insert-dxf-or-dwg-into-a-planar-sketch-using-com-c/m-p/8749238#M96835</link>
      <description>&lt;P&gt;Here is a version with no error checking and fewer of own functions. A comment towards the end of the code shows where it crashes...&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;    // Create a part
    CComPtr&amp;lt;PartDocument&amp;gt; pPartDoc;
    bool bOk = CreateNewPart(GetInvAppPtr(),pPartDoc,L"Test");
    if (!bOk) {
        return;
    }

    CComPtr&amp;lt;PartComponentDefinition&amp;gt; pPartDef;
    pPartDoc-&amp;gt;get_ComponentDefinition(&amp;amp;pPartDef);

    CComPtr&amp;lt;PlanarSketch&amp;gt; pNewSketch;
    CComPtr&amp;lt;WorkPlane&amp;gt; pWorkPlane;

    // Get the work plane from the list of work planes in the part...
    pPartDef-&amp;gt;WorkPlanes-&amp;gt;get_Item(CComVariant(1), &amp;amp;pWorkPlane);

    // Get the list of sketches
    CComPtr&amp;lt;PlanarSketches&amp;gt; pSketchList ;
    pPartDef-&amp;gt;get_Sketches (&amp;amp;pSketchList);

    pSketchList-&amp;gt;Add (_variant_t((IDispatch *)pWorkPlane),VARIANT_FALSE,&amp;amp;pNewSketch) ;

    const CString kcsSketchName (L"SketchTest");
    pNewSketch-&amp;gt;put_Name (CComBSTR (kcsSketchName)) ;

    // Add a dxf file
    CComPtr&amp;lt;Application&amp;gt; pInvApp = GetInvAppPtr();
    CComPtr&amp;lt;ApplicationAddIns&amp;gt; pAppAddIns;
    pInvApp-&amp;gt;get_ApplicationAddIns(&amp;amp;pAppAddIns);

    CComPtr&amp;lt;ApplicationAddIn&amp;gt; pAppAddIn;
    pAppAddIns-&amp;gt;get_ItemById(CComBSTR("{C24E3AC2-122E-11D5-8E91-0010B541CD80}"), &amp;amp;pAppAddIn);

    CComPtr&amp;lt;TranslatorAddIn&amp;gt; pDwgTranslator;
    pDwgTranslator = pAppAddIn;

    CComPtr&amp;lt;TransientObjects&amp;gt; pTransientObjects = GetTransientObjectsPtr();
    CComPtr&amp;lt;DataMedium&amp;gt; pDataMedium;
    pTransientObjects-&amp;gt;CreateDataMedium(&amp;amp;pDataMedium);

    pDataMedium-&amp;gt;put_FileName(CComBSTR("C:\\Users\\Owen\\Documents\\Temp\\Drawing1.dxf"));

    CComPtr&amp;lt;TranslationContext&amp;gt; pTranslationContext;
    pTransientObjects-&amp;gt;CreateTranslationContext(&amp;amp;pTranslationContext);

    pNewSketch-&amp;gt;Edit();

    // !!! I SUSPECT THIS !!!
    pTranslationContext-&amp;gt;OpenIntoExisting = pNewSketch ;

    CComPtr&amp;lt;NameValueMap&amp;gt; pOptions;
    pTransientObjects-&amp;gt;CreateNameValueMap(&amp;amp;pOptions);

    // Specify the layers to import
    pOptions-&amp;gt;Add(BSTR("SelectedLayers"), CComVariant("0"));
    pOptions-&amp;gt;Add(BSTR("InvertLayersSelection"), CComVariant (VARIANT_TRUE));

    // Specify the units
    pOptions-&amp;gt;Add(BSTR("FileUnits"), CComVariant("Centimeters"));

    //    ' Set to constraint the end points.
    pOptions-&amp;gt;Add(BSTR("ConstrainEndPoints"), CComVariant (VARIANT_TRUE));

    // !!!THIS CALL CRASHES I SUSPECT THE LAST PARAMETER!!!
    pDwgTranslator-&amp;gt;Open(pDataMedium, pTranslationContext, pOptions, (IDispatch**)&amp;amp;pPartDoc);

    pNewSketch-&amp;gt;ExitEdit();
&lt;/PRE&gt;</description>
      <pubDate>Wed, 24 Apr 2019 06:37:49 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/inventor-programming-ilogic/insert-dxf-or-dwg-into-a-planar-sketch-using-com-c/m-p/8749238#M96835</guid>
      <dc:creator>oransen</dc:creator>
      <dc:date>2019-04-24T06:37:49Z</dc:date>
    </item>
  </channel>
</rss>

