<?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 ACAPI_Element_Create won't work - help in Archicad C++ API</title>
    <link>https://community.graphisoft.com/t5/Archicad-C-API/ACAPI-Element-Create-won-t-work-help/m-p/638551#M9939</link>
    <description>&lt;P&gt;Hello, I'm pretty new to archicad api coding.&lt;/P&gt;&lt;P&gt;I'm trying to do what I think to be a very simple task, create an object via api. I'm doing a sample code that should create an object in coordinates (0,0).&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I'm using an object that is already part of default archicad library (Culla.gsm for italian archicad). Could someone help me find what I'm doing wrong?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I want also to say that, for now&lt;STRONG&gt;, I'm using a DEMO version of Archicad, please tell me if this could also be the cause of the issue&lt;/STRONG&gt;. I've been using archicad v28 and api dev kit 28.2000.&lt;/P&gt;&lt;P&gt;When I run the add-on,&amp;nbsp;&lt;SPAN&gt;&amp;nbsp;&lt;STRONG&gt;I get error code -2130313112 when calling&amp;nbsp;ACAPI_Element_Create&lt;/STRONG&gt;. This is the case without memo. If I use&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;memo and call ACAPI_Element_Create with memo archicad crashes. (now the screenshots are with memo)&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I'm pasting the code I wrote:&lt;/P&gt;&lt;LI-CODE lang="cpp"&gt;GSErrCode PlaceObjectAtOrigin() {

        API_Element element;
        BNZeroMemory(&amp;amp;element, sizeof(API_Element));
        element.header.type = API_ObjectID;
        element.header.floorInd = 0;
        element.object.pos.x = 0.0;
        element.object.pos.y = 0.0;
        element.header.layer = ACAPI_CreateAttributeIndex(1);
 
        API_LibPart libPart;
        BNZeroMemory(&amp;amp;libPart, sizeof(API_LibPart));
        Int32 libPartCount;
        GS::UniString libPartName("Culla"); 
        const GS::uchar_t* libPartNameUChar = libPartName.ToUStr();  // Convert to uchar_t*
        size_t nameLength = libPartName.GetLength();                 // Get length of the string
        memcpy(libPart.docu_UName, libPartNameUChar, nameLength * sizeof(GS::uchar_t));// Copy the string to libPart.docu_UName using memcpy
        libPart.docu_UName[nameLength] = '\0';  // Null-terminate the string

        ACAPI_WriteReport("trying to assign default elements'", true);
        GSErrCode m_err = ACAPI_Element_GetDefaults(&amp;amp;element, NULL);
        ACAPI_WriteReport("assigned default elements'", true);
        Int32 m_ParamsCount = 0;
        double a, b;
        API_AddParType** params = NULL;
        m_err = ACAPI_LibraryPart_GetParams(libPart.index, &amp;amp;a, &amp;amp;b, &amp;amp;m_ParamsCount, &amp;amp;params);
        API_ElementMemo* m_memo;
        BNZeroMemory(&amp;amp;m_memo, sizeof(API_ElementMemo));
        m_memo-&amp;gt;params = params;
        m_err = ACAPI_LibraryPart_Search(&amp;amp;libPart, false, false);      // Check if the library part was found
        if (m_err == NoError) {
            element.object.libInd = libPart.index;  // Set the object's library index
            ACAPI_WriteReport("library obj found and index assigned - culla", true);
        }
        else {
            ACAPI_WriteReport("Error: Could not find the library part 'Culla'", true);
            ACAPI_WriteReport((std::string("Error code: ") + std::to_string(m_err)).c_str(), true);
            return m_err;
        }


        // Place the object
        GSErrCode err_place = ACAPI_CallUndoableCommand("Place object", [&amp;amp;]() -&amp;gt; GSErrCode {
             return ACAPI_Element_Create(&amp;amp;element, m_memo);  //m_memo or null
        });

        if (err_place != NoError) {
            ACAPI_WriteReport((std::string("Error code: ") + std::to_string(err_place)).c_str(), true);
        }
        return err_place;
    }&lt;/LI-CODE&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;&lt;P&gt;Thanks in advance&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;</description>
    <pubDate>Tue, 05 Nov 2024 10:08:37 GMT</pubDate>
    <dc:creator>zaza95</dc:creator>
    <dc:date>2024-11-05T10:08:37Z</dc:date>
    <item>
      <title>ACAPI_Element_Create won't work - help</title>
      <link>https://community.graphisoft.com/t5/Archicad-C-API/ACAPI-Element-Create-won-t-work-help/m-p/638551#M9939</link>
      <description>&lt;P&gt;Hello, I'm pretty new to archicad api coding.&lt;/P&gt;&lt;P&gt;I'm trying to do what I think to be a very simple task, create an object via api. I'm doing a sample code that should create an object in coordinates (0,0).&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I'm using an object that is already part of default archicad library (Culla.gsm for italian archicad). Could someone help me find what I'm doing wrong?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I want also to say that, for now&lt;STRONG&gt;, I'm using a DEMO version of Archicad, please tell me if this could also be the cause of the issue&lt;/STRONG&gt;. I've been using archicad v28 and api dev kit 28.2000.&lt;/P&gt;&lt;P&gt;When I run the add-on,&amp;nbsp;&lt;SPAN&gt;&amp;nbsp;&lt;STRONG&gt;I get error code -2130313112 when calling&amp;nbsp;ACAPI_Element_Create&lt;/STRONG&gt;. This is the case without memo. If I use&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;memo and call ACAPI_Element_Create with memo archicad crashes. (now the screenshots are with memo)&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I'm pasting the code I wrote:&lt;/P&gt;&lt;LI-CODE lang="cpp"&gt;GSErrCode PlaceObjectAtOrigin() {

        API_Element element;
        BNZeroMemory(&amp;amp;element, sizeof(API_Element));
        element.header.type = API_ObjectID;
        element.header.floorInd = 0;
        element.object.pos.x = 0.0;
        element.object.pos.y = 0.0;
        element.header.layer = ACAPI_CreateAttributeIndex(1);
 
        API_LibPart libPart;
        BNZeroMemory(&amp;amp;libPart, sizeof(API_LibPart));
        Int32 libPartCount;
        GS::UniString libPartName("Culla"); 
        const GS::uchar_t* libPartNameUChar = libPartName.ToUStr();  // Convert to uchar_t*
        size_t nameLength = libPartName.GetLength();                 // Get length of the string
        memcpy(libPart.docu_UName, libPartNameUChar, nameLength * sizeof(GS::uchar_t));// Copy the string to libPart.docu_UName using memcpy
        libPart.docu_UName[nameLength] = '\0';  // Null-terminate the string

        ACAPI_WriteReport("trying to assign default elements'", true);
        GSErrCode m_err = ACAPI_Element_GetDefaults(&amp;amp;element, NULL);
        ACAPI_WriteReport("assigned default elements'", true);
        Int32 m_ParamsCount = 0;
        double a, b;
        API_AddParType** params = NULL;
        m_err = ACAPI_LibraryPart_GetParams(libPart.index, &amp;amp;a, &amp;amp;b, &amp;amp;m_ParamsCount, &amp;amp;params);
        API_ElementMemo* m_memo;
        BNZeroMemory(&amp;amp;m_memo, sizeof(API_ElementMemo));
        m_memo-&amp;gt;params = params;
        m_err = ACAPI_LibraryPart_Search(&amp;amp;libPart, false, false);      // Check if the library part was found
        if (m_err == NoError) {
            element.object.libInd = libPart.index;  // Set the object's library index
            ACAPI_WriteReport("library obj found and index assigned - culla", true);
        }
        else {
            ACAPI_WriteReport("Error: Could not find the library part 'Culla'", true);
            ACAPI_WriteReport((std::string("Error code: ") + std::to_string(m_err)).c_str(), true);
            return m_err;
        }


        // Place the object
        GSErrCode err_place = ACAPI_CallUndoableCommand("Place object", [&amp;amp;]() -&amp;gt; GSErrCode {
             return ACAPI_Element_Create(&amp;amp;element, m_memo);  //m_memo or null
        });

        if (err_place != NoError) {
            ACAPI_WriteReport((std::string("Error code: ") + std::to_string(err_place)).c_str(), true);
        }
        return err_place;
    }&lt;/LI-CODE&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;&lt;P&gt;Thanks in advance&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;</description>
      <pubDate>Tue, 05 Nov 2024 10:08:37 GMT</pubDate>
      <guid>https://community.graphisoft.com/t5/Archicad-C-API/ACAPI-Element-Create-won-t-work-help/m-p/638551#M9939</guid>
      <dc:creator>zaza95</dc:creator>
      <dc:date>2024-11-05T10:08:37Z</dc:date>
    </item>
    <item>
      <title>Re: ACAPI_Element_Create won't work - help</title>
      <link>https://community.graphisoft.com/t5/Archicad-C-API/ACAPI-Element-Create-won-t-work-help/m-p/639171#M9943</link>
      <description>&lt;P&gt;Hi, I modified your code. Please try the following one to see whether it works:&lt;/P&gt;
&lt;P&gt;HTH.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;LI-CODE lang="markup"&gt;GSErrCode PlaceObjectAtOrigin() {
	API_Element element;
	BNZeroMemory(&amp;amp;element, sizeof(API_Element));
	element.header.type = API_ObjectID;
	element.header.floorInd = 0;
	element.object.pos.x = 0.0;
	element.object.pos.y = 0.0;
	element.header.layer = ACAPI_CreateAttributeIndex(1);

	API_LibPart libPart;
	BNZeroMemory(&amp;amp;libPart, sizeof(API_LibPart));
	Int32 libPartCount;
	GS::UniString libPartName(L("Culla")); 
	const GS::uchar_t* libPartNameUChar = libPartName.ToUStr();  // Convert to uchar_t*
	size_t nameLength = libPartName.GetLength();                 // Get length of the string
	memcpy(libPart.docu_UName, libPartNameUChar, nameLength * sizeof(GS::uchar_t));// Copy the string to libPart.docu_UName using memcpy
	libPart.docu_UName[nameLength] = '\0';  // Null-terminate the string

	ACAPI_WriteReport("trying to assign default elements'", true);

	API_ElementMemo m_memo{};

	GSErrCode m_err = ACAPI_Element_GetDefaults(&amp;amp;element, &amp;amp;m_memo);
	ACAPI_WriteReport("assigned default elements'", true);
	Int32 m_ParamsCount = 0;
	m_err = ACAPI_LibraryPart_Search(&amp;amp;libPart, false, false);      // Check if the library part was found
	if (m_err == NoError) {
		element.object.libInd = libPart.index;  // Set the object's library index
		ACAPI_WriteReport("library obj found and index assigned - culla", true);

		double a, b;
		API_AddParType** params = NULL;
		m_err = ACAPI_LibraryPart_GetParams(libPart.index, &amp;amp;a, &amp;amp;b, &amp;amp;m_ParamsCount, &amp;amp;params);

		m_memo.params = params;
	}
	else {
		ACAPI_WriteReport("Error: Could not find the library part 'Culla'", true);
		ACAPI_WriteReport((std::string("Error code: ") + std::to_string(m_err)).c_str(), true);
		return m_err;
	}


	// Place the object
	GSErrCode err_place = ACAPI_CallUndoableCommand("Place object", [&amp;amp;]() -&amp;gt; GSErrCode {
			return ACAPI_Element_Create(&amp;amp;element, &amp;amp;m_memo);  //m_memo or null
	});

	ACAPI_DisposeElemMemoHdls(&amp;amp;m_memo);
	
	if (err_place != NoError) {
		ACAPI_WriteReport((std::string("Error code: ") + std::to_string(err_place)).c_str(), true);
	}
	return err_place;
}&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Mon, 11 Nov 2024 04:47:55 GMT</pubDate>
      <guid>https://community.graphisoft.com/t5/Archicad-C-API/ACAPI-Element-Create-won-t-work-help/m-p/639171#M9943</guid>
      <dc:creator>Hiromichi Shinkawa</dc:creator>
      <dc:date>2024-11-11T04:47:55Z</dc:date>
    </item>
  </channel>
</rss>

