Help needed with intersecting geometry
-
HI This is my first post. Im writing a script which i hope will be able to create mortice and tennon geometry for woodworking enthusiasts. I've been trying to figure out how to get rid of the excess faces which are showing in the model. I was expecting the mortice slot to cut through the wood without leaving any other faces. I'm begining to realise that this is quite a complex task and probably not best suited for a beginner but if any one could pointme in the right direction I would appreciate it. Even if it's only to suggest what stuff I should study first to be able to get to the level I am wanting to be at with this project. I am including the code below
<span class="syntaxdefault">mod </span><span class="syntaxkeyword">= </span><span class="syntaxdefault">Sketchup</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">active_model </span><span class="syntaxcomment"># Open model<br /></span><span class="syntaxdefault">ents </span><span class="syntaxkeyword">= </span><span class="syntaxdefault">mod</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">entities </span><span class="syntaxcomment"># All entities in model<br /></span><span class="syntaxdefault">sel </span><span class="syntaxkeyword">= </span><span class="syntaxdefault">mod</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">selection </span><span class="syntaxcomment"># Current selectio<br /><br />#define constants<br /></span><span class="syntaxdefault">ORIGIN</span><span class="syntaxkeyword">=[</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">]<br /></span><span class="syntaxdefault">THICKNESS</span><span class="syntaxkeyword">=(</span><span class="syntaxdefault">25.4</span><span class="syntaxkeyword">*</span><span class="syntaxdefault">1.75</span><span class="syntaxkeyword">).</span><span class="syntaxdefault">to_i</span><span class="syntaxcomment"># 1 3/4"<br /></span><span class="syntaxdefault">BOTTOMGAP</span><span class="syntaxkeyword">=</span><span class="syntaxdefault">51<br />REBATE</span><span class="syntaxkeyword">=(</span><span class="syntaxdefault">THICKNESS </span><span class="syntaxkeyword">/ </span><span class="syntaxdefault">3</span><span class="syntaxkeyword">).</span><span class="syntaxdefault">to_i<br />MORTICETHICKNESS </span><span class="syntaxkeyword">= (</span><span class="syntaxdefault">THICKNESS </span><span class="syntaxkeyword">/ </span><span class="syntaxdefault">3</span><span class="syntaxkeyword">).</span><span class="syntaxdefault">to_i <br />LEN</span><span class="syntaxkeyword">=(</span><span class="syntaxdefault">4.5</span><span class="syntaxkeyword">*</span><span class="syntaxdefault">25.4</span><span class="syntaxkeyword">).</span><span class="syntaxdefault">to_i </span><span class="syntaxcomment">#4 1/2"<br /></span><span class="syntaxdefault">HEIGHT</span><span class="syntaxkeyword">=</span><span class="syntaxdefault">188 </span><span class="syntaxcomment">#6ft<br /></span><span class="syntaxdefault">SPACER</span><span class="syntaxkeyword">=</span><span class="syntaxdefault">20<br /><br /></span><span class="syntaxcomment">#define the main face corners<br /></span><span class="syntaxdefault">pts</span><span class="syntaxkeyword">=[]<br /></span><span class="syntaxdefault">pts</span><span class="syntaxkeyword">[</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">]=[</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">]<br /></span><span class="syntaxdefault">pts</span><span class="syntaxkeyword">[</span><span class="syntaxdefault">1</span><span class="syntaxkeyword">]=[</span><span class="syntaxdefault">LEN</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">]<br /></span><span class="syntaxdefault">pts</span><span class="syntaxkeyword">[</span><span class="syntaxdefault">2</span><span class="syntaxkeyword">]=[</span><span class="syntaxdefault">LEN</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">THICKNESS</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">]<br /></span><span class="syntaxdefault">pts</span><span class="syntaxkeyword">[</span><span class="syntaxdefault">3</span><span class="syntaxkeyword">]=[</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">THICKNESS</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">]<br /></span><span class="syntaxcomment">#draw the face<br /></span><span class="syntaxdefault">bottomFace</span><span class="syntaxkeyword">=</span><span class="syntaxdefault">pts<br />bottom</span><span class="syntaxkeyword">=</span><span class="syntaxdefault">ents</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">add_face pts<br /></span><span class="syntaxcomment">#extrude to Length<br /></span><span class="syntaxdefault">bottom</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">reverse</span><span class="syntaxkeyword">!().</span><span class="syntaxdefault">pushpull HEIGHT<br /><br /></span><span class="syntaxcomment">#create the rebate<br /></span><span class="syntaxdefault">pts1</span><span class="syntaxkeyword">=[]<br /></span><span class="syntaxdefault">pts1</span><span class="syntaxkeyword">[</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">]=</span><span class="syntaxdefault">ORIGIN<br />pts1</span><span class="syntaxkeyword">[</span><span class="syntaxdefault">1</span><span class="syntaxkeyword">]=[</span><span class="syntaxdefault">SPACER</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">]<br /></span><span class="syntaxdefault">pts1</span><span class="syntaxkeyword">[</span><span class="syntaxdefault">2</span><span class="syntaxkeyword">]=[</span><span class="syntaxdefault">SPACER</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">SPACER</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">]<br /></span><span class="syntaxdefault">pts1</span><span class="syntaxkeyword">[</span><span class="syntaxdefault">3</span><span class="syntaxkeyword">]=[</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">SPACER</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">]<br /></span><span class="syntaxdefault">rebateFace</span><span class="syntaxkeyword">=</span><span class="syntaxdefault">ents</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">add_face pts1<br />rebateFace</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">reverse</span><span class="syntaxkeyword">!().</span><span class="syntaxdefault">pushpull HEIGHT<br /><br /></span><span class="syntaxcomment">#define the bottom mortice slot corners<br /></span><span class="syntaxdefault">pts2</span><span class="syntaxkeyword">=[]<br /></span><span class="syntaxdefault">pts2</span><span class="syntaxkeyword">[</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">]=[</span><span class="syntaxdefault">LEN</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">MORTICETHICKNESS</span><span class="syntaxkeyword">, </span><span class="syntaxdefault">BOTTOMGAP</span><span class="syntaxkeyword">]<br /></span><span class="syntaxdefault">pts2</span><span class="syntaxkeyword">[</span><span class="syntaxdefault">1</span><span class="syntaxkeyword">]=[</span><span class="syntaxdefault">LEN</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">2</span><span class="syntaxkeyword">*</span><span class="syntaxdefault">MORTICETHICKNESS</span><span class="syntaxkeyword">, </span><span class="syntaxdefault">BOTTOMGAP</span><span class="syntaxkeyword">] <br /></span><span class="syntaxdefault">pts2</span><span class="syntaxkeyword">[</span><span class="syntaxdefault">2</span><span class="syntaxkeyword">]=[</span><span class="syntaxdefault">LEN</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">2</span><span class="syntaxkeyword">*</span><span class="syntaxdefault">MORTICETHICKNESS</span><span class="syntaxkeyword">, </span><span class="syntaxdefault">BOTTOMGAP </span><span class="syntaxkeyword">+ </span><span class="syntaxdefault">LEN</span><span class="syntaxkeyword">]<br /></span><span class="syntaxdefault">pts2</span><span class="syntaxkeyword">[</span><span class="syntaxdefault">3</span><span class="syntaxkeyword">]=[</span><span class="syntaxdefault">LEN</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">MORTICETHICKNESS</span><span class="syntaxkeyword">, </span><span class="syntaxdefault">BOTTOMGAP </span><span class="syntaxkeyword">+ </span><span class="syntaxdefault">LEN</span><span class="syntaxkeyword">]<br /></span><span class="syntaxcomment">#extrude the bottom mortice slot<br />#i would like this slot to cut through and subtract from the existing geometry<br /></span><span class="syntaxdefault">firstMorticeFace</span><span class="syntaxkeyword">=</span><span class="syntaxdefault">pts2<br />firstMortice</span><span class="syntaxkeyword">=</span><span class="syntaxdefault">ents</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">add_face pts2<br />firstMortice</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">reverse</span><span class="syntaxkeyword">!().</span><span class="syntaxdefault">pushpull LEN</span>
-
A few things in no specific order...
Don't redefine ORIGIN - it's already defined as a Point3d in SketchUp's cre-code - just use that.
It's also a good idea to use
model.active_entities
in case the user is within a group/component edit when using the tool: it is==model.entities
if they are in the model anyway.All 'raw' numbers in SketchUp are taken as 'inches' anyway.
So1.75
is one and three-quarter inches.
If you need to use mm use126.mm
to make something exactly 126 mm long - BUT SketchUp will 'recall' it in inches [~5"]. Read up in the API docs on the 'Numeric' class, which helps you swap between units and define Lengths etc, so inputting 123 in a dialog is taken as mm and shows as that even when SketchUp is converting it into inches for its own purposes...Learn how to wrap your code in a module/class etc and then 'call' it in a simple 'command' - there are several good tutorial threads in the SCF's Devs' Forum...
If you have Pro you can use the Solid tools in the API - put simplistically you make two groups and subtract one from the other.
However, it can be done if you think it through in something like your code...
Think about using temporary groups to form parts which you then add/subtract and finally explode...There are already several similar tools around so you would do well to crib some ideas from them, rather than reinventing the wheel from scratch
Good luck in your endeavors...
-
Thanks for the tips. Are there any tools you could recomend off hand or what terms I should search for add/subtract. I don't have pro version yet.
-
Boolean / Oscoolean ?
Advertisement