"CAD für alle, kostenlos, und lassen Sie niemanden los ..." oder die ersten Schritte bei der Programmierung von FreeCAD in Python

Vielleicht sind Sie am Beispiel von NanoCAD bereits auf meine Notizen zu den ersten Schritten der CAD-Programmierung gestoßen.

Es sollte beachtet werden, dass es für eine Person, die nicht weiß, wie man programmiert und CAD auf der Ebene des "elektronischen Culman" kennt, ein erstaunliches Abenteuer war. NanoCAD ist jedoch nach wie vor in erster Linie ein kommerzielles Produkt. Die kostenlose Version wurde seit etwa sechs Jahren nicht mehr aktualisiert und ist hinsichtlich der Entwicklungsmöglichkeiten veraltet.

Aber ich wollte wirklich, wie in einer wunderbaren Geschichte: "Glück für alle, vergebens, und niemanden beleidigen lassen!" . Daher wurde beschlossen, den Rat eines Kampfgenossen DrZugrik zu befolgen und FreeCAD selbst zu installieren.

Ich schreibe also Material für Sie. In nur einem Tag habe ich gelernt, wie man diese CAD-Software mit Anaconda befreundet. Ich habe ein einfaches Skript in Python geschrieben, das ein kleines Quadrat mit Text zeichnet, und es für die Arbeit unter Windows und Linux getestet. Was bin ich eigentlich bereit, dir in Schritten zu sagen und zu zeigen, damit auch du das kannst?

Möchten Sie ein charmantes Paar von Python und FreeCAD kennenlernen? Dann sind Sie unter Katze willkommen.




Inhalt:

Teil I: Einführung.
Teil II: Standardinstallation und erste Probe
Teil III: Freunde dich jetzt mit Anaconda bei FreeCad an
Teil IV: Schreiben einer einfachen Bibliothek
Teil V: Schlussfolgerung

Teil I: Einführung


Seltsamerweise gibt es auf Habré nur sehr wenige Veröffentlichungen zu FreeCAD, einen guten Artikel von Eddy_Em „Meet: FreeCAD“ und einige weitere Werke, in denen der Held unseres Artikels nebenbei erwähnt wird.

Zunächst nur zwei Worte zum Programm. Ich werde die Informationen von der offiziellen Website nicht duplizieren, sondern einfach in groben Zügen beschreiben, warum ich mich diesem CAD zugewandt habe.

FreeCAD ist also ein Open-Source-System für computergestütztes Design, das sich hauptsächlich auf die dreidimensionale parametrische Modellierung konzentriert. Zum Zeitpunkt des Schreibens ist die neueste Version des Programms 0.18.3. Seien Sie nicht verwirrt, dass der Wert der Versionsnummer weit von eins entfernt ist. FreeCAD ist lang und aktiv entwickelt und derzeit recht funktionsfähig. Darüber hinaus hat es, wie ich es seit langem verstehe, eine gewisse Beliebtheit bei Menschen, die sich mit 3D-Modellierung und -Druck befassen, insbesondere bei selbstgemachten ideologischen Menschen, die sich für Open Source / Open Hardware und alle Arten von Heimwerken interessieren.

Wenn Sie jedoch die 3D-Modellierung plötzlich überhaupt nicht mehr verstehen, ist dies kein Grund, FreeCAD zu umgehen. Die CAD-Funktionalität ist in bestimmte Module unterteilt - Workbench, darunter die übliche 2D-Zeichnung, einschließlich einer Workbench zum Dekorieren von Blattrahmen und sogar einer Workbench zur Implementierung des BIM-Konzepts.

Eigentlich hat das Programm einen "Wagen und einen kleinen Wagen", aber heute werden wir versuchen, etwas völlig Primitives zu tun, nur um "Ihren Appetit anzuregen".


Teil II: Standardinstallation und erste Probe


FreeCAD ist für alle drei gängigen Betriebssysteme verfügbar. Da mir jedoch die "Apple" -Technik entzogen ist, werden nur Optionen für Windows 10 und Linux Mint in Betracht gezogen.

Der einfachste Weg, um mit der Programmierung für FreeCAD zu beginnen, besteht darin, das Distributionskit herunterzuladen und es auf eine für das Betriebssystem übliche Weise zu installieren. In diesem Fall steht uns ein mit dem Programm vorinstallierter Python-Interpreter zur Verfügung (zum Zeitpunkt des Schreibens des Python-Artikels Version 3.6.6).

Um die Programmierung für FreeCAD zu starten, vielleicht sogar einfacher als für NanoCAD oder AutoCAD, öffnen Sie einfach die Registerkarte Ansicht -> Bedienfeld -> und schalten Sie die Python-Konsole ein. Das ist alles, was Sie sicher programmieren können.

Aber zuerst versuchen wir, etwas mit normalen Mitteln zu zeichnen. Zum Beispiel ein Kreis.
Achten Sie auf die Konsolenausgabe

Gui.activateWorkbench("DraftWorkbench") >>> App.newDocument("") >>> App.setActiveDocument("____________________") >>> App.ActiveDocument=App.getDocument("____________________") >>> Gui.ActiveDocument=Gui.getDocument("____________________") >>> Gui.activeDocument().activeView().viewDefaultOrientation() >>> import Draft >>> pl=FreeCAD.Placement() >>> pl.Rotation.Q=(0.0,0.0,1.5308084989341915e-17,1.0) >>> pl.Base=FreeCAD.Vector(-1.0610677003860474,-0.31207874417305,0.0) >>> circle = Draft.makeCircle(radius=0.8633861373365326,placement=pl,face=False,support=None) >>> Draft.autogroup(circle 



FreeCAD verbirgt nichts unter der Haube, alle wichtigen Operationen zum Zeichnen eines Kreises werden in der Konsole angezeigt. Sie können den Code auch jetzt noch kopieren und einen zweiten Kreis ein wenig rechts zeichnen.
Versuchen wir, eine Variable einzugeben und einen weiteren Kreis zu zeichnen, für den wir die Konsolenausgabe kopieren und zeilenweise einfügen, wobei wir eine kleine Änderung vornehmen.

 x=-1.0610677003860474 pl=FreeCAD.Placement() pl.Rotation.Q=(0.0,0.0,1.5308084989341915e-17,1.0) pl.Base=FreeCAD.Vector(x*5,-0.31207874417305,0.0) circle = Draft.makeCircle(radius=0.8633861373365326,placement=pl,face=False,support=None) 

Wie Sie jetzt sehen können, gibt es zwei Kreise und wie geplant einen rechts von der x-Koordinate des Basispunkts des ersten Kreises multipliziert mit 5.




Teil III: Freunde dich jetzt mit Anaconda bei FreeCad an


Die Fähigkeiten von CAD sind jedoch nicht auf die Standardverwendung als "Culman" beschränkt. Mit der API kann FreeCAD in Ihr eigenes Programm eingebettet und mit oder ohne grafische Oberfläche verwendet werden. Wir werden uns jedoch ein anderes Mal mit diesem Problem befassen.

Stellen Sie sich diese Situation in der Zwischenzeit vor. Nehmen wir an, Sie lieben maschinelles Lernen und Datenanalyse in Python und haben das Anaconda-Distributionskit bereits installiert. Dann werden Sie wahrscheinlich sehr erfreut sein zu erfahren, dass Sie dank der Mitarbeiter von conda-forge alle Funktionen dieses Distributionskits und FreeCAD kombinieren können.

Der Link enthält Anleitungen zur Installation, wenn Sie Mini-Conda verwenden, und wir werden es über den Navigator in der vollwertigen „Anaconda“ installieren.

Öffnen Sie also Anaconda-Navigator, wechseln Sie zur Registerkarte Umgebungen und erstellen Sie eine neue Umgebung, indem Sie auf die Schaltfläche Erstellen klicken. Den Namen der Umgebung kann man jedem geben, den ich "freecad" nannte. Wir wählen die erforderliche Version von Python aus und erstellen eine neue Umgebung.



Dies reicht jedoch nicht aus. Sie müssen den Conda-Forge-Kanal hinzufügen. Geben Sie einfach das Feld ein, das nach dem Klicken auf die Schaltfläche Hinzufügen "Conda-Forge" angezeigt wird, und lassen Sie das System die Liste der Pakete aktualisieren.



Jetzt ist es fast fertig, FreeCAD selbst zu installieren

Klicken Sie auf LMB im Namen des Pakets und wählen Sie die zu installierende Version aus, wie in der Abbildung unten dargestellt (ich habe sie bereits installiert).



Nach einer langen Wartezeit ist das FreeCad-Distributionskit vollständig installiert. Die gewünschte Version muss nur noch gestartet werden.

Im einfachsten Fall müssen Sie ohne Startparameter die Conda-Konsole mit unserer Umgebung starten und CAD mit dem gleichnamigen FreeCAD-Befehl starten.



Ein leeres FreeCAD-Fenster wird geöffnet, in dem wir eine Workbench für das zweidimensionale Zeichnen auswählen.



Wie Sie sehen können, ist die Version von Python jetzt überhaupt nicht mehr so ​​wie bei einer Standardinstallation.


Erstellen wir ein neues Dokument (Strg + N). Es ist praktisch, um unsere Minibibliothek zu testen.


Teil IV: Schreiben einer einfachen Bibliothek


Unsere Bibliothek wird primitiv sein. Im Wesentlichen erstellen wir einen Befehl, der ein Rechteck zeichnet, in das vom Benutzer angegebener beliebiger Text eingegeben wird.

Erstellen Sie eine Datei (ich habe meine "drawhabr.py" genannt) und schreiben Sie den folgenden Code hinein:

 #Simple lib for test Python API in FreeCad #Tested on Python 3.7. and FreeCad 0.18.3 #Designed for article - https://habr.com/ru/post/464113/ import FreeCAD, FreeCADGui, Part, Draft class stamp: "This class creates a rectangle with text. Coordinates are set by entering into the console." def __init__(self): self.view = FreeCADGui.ActiveDocument.ActiveView x=float(input("set x point ")) y=float(input("set y point ")) mtext=str(input("input text ")) self.drawstamp(mtext, x , y ) FreeCAD.Console.PrintMessage("\r\n Your object was successfully created") def drawstamp(self, mtext,x=0,y=0 ): "Method for placing a figure in model space." if (mtext==""): mtext="Hello Habr!" point=FreeCAD.Placement(FreeCAD.Vector(x,y,0), FreeCAD.Rotation(0,0,0), FreeCAD.Vector(0,0,0)) text = Draft.makeText(mtext,point=FreeCAD.Vector(x+0.25,y+0.55,0.0)) fontsize = 1.0 textwidth=(len(mtext)*fontsize*0.6)+0.35 textheight=fontsize+0.5 text.ViewObject.FontSize = fontsize text.ViewObject.FontName = "Courier" rec = Draft.makeRectangle(length=textwidth,height=textheight,placement=point,face=False,support=None) 

Oder Sie können die Datei einfach von GitHub kopieren

Der Code ist sehr einfach, aber ich denke, es lohnt sich, einige Punkte zu erläutern.

 import FreeCAD, FreeCADGui, Part, Draft 

Wir importieren die erforderlichen Bibliotheken und erstellen dann die Klasse.
Da ich noch nicht gelernt habe, wie man mit der Mauseingabe umgeht, geben wir die Koordinaten für das Objekt und den Text direkt über die Tastatur in die Konsole ein. Dies wird durch Standard-Python-Methoden implementiert. Dann rufen wir im Konstruktor der Klasse unsere Funktion (Methode) auf, die alles zeichnet.

Von den Funktionen von FreeCAD im Klassenkonstruktor können zwei Befehle unterschieden werden:

 self.view = FreeCADGui.ActiveDocument.ActiveView FreeCAD.Console.PrintMessage("\r\n Your object was successfully created") 

Der erste wählt den Bereich des aktiven Arbeitsbereichs für uns aus und der zweite schreibt uns nach der Installation des Objekts eine Nachricht ganz unten im Programmfenster (auf einer grauen Leiste, nicht zu verwechseln mit der Python-Konsole).

Der Methodencode ist ebenfalls intuitiv. Ich werde ihn jedoch aus Gründen der Zuverlässigkeit erläutern.

  def drawstamp(self, mtext,x=0,y=0 ): "Method for placing a figure in model space." if (mtext==""): mtext="Hello Habr!" 

Erforderlich, falls der Benutzer eine leere Zeichenfolge eingibt. Ohne dies wird das Wort Beschriftung in den Text eingegeben und das Rechteck hat eine falsche Länge.
 point=FreeCAD.Placement(FreeCAD.Vector(x,y,0), FreeCAD.Rotation(0,0,0), FreeCAD.Vector(0,0,0)) 


Definieren Sie die Koordinaten des Basispunkts des Tages unseres Rahmens, der den Text umgibt.
Ich möchte Sie daran erinnern, dass die Daten von der Eingabe in die Konsole übernommen werden.

Bitte beachten Sie, dass wir mit einer dreidimensionalen Koordinate der Form FreeCAD.Vector (x, y, z) arbeiten. In diesem Beispiel können wir jedoch die Z-Koordinate vernachlässigen. Andere Parameter, die sich auf die Drehung des Rahmens beziehen, berühren sich nicht.

 text = Draft.makeText(mtext,point=FreeCAD.Vector(x+0.25,y+0.55,0.0)) 

Erstellen Sie den Text mit dem Befehl Draft.makeText und übergeben Sie ihm den Text, den Sie in die Konsole eingegeben haben.

Nehmen Sie Koordinaten mit einem leichten Versatz vom Basispunkt des Rahmens.

In guter Weise war es notwendig zu lernen, wie der Rahmen (Rand) des Textes unter Verwendung der API-Parameter verarbeitet wird, und anschließend basierend darauf die Breite und Höhe unseres Rahmens zu berechnen. Da ich mich aber gerade erst mit dem Programm vertraut gemacht habe, habe ich das Problem mit der Methode der arbeitenden Bauern gelöst. Wir werden die Schrifthöhe festlegen, den Stil der monospaced Schriftart (Courier) zuweisen und abhängig davon die Länge und Breite des Rahmens bestimmen, den wir um den Text zeichnen.

  text = Draft.makeText(mtext,point=FreeCAD.Vector(x+0.25,y+0.55,0.0)) fontsize = 1.0 textwidth=(len(mtext)*fontsize*0.6)+0.35 textheight=fontsize+0.5 text.ViewObject.FontSize = fontsize text.ViewObject.FontName = "Courier" 

Es bleibt nur, unsere Parameter in der Zeichenfunktion des Rechtecks ​​zu ersetzen

 rec = Draft.makeRectangle(length=textwidth,height=textheight,placement=point,face=False,support=None) 

das ist in der Tat alles.

Es bleibt nur unsere Bibliothek zu verbinden. Dazu können Sie es einfach in den Ordner kopieren, in dem sich die restlichen Python-Bibliotheken für die ausgewählte Umgebung befinden.

Für Windows 10 kann der Pfad beispielsweise wie folgt lauten (vom Installationsort von Anaconda aus signifikant):

C: \ Users \ YourUsernameName \ Anaconda3 \ envs \ freecad \ Lib

Für Linux wäre der Pfad ungefähr so:

/home/ourUserName/anaconda3/envs/freecad/lib/python3.7

Alle sind gegangen, um unsere Bibliothek zu laden.
Geben Sie dazu zunächst den Namen unseres Moduls in die Konsole ein (ohne Dateierweiterung)

 import drawhabr 

Rufen Sie dann den Klassenkonstruktor auf

 drawhabr.stamp() 

Das ist alles, um zu führen, Parameter zu funktionieren und das Ergebnis zu genießen.



Nur für den Fall, hier ist ein Screenshot, der bestätigt, dass alles auch unter Linux funktioniert.




Teil V: Schlussfolgerung


Heute haben wir nur einen kleinen Schritt auf dem Weg zum Verständnis der FreeCAD-API getan.
Trotz der Tatsache, dass FreeCAD meiner Meinung nach für das zweidimensionale Zeichnen und Entwickeln von Projekten nicht so vertraut ist wie AutoCAD (NanoCAD) oder andere gängige CAD-Systeme, aber es ist viel einfacher, es zu programmieren.

Trotz mangelnder Dokumentation und der Notwendigkeit, einige Artikel mit Beispielen in Wiki FreeCAD zu aktualisieren, stellte sich heraus, dass es eine ziemlich ungeschulte Person mit minimalen Kenntnissen beim Schreiben von Python-Code war, die API herauszufinden und das erste Programm auszuführen.

Angesichts der Tatsache, dass Entwickler nicht gierig sind und bei Bedarf sogar die kommerzielle Entwicklung mit FreeCAD unter der LGPL-Lizenz und in Kombination mit der gesamten Leistung von Python-Bibliotheken (z. B. aus demselben Anaconda-Distributionskit) zulassen, sieht die Programmentwicklung mit FreeCAD interessant aus Aufgabe.
Wenn ich verstehe, dass Sie an diesem Thema interessiert sind, werde ich versuchen, analog zu Nanocad einen kleinen Zyklus von Notizen zu erstellen

Source: https://habr.com/ru/post/de464113/


All Articles