Macro MeshToPart/sv: Difference between revisions
Renatorivo (talk | contribs) (new page) |
(Updating to match new version of source page) |
||
(24 intermediate revisions by 3 users not shown) | |||
Line 1: | Line 1: | ||
<languages/> |
|||
=== Konvertera Nät till Delar === |
|||
{{Macro/sv |
|||
|Name=MeshToPart |
|||
|Translate=MeshToPart |
|||
|Icon=Macro_MeshToPart.png |
|||
⚫ | |||
|Author=Wmayer |
|||
|Version=1.0 |
|||
|Date=2011-08-01 |
|||
|FCVersion=All |
|||
|Download=[https://www.freecadweb.org/wiki/images/f/fa/Macro_MeshToPart.png ToolBar Icon] |
|||
}} |
|||
==Beskrivning== |
|||
⚫ | |||
Detta makro omvandlar utvalda maskor till delar. Den har en bred tolerans, så använd den bara med föremål som inte har några kurvor annars får du fel eller konstiga resultat. |
|||
⚫ | |||
==Manus== |
|||
ToolBar Icon [[Image:Macro_MeshToPart.png]] |
|||
'''Macro_MeshToPart.FCMacro''' |
|||
{{MacroCode|code= |
|||
⚫ | |||
for obj in FreeCADGui.Selection.getSelection(): |
|||
if "Mesh" in obj.PropertiesList: |
|||
faces = [] |
|||
mesh = obj.Mesh |
|||
segments = mesh.getPlanarSegments(0.01) # use rather strict tolerance here |
|||
for i in segments: |
|||
if len(i) > 0: |
|||
# a segment can have inner holes |
|||
wires = MeshPart.wireFromSegment(mesh, i) |
|||
# we assume that the exterior boundary is that one with the biggest bounding box |
|||
# vi antar att den externa gränsen är den som ryms i den största markeringslådan |
|||
if len(wires) > 0: |
|||
ext = None |
|||
max_length = 0 |
|||
for i in wires: |
|||
if i.BoundBox.DiagonalLength > max_length: |
|||
max_length = i.BoundBox.DiagonalLength |
|||
ext = i |
|||
wires.remove(ext) |
|||
# all interior wires mark a hole and must reverse their orientation, otherwise Part.Face fails |
|||
# alla interiöra trådar markerar ett hål och deras orientering måste reverseras, annars så misslyckas Part.Face |
|||
for i in wires: |
|||
i.reverse() |
|||
# make sure that the exterior wires comes as first in the lsit |
|||
wires.insert(0, ext) |
|||
faces.append(Part.Face(wires)) |
|||
shell=Part.Compound(faces) |
|||
solid = Part.Solid(Part.Shell(faces)) |
|||
name = obj.Name |
|||
FreeCAD.ActiveDocument.removeObject(name) |
|||
FreeCAD.ActiveDocument.addObject("Part::Feature",name).Shape = solid |
|||
}} |
|||
{{clear}} |
|||
==Länk== |
|||
Diskussionen på forumet [http://forum.freecadweb.org/viewtopic.php?f=3&t=253&hilit=getPlanarSegments Convert mesh to solid?] |
Latest revision as of 11:08, 23 May 2020
Beskrivning |
---|
Detta makro omvandlar utvalda maskor till delar. Den har en bred tolerans, så använd den bara med föremål som inte har några kurvor annars får du konstiga resultat. Versions makro : 1.0 Datum senaste ändring : 2011-08-01 FreeCAD-versionen : All Ladda ner : ToolBar Icon Författare : Wmayer |
Författare |
Wmayer |
Ladda ner |
ToolBar Icon |
länkar |
Makros recept Så här installerar du makron Hur man anpassar verktygsfält |
Makroversion |
1.0 |
Datum senaste ändring |
2011-08-01 |
FreeCAD Version(s) |
All |
Standard genväg |
None |
Se även |
None |
Beskrivning
Detta makro omvandlar utvalda maskor till delar. Den har en bred tolerans, så använd den bara med föremål som inte har några kurvor annars får du fel eller konstiga resultat.
Manus
Macro_MeshToPart.FCMacro
import FreeCAD,FreeCADGui,Mesh,Part,MeshPart for obj in FreeCADGui.Selection.getSelection(): if "Mesh" in obj.PropertiesList: faces = [] mesh = obj.Mesh segments = mesh.getPlanarSegments(0.01) # use rather strict tolerance here for i in segments: if len(i) > 0: # a segment can have inner holes wires = MeshPart.wireFromSegment(mesh, i) # we assume that the exterior boundary is that one with the biggest bounding box if len(wires) > 0: ext = None max_length = 0 for i in wires: if i.BoundBox.DiagonalLength > max_length: max_length = i.BoundBox.DiagonalLength ext = i wires.remove(ext) # all interior wires mark a hole and must reverse their orientation, otherwise Part.Face fails for i in wires: i.reverse() # make sure that the exterior wires comes as first in the lsit wires.insert(0, ext) faces.append(Part.Face(wires)) shell=Part.Compound(faces) solid = Part.Solid(Part.Shell(faces)) name = obj.Name FreeCAD.ActiveDocument.removeObject(name) FreeCAD.ActiveDocument.addObject("Part::Feature",name).Shape = solid
Länk
Diskussionen på forumet Convert mesh to solid?