Macro Overlap/it: Difference between revisions
Renatorivo (talk | contribs) (Created page with "==Installazione == Scaricare questi due file e salvarli nella directory macro:") |
(Updating to match new version of source page) |
||
(24 intermediate revisions by 3 users not shown) | |||
Line 1: | Line 1: | ||
<languages/> |
|||
{{Macro/it|Icon=Macro_Overlap|Name=Boolean Overlap/it|Name=Sovrapposizione Booleana|Description=strumento booleano tra [[Part Union/it|Part Union]] e [[Part Common/it|Part Common]]. Parametrico.|Author=DeepSOIC|Version=0.1}} |
|||
<div class="mw-translate-fuzzy"> |
|||
{{Macro/it |
|||
|Name=Boolean Overlap |
|||
|Translate=Sovrapposizione Booleana |
|||
|Icon=Macro_Overlap.png |
|||
|Description=Strumento booleano intermedio tra [[Part Union/it|Part Union]] e [[Part Common/it|Part Common]]. Parametrico. |
|||
|Author=DeepSOIC |
|||
|Version=0.2 |
|||
|Date=2018-08-31 |
|||
|FCVersion=All |
|||
|Download=[https://www.freecadweb.org/wiki/images/a/ac/Macro_Overlap.png ToolBar Icon] |
|||
}} |
|||
</div> |
|||
[[File:Macro_Boolean_Overlap_Screenshot.png|1000px]] |
[[File:Macro_Boolean_Overlap_Screenshot.png|1000px]] |
||
<div class="mw-translate-fuzzy"> |
|||
Sovrapposizione Booleana costruisce una forma che copre lo spazio occupato da non meno del 'OverlapIndex' forme. 'OverlapIndex' è una proprietà che può essere modificata. Il valore 1 fornisce il risultato equivalente a Part Union. Il valore pari al numero di forme rende lo strumento equivalente a Part Union. Il valore predefinito è 2, vale a dire il risultato riempie lo spazio in cui non vi è alcuna sovrapposizione. |
Sovrapposizione Booleana costruisce una forma che copre lo spazio occupato da non meno del 'OverlapIndex' forme. 'OverlapIndex' è una proprietà che può essere modificata. Il valore 1 fornisce il risultato equivalente a Part Union. Il valore pari al numero di forme rende lo strumento equivalente a Part Union. Il valore predefinito è 2, vale a dire il risultato riempie lo spazio in cui non vi è alcuna sovrapposizione. |
||
</div> |
|||
Richiede FreeCAD v0.17+ costruito su OCC non inferiore a 6.9.0 (provato con 7.0.0). |
Richiede FreeCAD v0.17+ costruito su OCC non inferiore a 6.9.0 (provato con 7.0.0). |
||
==Installazione == |
==Installazione == |
||
Scaricare |
Scaricare il file MacroOverlap.py e salvarlo nella directory delle macro: |
||
https://github.com/DeepSOIC/FreeCAD-Macros/raw/master/Overlap/Overlap.FCMacro |
|||
https://github.com/DeepSOIC/FreeCAD-Macros/raw/master/Overlap/MacroOverlap.py |
https://github.com/DeepSOIC/FreeCAD-Macros/raw/master/Overlap/MacroOverlap.py |
||
== |
==Uso== |
||
# Selezionare tre forme* o più per calcolare sovrapposizione tra loro. È anche possibile selezionare un singolo composto contenente le forme. |
|||
# Select three* or more shapes to compute overlap between. You can also select a single compound containing the argument shapes. |
|||
# In FreeCAD menu: Macro |
# In FreeCAD menu: Macro → Macros... → doppio-click su MacroOverlap.py. Viene creato un nuovo oggetto. |
||
# Selezionare il nuovo oggetto, e se necessario modificare la proprietà 'Overlap Index' nella scheda Dati |
|||
# Select the new object, and modify 'Overlap Index' property in property editor (Data tab), if necessary. |
|||
<div class="mw-translate-fuzzy"> |
|||
* two shapes will do, too, but the action of tool will be equivalent to either Part Common or Part Fuse, and so it is recommended to use Part tools instead. |
|||
<nowiki>*</nowiki> si può fare anche due forme, ma l'azione dello strumento è equivalente a Part Common or Part Fuse, e quindi si consiglia di utilizzare gli strumenti di Part. |
|||
</div> |
|||
==Script== |
|||
ToolBar Icon [[Image:Macro_Overlap.png|64px]] |
|||
{{clear}} |
{{clear}} |
||
MacroOverlap.py |
'''MacroOverlap.py''' |
||
{{Code|code= |
|||
{{MacroCode|code= |
|||
#*************************************************************************** |
|||
#* * |
|||
#* Copyright (c) 2016 - Victor Titov (DeepSOIC) * |
|||
#* <vv.titov@gmail.com> * |
|||
#* * |
|||
#* This program is free software; you can redistribute it and/or modify * |
|||
#* it under the terms of the GNU Lesser General Public License (LGPL) * |
|||
#* as published by the Free Software Foundation; either version 2 of * |
|||
#* the License, or (at your option) any later version. * |
|||
#* for detail see the LICENCE text file. * |
|||
#* * |
|||
#* This program is distributed in the hope that it will be useful, * |
|||
#* but WITHOUT ANY WARRANTY; without even the implied warranty of * |
|||
#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * |
|||
#* GNU Library General Public License for more details. * |
|||
#* * |
|||
#* You should have received a copy of the GNU Library General Public * |
|||
#* License along with this program; if not, write to the Free Software * |
|||
#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * |
|||
#* USA * |
|||
#* * |
|||
#*************************************************************************** |
|||
__Title__ = "Macro Overlap" |
|||
__Author__ = "DeepSOIC" |
|||
__Version__ = "0.2" |
|||
__Date__ = "31/08/2018" |
|||
__Comment__ = "Extension of Part Common boolean operation" |
|||
__Web__ = "http://forum.freecadweb.org/viewtopic.php?f=8&t=17755" |
|||
__Wiki__ = "http://www.freecadweb.org/wiki/index.php?title=Macro_Boolean_Overlap" |
|||
__Status__ = "experimental" |
|||
__Requires__ = "freecad 0.17.8053 with OCC 6.9.0+" |
|||
__Communication__ = "http://www.freecadweb.org/wiki/index.php?title=User:DeepSOIC" |
|||
__Help__ = ''' |
|||
Macro Overlap. |
|||
Requires FreeCAD v0.17.8053+ and OCC 6.9.0+ |
|||
Instructions: |
|||
Select three or more shapes to compute Overlap between. A single compound will do, too. |
|||
Then, run this macro. Parametric Overlap object is created. |
|||
''' |
|||
if __name__ == "__main__": #being run as a macro |
|||
import MacroOverlap |
|||
MacroOverlap.run() |
|||
import FreeCAD as App |
import FreeCAD as App |
||
if App.GuiUp: |
if App.GuiUp: |
||
Line 47: | Line 113: | ||
def execute(self,selfobj): |
def execute(self,selfobj): |
||
import BOPTools |
|||
import BOPTools.Utils as Utils |
import BOPTools.Utils as Utils |
||
from BOPTools.GeneralFuseResult import GeneralFuseResult |
from BOPTools.GeneralFuseResult import GeneralFuseResult |
||
Line 63: | Line 130: | ||
if len(gr.sourcesOfPiece(piece)) >= selfobj.OverlapIndex: |
if len(gr.sourcesOfPiece(piece)) >= selfobj.OverlapIndex: |
||
pieces_to_keep.append(piece) |
pieces_to_keep.append(piece) |
||
selfobj.Shape = |
selfobj.Shape = BOPTools.ShapeMerge.mergeShapes(pieces_to_keep) |
||
class ViewProviderOverlap: |
class ViewProviderOverlap: |
||
Line 105: | Line 172: | ||
'MenuText': "Overlap", |
'MenuText': "Overlap", |
||
'Accel': "", |
'Accel': "", |
||
'ToolTip': "Macro_Overlap: |
'ToolTip': "Macro_Overlap: boolean overlap. Collects space filled by at least 2 shapes."} |
||
def Activated(self): |
def Activated(self): |
||
Line 115: | Line 182: | ||
return False |
return False |
||
if App.GuiUp: |
if App.GuiUp and __name__ != "__main__": |
||
Gui.addCommand("Macro_Overlap", CommandMacroOverlap()) |
Gui.addCommand("Macro_Overlap", CommandMacroOverlap()) |
||
Line 141: | Line 208: | ||
mb.exec_() |
mb.exec_() |
||
}} |
}} |
||
Overlap.FCMacro: |
|||
{{Code|code= |
|||
__Title__ = "Macro Overlap" |
|||
__Author__ = "DeepSOIC" |
|||
__Version__ = "0.1" |
|||
__Date__ = "12/10/2016" |
|||
__Comment__ = "Extension of Part Common boolean operation" |
|||
__Web__ = "http://forum.freecadweb.org/viewtopic.php?f=8&t=17755" |
|||
__Wiki__ = "http://www.freecadweb.org/wiki/index.php?title=Macro_Boolean_Overlap" |
|||
__Status__ = "experimental" |
|||
__Requires__ = "freecad 0.17.8053 with OCC 6.9.0+" |
|||
__Communication__ = "http://www.freecadweb.org/wiki/index.php?title=User:DeepSOIC" |
|||
__Help__ = ''' |
|||
Macro Overlap. |
|||
Requires FreeCAD v0.17.8053+ and OCC 6.9.0+ |
|||
Instructions: |
|||
Select three or more shapes to compute Overlap between. A single compound will do, too. |
|||
Then, run this macro. Parametric Overlap object is created. |
|||
''' |
|||
import MacroOverlap |
|||
MacroOverlap.run() |
|||
}} |
|||
<languages/> |
Revision as of 17:10, 13 December 2020
Descrizione |
---|
Strumento booleano intermedio tra Part Union e Part Common. Parametrico. Versione macro: 0.2 Ultima modifica: 2018-08-31 Versione FreeCAD: All Download: ToolBar Icon Autore: DeepSOIC |
Autore |
DeepSOIC |
Download |
ToolBar Icon |
Link |
Raccolta di macro Come installare le macro Personalizzare la toolbar |
Versione macro |
0.2 |
Data ultima modifica |
2018-08-31 |
Versioni di FreeCAD |
All |
Scorciatoia |
Nessuna |
Vedere anche |
Nessuno |
Sovrapposizione Booleana costruisce una forma che copre lo spazio occupato da non meno del 'OverlapIndex' forme. 'OverlapIndex' è una proprietà che può essere modificata. Il valore 1 fornisce il risultato equivalente a Part Union. Il valore pari al numero di forme rende lo strumento equivalente a Part Union. Il valore predefinito è 2, vale a dire il risultato riempie lo spazio in cui non vi è alcuna sovrapposizione.
Richiede FreeCAD v0.17+ costruito su OCC non inferiore a 6.9.0 (provato con 7.0.0).
Installazione
Scaricare il file MacroOverlap.py e salvarlo nella directory delle macro:
https://github.com/DeepSOIC/FreeCAD-Macros/raw/master/Overlap/MacroOverlap.py
Uso
- Selezionare tre forme* o più per calcolare sovrapposizione tra loro. È anche possibile selezionare un singolo composto contenente le forme.
- In FreeCAD menu: Macro → Macros... → doppio-click su MacroOverlap.py. Viene creato un nuovo oggetto.
- Selezionare il nuovo oggetto, e se necessario modificare la proprietà 'Overlap Index' nella scheda Dati
* si può fare anche due forme, ma l'azione dello strumento è equivalente a Part Common or Part Fuse, e quindi si consiglia di utilizzare gli strumenti di Part.
Script
MacroOverlap.py
#*************************************************************************** #* * #* Copyright (c) 2016 - Victor Titov (DeepSOIC) * #* <vv.titov@gmail.com> * #* * #* This program is free software; you can redistribute it and/or modify * #* it under the terms of the GNU Lesser General Public License (LGPL) * #* as published by the Free Software Foundation; either version 2 of * #* the License, or (at your option) any later version. * #* for detail see the LICENCE text file. * #* * #* This program is distributed in the hope that it will be useful, * #* but WITHOUT ANY WARRANTY; without even the implied warranty of * #* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * #* GNU Library General Public License for more details. * #* * #* You should have received a copy of the GNU Library General Public * #* License along with this program; if not, write to the Free Software * #* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * #* USA * #* * #*************************************************************************** __Title__ = "Macro Overlap" __Author__ = "DeepSOIC" __Version__ = "0.2" __Date__ = "31/08/2018" __Comment__ = "Extension of Part Common boolean operation" __Web__ = "http://forum.freecadweb.org/viewtopic.php?f=8&t=17755" __Wiki__ = "http://www.freecadweb.org/wiki/index.php?title=Macro_Boolean_Overlap" __Status__ = "experimental" __Requires__ = "freecad 0.17.8053 with OCC 6.9.0+" __Communication__ = "http://www.freecadweb.org/wiki/index.php?title=User:DeepSOIC" __Help__ = ''' Macro Overlap. Requires FreeCAD v0.17.8053+ and OCC 6.9.0+ Instructions: Select three or more shapes to compute Overlap between. A single compound will do, too. Then, run this macro. Parametric Overlap object is created. ''' if __name__ == "__main__": #being run as a macro import MacroOverlap MacroOverlap.run() import FreeCAD as App if App.GuiUp: import FreeCADGui as Gui import Part def makeOverlapFeature(): '''makeOverlapFeature(): makes a Overlap parametric feature object. Returns the new object.''' selfobj = App.ActiveDocument.addObject("Part::FeaturePython","Overlap") Overlap(selfobj) ViewProviderOverlap(selfobj.ViewObject) return selfobj class Overlap: "The Overlap feature object" def __init__(self,selfobj): selfobj.addProperty("App::PropertyLinkList","Objects","Overlap","Input shape") selfobj.addProperty("App::PropertyInteger", "OverlapIndex", "Overlap", "minimum overlap order to output") selfobj.OverlapIndex = 2 selfobj.Proxy = self def execute(self,selfobj): import BOPTools import BOPTools.Utils as Utils from BOPTools.GeneralFuseResult import GeneralFuseResult list_of_shapes = [obj.Shape for obj in selfobj.Objects] if len(list_of_shapes) == 1 and list_of_shapes[0].ShapeType == "Compound": list_of_shapes = list_of_shapes[0].childShapes() list_of_shapes = Utils.upgradeToAggregateIfNeeded(list_of_shapes) pieces, map = list_of_shapes[0].generalFuse(list_of_shapes[1:]) gr = GeneralFuseResult(list_of_shapes, (pieces,map)) gr.explodeCompounds() gr.splitAggregates() pieces_to_keep = [] for piece in gr.pieces: if len(gr.sourcesOfPiece(piece)) >= selfobj.OverlapIndex: pieces_to_keep.append(piece) selfobj.Shape = BOPTools.ShapeMerge.mergeShapes(pieces_to_keep) class ViewProviderOverlap: def __init__(self,vobj): vobj.Proxy = self def getIcon(self): return ":/icons/Part_Overlap.svg" def attach(self, vobj): self.ViewObject = vobj self.Object = vobj.Object def setEdit(self,vobj,mode): return False def unsetEdit(self,vobj,mode): return def __getstate__(self): return None def __setstate__(self,state): return None def claimChildren(self): return self.Object.Objects def onDelete(self, feature, subelements): # subelements is a tuple of strings try: for f in self.Object.Objects: f.ViewObject.show() except Exception as err: App.Console.PrintError("Error in onDelete: " + err.message) return True class CommandMacroOverlap: "Command to create Overlap feature" def GetResources(self): return {'Pixmap' : ":/icons/Part_Overlap.svg", 'MenuText': "Overlap", 'Accel': "", 'ToolTip': "Macro_Overlap: boolean overlap. Collects space filled by at least 2 shapes."} def Activated(self): run() def IsActive(self): if App.ActiveDocument: return True else: return False if App.GuiUp and __name__ != "__main__": Gui.addCommand("Macro_Overlap", CommandMacroOverlap()) def run(): sel = Gui.Selection.getSelectionEx() try: if len(sel) < 1: raise Exception("Select two shapes to compute Overlap between, first! Then run this macro.") try: App.ActiveDocument.openTransaction("Macro Overlap") selfobj = makeOverlapFeature() selfobj.Objects = [it.Object for it in sel] for f in selfobj.Objects: f.ViewObject.hide() selfobj.Proxy.execute(selfobj) finally: App.ActiveDocument.commitTransaction() except Exception as err: from PySide import QtGui mb = QtGui.QMessageBox() mb.setIcon(mb.Icon.Warning) mb.setText(err.message) mb.setWindowTitle("Macro Overlap") mb.exec_()