I have created an object representing a recessed light -- see attachment (3D section). In order to cut the appropriate hole in the ceiling soffit, I need to use an additional cylinder to do SEO and later hide its layer.
Is it possible to include an "invisible" solid within the GDL object itself, so I could just use the object as the SEO operator? Or is it possible to automatically cut the hole without having to resort to SEO at all?
AFAIK if your object has been created with solid elements (ie. slabs etc) rather than single surfaces then it should be able to perform SEO's using it as the operator. In your case because the outer perimeter of your light is recessed up above the ceiling plane use the "Subtraction with downwards extrusion" option. My experience here is very limited though, so I am happy to be corrected.
Thanks Stuart - that was actually a brilliant thought, it's just for some reason the upward extrusion gives some results with this lamp, while downward extrusion does not do anything.
I will try creating a simple revolved solid and try to turn off wall/edge visibility in GDL, so *in theory* this will create an invisible solid around the light fixture that I hope will be included in the SEO calculation. The question is, will this be still treated as a solid element. I will report.
matjashka wrote: ...Is it possible to include an "invisible" solid within the GDL object itself, so I could just use the object as the SEO operator?...
This is possible but you must script the object to make it happen. Your code for the main object will remain just the same but then you will add an if/then statement invoking the GLOB_CONTEXT variable (for when GLOB_CONTEXT equals 43 or 44 most likely) in which you script for the elements to be present during the SEO operation.
IF GLOB_CONTEXT = 43 OR GLOB_CONTEXT = 44 THEN : do something here to occur during an SEO operation : ENDIF
If you have made your light from slabs, walls, etc and allowed ArchiCAD to create the GDL code, this can still be added (assuming you saved the part as editable GDL script) but there will be a scaling factor that must be dealt with as you script your part. You will also still need to know a little about GDL scripting.
AC 19 6006 & AC 20
Mac OS 10.11.5
15" Retina MacBook Pro 2.6
27" iMac Retina 5K
Looking for a similar solution for AC14 Library Lights. Using the Recessed Flourescent for example, when subtracting downward, only some of the elements from the part subtract the ceiling (ie. the lamps), so I am assuming the others (ie. the housing) were not actually solids to begin with. So how can I add something to this part that will subtract out a rectangle from the ceiling and will change if I change the size of the fixture?
I don't know how you created your fixture but I assume like most people you built it in 3D and saved as editable GDL object.
Your objective is to add a "cutter" volume to the GDL code that will cut a hole, but remain invisible (this was my main question above). Now, you can either add this volume to the group of solids that make up your light and re-save, OR you can just add the code to your existing object.
For all who look for similar solution:
1) as a general rule, ID all your solids so it's easier to find the solid in GDL code;
2) the new solid must have the same space coordinates as your original;
3) you may save only what you need as a separate GDL object, and just open its code, copy and paste relevant fragments of code to your original object. It's much easier than typing the code from scratch.
4) as Erich pointed out above, wrap the "cutter" volume GDL code with GLOB_CONTEXT conditional statement (see Erich's post). It won't show up in 3D but will join the volumes calculated in SEO.
5) because you want to keep it parametric, the same size variables you use to resize your light fixture will also apply to the "cutter" volume. I'm lazy in this case -- if the volumes are more complicated, I just bulk save all manufacturer's sizes into the same library part and use some functions to display only the size I need. This is faster than scripting everything.