Problem der topologischen Benennung
Einleitung
Das Problem der topologischen Benennung in FreeCAD bezieht sich auf die Frage, ob eine Form ihren internen Namen nach einer Modellierungsoperation (Polstern, Schnitt, Vereinigung, Fase, Verrundung, usw.) ändert. Dies führt dazu, dass andere parametrische Merkmale, die von dieser Form abhängen, brechen oder falsch berechnet werden. Dieser Sachverhalt betrifft alle Objekte in FreeCAD, ist aber besonders bemerkenswert, wenn Festkörper mit dem Arbeitsbereich PartDesign erstellt und diese mit dem Arbeitsbereich
TechDraw bemaßt werden.
- Wenn in
PartDesign ein Merkmal auf einer Fläche (oder Kante oder Scheitelpunkt) unterstützt wird, kann das Merkmal brechen, wenn der zugrunde liegende Festkörper seine Größe oder Ausrichtung ändert, da die ursprüngliche Fläche (oder Kante oder Knoten) intern umbenannt werden kann.
- Wenn in
TechDraw ein Maß die Länge einer projizierten Kante anzeigt, kann das Maß brechen, wenn das 3D-Modell geändert wird, da die Knoten umbenannt werden können, wodurch die gemessene Kante geändert wird.
Das Problem der topologischen Benennung ist ein komplexes Problem bei der CAD-Modellierung, das daraus herrührt, wie die internen FreeCAD-Routinen Aktualisierungen der mit dem OCCT-Kernel erstellten geometrischen Formen handhaben. Dieses Problem betrifft nicht nur FreeCAD. Es tritt in allen CAD-Anwendungen auf, aber die meisten anderen CAD-Anwendungen enthalten heuristische Methoden, die den Einfluss des Problems auf den Anwender reduzieren.
Seit FreeCAD 0.19 gibt es noch andauernde Entwicklungsanstrengungen, um den Kern im Umgang mit Formen zu verbessern und damit den Einfluss dieser Probleme zu verringern. Der Benennunngsalgorithmus, der im Forum unter Topological Naming, My Take beschrieben wurde, ist ausgelegt, den manuellen Aufwand zu reduzieren, manchmal durch automatisches Beheben von Problemen, in andern Fällen durch Vorstellen einer wahrscheinlichen Lösung oder wenigstens durch Aufzeigen, was das Problem verursachte. Die erste stabile Veröffentlichung von FreeCAD, die den neuen Benennungsalgorithmus beinhaltet wird die Version 1.0 sein. Nach und nach wird dieser Algorithmus auf weitere Teile von FreeCAD übertragen und weitere Funktionen zum automatischen und angeleiteten Reparieren werden in späteren Versionen hinzugefügt.
Das Problem der topologischen Benennung betrifft und verwirrt neue Anwender von FreeCAD am häufigsten. In PartDesign wird dem Anwender empfohlen, die auf der Seite Funktionsbearbeitung beschriebenen optimalen Vorgehensweisen zu befolgen. Die Verwendung von unterstützenden Bezugsobjekten wie Ebenen und lokalen Koordinatensystemen wird dringend empfohlen, um Modelle zu erstellen, die nicht leicht solchen topologischen Fehlern ausgesetzt sind. In TechDraw wird dem Anwender empfohlen, Maße nur dann hinzuzufügen, wenn das 3D-Modell vollständig ist und nicht mehr geändert wird.
Beispiel
1. Erstelle in der Arbeitsbereich PartDesign einen
PartDesign Körper, verwende dann
PartDesign Neue Skizze und wählen die XY-Ebene, um die Basisskizze zu zeichnen; führe dann ein
PartDesign Polster aus, um einen ersten Volumenkörper zu erstellen.
2. Wählen Sie die Oberseite des vorherigen Volumenkörpers aus und verwende dann PartDesign NewSketch, um eine weitere Skizze zu zeichnen; führe dann ein zweites Polster aus.
![]() |
![]() |
3. Wähle die Oberseite der vorherigen Extrusion aus und erstelle erneut eine Skizze und ein Polster.
4. Doppelklicke nun auf die zweite Skizze und ändere sie so, dass ihre Länge entlang der X-Richtung liegt; dadurch wird das zweite Pad neu erstellt. Die dritte Skizze und das Polster bleiben an der gleichen Stelle.
![]() |
![]() |
5. Doppelklicke nun erneut auf die zweite Skizze und passe Deine Punkte so an, dass ein Teil davon außerhalb der durch das erste Pad definierten Grenzen liegt. Dadurch wird das zweite Pad korrekt neu berechnet, aber beim Betrachten der Baumansicht wird im dritten Pad ein Fehler angezeigt.
![]() |
![]() |
6. Indem man die dritte Skizze und das Polster sichtbar macht, wird deutlich, dass die Berechnung des neuen Solids nicht korrekt durchgeführt wurde. Die dritte Skizze, anstatt von der Oberseite des zweiten Pads getragen zu werden, erscheint an einer seltsamen Stelle, mit ihrer Normalen, die in X Richtung ausgerichtet ist. Dies führt zu einem ungültigen Polster, da dieses Polster vom Rest des PartDesign Körper getrennt wird, was nicht erlaubt ist.
Das Problem scheint darin zu bestehen, dass bei der Änderung der zweiten Skizze die Oberseite des zweiten Polsters von Face13
in Face14
umbenannt wurde. Die dritte Skizze ist wie ursprünglich an Face13
angehängt, aber da sich diese Fläche nun auf der Seite befindet (nicht oben), folgt die Skizze ihrer Ausrichtung und ist nun falsch positioniert.
![]() |
![]() |
7. Um das Problem zu beheben, sollte die dritte Skizze wieder auf die Oberseite abgebildet werden. Wähle die Skizze aus, klicke auf die Ellipse (drei Punkte) neben der Eigenschaft Daten-EigenschaftMap Mode, und wähle erneut die Oberseite des zweiten Polsters. Dann geht die Skizze an die Spitze des vorhandenen Volumenkörpers, und das dritte Pad wird ohne Probleme erzeugt.
![]() |
![]() |
Die Umschlüsselung einer Skizze auf diese Weise kann bei jedem topologischen Benennungsfehler erfolgen, dies kann jedoch mühsam sein, wenn das Modell kompliziert ist und es viele solcher Skizzen gibt, die angepasst werden müssen.
Lösung
![](https://wiki.freecad.org/images/2/22/FreeCAD_topological_problem_16_dependency_graph.png)
Der Abhängigkeitsgraph ist ein Werkzeug, das hilfreich ist, um die Beziehungen zwischen den verschiedenen Körpern im Dokument zu beobachten. Die Verwendung des ursprünglichen Modellierungs Arbeitsablaufs zeigt die direkte Beziehung, die zwischen den Skizzen und den Polstern besteht. Wie eine Kette ist es leicht zu erkennen, dass diese direkte Abhängigkeit mit topologischen Benennungsproblemen behaftet sein wird, wenn sich eines der Glieder in der Reihenfolge ändert.
Wie auf der Seite Formelemente bearbeiten erläutert, besteht eine Lösung für dieses Problem darin, Skizzen nicht an Flächen zu befestigen, sondern an die Hauptebenen des Ursprungs eines PartDesign-Körpers oder an Bezugsebenen, die an diesen Hauptebenen befestigt sind. Es ist nicht nötig einzelne Skizzen, wie unten beschrieben, an Bezugsebenen zu befestigen, da die Skizze selbst direkt an einer Hauptebene befestigt werden kann und dieselben Versatzoptionen besitzt wie eine Bezugsebene. Bezugsebenen sind aber durchaus sinnvoll, wenn mehrere Skizzen positioniert werden.
1. Wähle den Ursprung des PartDesign Body und stelle sicher, dass er sichtbar ist. Wähle dann die XY-Ebene aus und klicke auf PartDesign Fläche. Gib im Anhang des Dialogfelds für den Versatz einen Versatz in Z-Richtung an, so dass die Bezugsebene koplanar mit der Oberseite des ersten Polsters ist.
2. Wiederhole den Vorgang, füge aber diesmal einen größeren Versatz hinzu, so dass die zweite Bezugsebene koplanar mit der Oberseite der zweiten Auflage ist.
![]() |
![]() |
3. Wähle die zweite Skizze aus, klicke auf die Ellipse nahe der Daten-EigenschaftMap Mode Eigenschaft und wähle dann die erste Bezugsebene. Die Bezugsebene ist bereits von der XY-Ebene des Körpers versetzt, so dass für die Skizze kein weiterer Z-Versatz erforderlich ist.
4. Wiederhole den Vorgang mit der dritten Skizze und wähle die zweite Bezugsebene als Auflage. Auch hier ist kein weiterer Z-Offset erforderlich.
5. Das Abhängigkeitsdiagramm zeigt nun, dass die Skizzen und Polster von den Bezugsebenen unterstützt werden. Dieses Modell ist stabiler, da jede Skizze im Wesentlichen unabhängig voneinander modifiziert werden kann.
6. Doppelklicke auf die zweite Skizze und ändere die Form. Das zweite Polster sollte sofort aktualisiert werden, ohne topologische Probleme mit der dritten Skizze und dem dritten Polster zu verursachen.
7. Tatsächlich kann jede Skizze geändert werden, ohne die Polster der anderen zu beeinträchtigen. Solange die Polster eine ausreichende Extrusionslänge haben, so dass sie sich berühren und einen zusammenhängenden Körper bilden, ist der gesamte Körper gültig.
Tradeoffs
Das Hinzufügen von Bezugsobjekten ist mehr Arbeit für den Anwender, erzeugt aber letztlich stabilere Modelle, die weniger dem topologischen Benennungsproblem unterliegen.
Natürlich können Bezugsobjekte erstellt werden, bevor Skizzen gezeichnet werden, und es werden Polster erstellt. Dies kann hilfreich sein, um die ungefähre Form und Dimension des Endkörpers zu visualisieren.
Bezugsflächen können auch auf anderen Bezugsflächen basieren. Dies schafft eine Kette von Abhängigkeiten, die auch zu topologischen Problemen führen können; da es sich bei Bezugsebenen jedoch um sehr einfache Objekte handelt, ist das Risiko, dass diese Probleme auftreten, geringer, als wenn die Fläche eines festen Objekts als Träger verwendet wird.
Bezugsobjekte, Punkte, Linien, Flächen und Koordinatensysteme, können auch als Referenzgeometrie, d.h. als visuelle Hilfsmittel zur Darstellung der wichtigen Merkmale im Modell nützlich sein, auch wenn keine Skizze direkt an ihnen angebracht ist.
Topological naming algorithm
Realthunder's topological naming algorithm selected to reduce the impact of this problem has been widely described as "fixing the topological naming problem," which has unintentionally misled many users into thinking that it will no longer be helpful to use techniques like datums, explicit sketch placement, and Feature editing to make models more stable. The algorithm is not intended to fix every failure introduced by topological naming ambiguity. Rather, it has three purposes.
- The first and most important purpose is, whenever possible, to identify broken references from topological changes and display an error to the user. Instead of having to work through a series of operations to find the first operation that diverges from the design intent, the operation that changes the names will normally be flagged with an error, making it much easier to manually fix model problems introduced by changes to operations or parameters.
- Sometimes, FreeCAD will be able to identify a likely fix for a broken reference, so that when the user is manually fixing up the flagged broken reference, a candidate will be presented for them to accept or change. A common example of this is dress-up operations like fillets and chamfers, where user might have to to edit the operation and either accept the proposed replacement feature selection or change it to correct it.
- In some cases, FreeCAD will be able to automatically resolve the broken reference, because enough information about the reference is stored to have high confidence that the replacement is correct. For example, when sketching directly on a face, the algorithm will frequently (but not always) correctly repair the reference to the face when the underlying geometry is changed parametrically. (When changing the structure, such as by adding or deleting operations in the middle of a Part Design Body, this kind of automatic repair will be less likely.) However, FreeCAD will do this only with high confidence in the correctness of the repair, because an incorrect automatic repair may re-introduce the problem of having to hunt for where a problem was introduced in order to repair a model after a modification. First, do no harm.
The goal for FreeCAD 1.0 is that the implementation of this algorithm in the official FreeCAD release has reached feature parity with Realthunder's "Linkstage 3" fork, where he originally developed the algorithm, as of the time the integration work started. There are new FreeCAD features that could use the algorithm but do not yet, and there will always be more opportunities to add candidate fixes and automatic repair. The initial work has provided a framework to use for these additional improvements over time, both in core FreeCAD and in Addons.
Verweise
- PartDesign Verrundung - Topologische Benennung
- Topological Naming, My Take , eine mögliche Lösung, von realthunder.
- Topological Naming Project: Idee um das Problem zu lösen, von ickby.
- Topologische Daten skripten
- Formelemente bearbeiten: enthält alternative Hinweise für stabile Modellierungstechniken.
- Clarifying and expanding "Topological Naming Problem" documentation: Verdeutlicht die Erwartungen an Realthunders Algorithmus zum topologischen Benennen, der für FreeCAD 1.0 ausgewählt wurde.
Videos
- Warum brechen meine FreeCAD Modelle? - "Topologisches Benennungsproblem": Eine Videoerklärung der zugrunde liegenden Probleme des Topologisches Benennungsproblem
- FreeCAD Is Fundamentally Broken! - Now what... Help Me Decide...: A Maker Tales Video
![](https://wiki.freecad.org/images/thumb/9/94/User_hub.png/24px-User_hub.png)
- Erste Schritte
- Installation: Herunterladen, Windows, Linux, Mac, Zusätzliche Komponenten, Docker, AppImage, Ubuntu Snap
- Grundlagen: Über FreeCAD, Graphische Oberfläche, Mausbedienung, Auswahlmethoden, Objektname, Voreinstellungseditor, Arbeitsbereiche, Dokumentstruktur, Objekteigenschaften, FreeCAD unterstützen, Spenden
- Hilfe: Anleitungen, Videoanleitungen
- Arbeitsbereiche: Std Base, Arch, Assembly, BIM, CAM, Draft, FEM, Inspection, Material, Mesh, OpenSCAD, Part, PartDesign, Points, Reverse Engineering, Robot, Sketcher, Spreadsheet, Surface, TechDraw, Test Framework
- Blätter (Seiten): Neues Zeichnungsblatt aus der Standardvorlage erstellen, Neues Zeichnungsblatt aus einer Vorlage erstellen, Seite neu zeichnen, Alle Seiten drucken
- Ansichten: Ansicht einfügen, Aktive (3D-)Ansicht einfügen, Ansichtengruppe einfügen, Schnittansicht einfügen, Komplexe Schnittansicht einfügen, Detailansicht einfügen, Objekt des Arbeitsbereichs Draft einfügen, Objekt des Arbeitsbereichs Arch einfügent, Tabellenansicht einfügen, Ausschnittsgruppe einfügen, Ansicht teilen, Form projizieren
- Stapeln: Ansicht auf die Stapeloberseite bewegen, Ansicht auf die Stapelunterseite bewegen, Ansicht um eine Ebene nach oben bewegen, Ansicht um eine Ebene nach unten bewegen
- Verzierungen: Fläche mit Muster aus einer Bilddatei schraffieren, Fläche mit einer geometrischen Schraffur versehen, SVG-Zeichnungselement einfügen, Bitmap-Grafik einfügen, Ansichtsrahmen ein- oder ausschalten
- Maßeinträge: Längenmaß einfügen, Horizontales Maß einfügen, Vertikales Maß einfügen, Radienmaß einfügen, Durchmessermaß einfügen, Winkelmaß einfügen, Winkelmaß über 3 Punkte einfügen, Maß für die horizontale Ausdehnung einfügen, Maß für die Vertikale Ausdehnung einfügen, Maß mit 3D-Geometrie verknüpfen, Hinweisfeld einfügen, Axonometrisches Längenmaß, Maß zwischen Orientierungspunkten einfügen, Maßreferenzen reparieren
- Anmerkungen: Anmerkung einfügen, Hinweislinie zur Ansicht hinzufügen, Rich-Text-Anmerkung einfügen, Hilfspunkt hinzufügen, Kantenmittelpunkte hinzufügen, Quadrantengrenzpunkte hinzufügen, Mittellinie zu Fläche(n) hinzufügen, Mittellinie zwischen 2 Linien hinzufügen, Mittellinie zwischen 2 Punkte hinzufügen, Hilfslinie durch 2 Punkte hinzufügen, Hilfskreis hinzufügen, Liniendarstellung ändern, Ausgeblendete Kanten ein-/ausblenden, Hinzufügen von Schweißinformationen zur Hinweislinie, Oberflächensymbol erstellen, Wellen- oder Bohrungspassung hinzufügen
- Ergänzungen:
- Merkmale und Änderungen: Linienmerkmale, Zeilenabstand und Längendifferenz auswählen, Linienmerkmale ändern, Linie verlängern, Linie kürzen, Ansicht fixieren/lösen, Schnittansicht ausrichten, Horizontale Kettenmaße anordnen, Vertikale Kettenmaße anordnen, Schräge Kettenmaße anordnen, Horizontale Maße anordnen, Vertikale Maße anordnen, Schräge Maße anordnen, Flächeninhalt der ausgewählten Flächen berechnen, Bogenlänge der ausgewählten Kanten berechnen, Formatierung anpassen
- Mittellinien und Gewinde: Kreismittellinien hinzufügen, Lochkreismittellinien hinzufügen, Hilfslinien für Innengewinde in Seitenansicht hinzufügen, Hilfslinien für Innengewinde in Achsansicht hinzufügen, Hilfslinien für Außengewinde in Seitenansicht hinzufügen, Hilfslinien für Außengewinde in Achsansicht hinzufügen, Hilfsschnittpunkte hinzufügen, Add an offset vertex, Hilfskreis hinzufügen, Hilfsbogen hinzufügen, Hilfskreis über 3 Punkte hinzufügen, Parallele Hilfslinie hinzufügen, Senkrechte Hilfslinie hinzufügen
- Maße: Horizontale Maßkette erstellen, Vertikale Maßkette erstellen, Schräge Maßketten erstellen, Horizontale Koordinatenmaße erstellen, Vertikale Koordinatenmaße erstellen, Schräge Koordinatenmaße erstellen, Horizontales Maß an Fase erstellen, Vertikales Maß an Fase erstellen, Bogenmaß erstellen, '⌀'-Symbol einfügen, '□'-Symbol einfügen, Präfixsymbol entfernen, Dezimalstellenanzahl erhöhen, Dezimalstellenanzahl verringern
- Exportieren: Seite als SVG-Datei exportieren, Seite als DXF-Datei exportieren
- Zusätzliche Funktionen: Liniengruppen, Vorlagen, Schraffieren, Form- und Lagetolerierung, Einstellungen
- Struktur-Werkzeuge: Part-Arbeitsbereich, Gruppe
- Part Design-Hilfswerkzeuge: Körper erstellen, Skizze erstellen, Skizze bearbeiten, Skizze einer Fläche zuordnen
- Part Design-Modellierungswerkzeuge
- Datum tools: Bezugspunkt erstellen, Bezugslinie erstellen, Bezugsebene erstellen, Lokales Koordinatensystem erzeugen, Referenzobjekt erstellen, Klon erzeugen
- Additive tools: Aufpolstern (Pad), Rotation, Ausformung, Additives Rohr, Erzeugen eines zusätzlichen geometrischen Körpers
- Subtractive tools: Tasche, Bohrung, Nut, Abziehbarer Loft, Abziehbares Rohr, Erzeuge einen abzuziehenden Grundkörper
- Transformation Werkzeuge: Spiegeln, Lineares Muster, Polares Muster, Create MultiTransform
- Verschönerungswerkzeuge: Verrundung, Fase, Draft-Arbeitsbereich, Dicke
- Boolesche Operationen: Boolesche Operationen
- Extras: Migrieren, Shaft design wizard, Involute gear
- Contextual Menu tools: Spitze festlegen, Move object to other body, Objekt nach einem anderen Objekt verschieben
- Grundkörper: Würfel, Kegel, Zylinder, Kugel, Torus, Grundkörper, Shapebuilder
- Objekte ändern: Boolesche Operationen, Vereinigung, Schnitt, Ausschneiden, Join features, Connect, Embed, Cutout
- Aufteilungswerkzeuge: Boolesche Fragmente, Slice a part, Slice, XOR, Part Defeaturing
- Verbund: Erzeuge Verbund, Verbund auflösen, Compound Filter; Extrudieren, Kanten abrunden, Drehen, Schnitt, Schnitte..., Abschrägen, Spiegelung, Ruled Surface, Sweep, Loft
- Offset-Werkzeuge: 3D Offset, 2D Offset, Dicke, Projection on surface