Choosing the door from library through Add-On code
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
2023-11-08
12:57 PM
- last edited on
2024-09-16
02:39 PM
by
Doreena Deng
Hello team,
- Wanted to know how we can specify the kind of door that we want through code?
- Is it possible to load a set of custom doors/windows through add-on code or should we do it as a different step.
Solved! Go to Solution.
Accepted Solutions
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
2023-11-10 08:11 AM
Hi,
1. If you know the name of the door, then you can use ACAPI_LibPart_Search()
to find the index of that library part, then get that library part's parameters as well with ACAPI_LibPart_GetParams()
.
Put the index into the openingBase.libInd
member of API_WindowType
, and add the library part parameters to addPars
in API_ElementMemo, then call ACAPI_Element_Create()
.
2. There are several ways to do that:
- have the user load the library separately 🙂
- add the library to the list of loaded libraries with
ACAPI_LibraryManagement_AddLibraries()
Best, Akos
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
2023-11-10 08:11 AM
Hi,
1. If you know the name of the door, then you can use ACAPI_LibPart_Search()
to find the index of that library part, then get that library part's parameters as well with ACAPI_LibPart_GetParams()
.
Put the index into the openingBase.libInd
member of API_WindowType
, and add the library part parameters to addPars
in API_ElementMemo, then call ACAPI_Element_Create()
.
2. There are several ways to do that:
- have the user load the library separately 🙂
- add the library to the list of loaded libraries with
ACAPI_LibraryManagement_AddLibraries()
Best, Akos
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
2023-11-10 08:17 AM
Thank you @Akos Somorjai . Will try this out.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
2023-11-10 08:19 AM
There is a Do_CreateWindow() sample code in Element_Test; this may serve as a starting point.
Best, Akos
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
2023-11-22
12:14 PM
- last edited on
2023-11-23
12:11 AM
by
Laszlo Nagy
@Akos Somorjai For point 2. Is it possible to add the library file(.lcf) as part of the .bundle or .apx and provide code to load from the file included in the add-on bundle. I was able to load the library given a location from where to pick it up. Something mentioned in this documentation of ArchiCAD 25. Am I looking for something that is not possible to be done.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
2023-11-22 05:08 PM
Hi kency,
No, you may only add individual .gsm files as resources. You may ship an .lcf file with the add-on, but then you'll have to add it from code with ACAPI_Environment (APIEnv_AddLibrariesID, ...).
Best, Akos
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
2023-11-23 06:51 AM
Ok, maybe I am stuck at something really simple. I have added an .lcf file in the Resources folder of the Add-On. (updated cmake to include .lcf files).
Now,
How should I ship/bundle it? Is there anything additional that needs to be done for that.
Also, how can I refer to that file in the code? Right now I have been able to load from an absolute path as shown in the snippet below.
GSErrCode CreateLibrary (void)
{
IO::Location newLib("~/Desktop/libraries.lcf");
GSErrCode err;
err = ACAPI_Environment (APIEnv_AddLibrariesID, &newLib);
if (err == NoError){
std::cout << "New library has been loaded" << std::endl;
}
return err;
}
Thank you!
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
2023-11-23 03:07 PM
Hi,
I would ship it together with the add-on, but as a separate file. Ask the user to place the two together into a folder, and then from your code you can get the add-on's location in the file system with ACAPI_GetOwnLocation() and load the .lcf from there.
Best, Akos