Code snippets/sv

Denna sida innehåller exempel, delar, bitar av FreeCAD pythonkod som samlats ihop från användare och diskussioner på forumen. Läs och använd dem som en början för dina egna skript...

En typisk InitGui.py fil
Varje modul måste innehålla, förutom din huvudmodul fil, en InitGui.py fil, som ansvarar för insättningen av modulen i huvudgränssnittet. Detta är ett exempel på en enkel sådan.

En typisk modulfil
Detta är ett exempel på en huvudmodulfil, som innehåller allt som din modul gör. Det är Scripts.py filen startad i föregående exempel. Du kan ha alla dina anpassade kommandon här.

Importera en ny filtyp
Att skapa en importerare för en ny filtyp i FreeCAD är lätt. FreeCAD anser inte att du importerar data i ett öppnat dokument, utan snarare att du direkt kan öppna den nya filtypen. Så vad du behöver göra är att lägga till den nya filtypen till FreeCAD's lista på kända filtyper, och skriva koden som kommer att läsa filen och skapa de FreeCAD objekt som du vill:

Denna rad måste läggas till i InitGui.py filen för att lägga till den nya filtypen till listan:

Sedan i filen Import_Ext.py :

För att exportera ditt dokument till någon ny filtyp fungerar på samma sätt, förutom att du använder:

FreeCAD.addExportType("Din nya FilTyp (*.ext)","Export_Ext")

Lägga till en linje
En linje har 2 punkter.

Lägga till en polygon
En polygon ett set av ihopkopplade linjesegment (en polyline i AutoCAD). Den behöver inte vara stängd.

Lägga till och ta bort ett objekt till/från en grupp
Notera: Du kan även lägga till andra grupper till en grupp...

Komma åt och ändra representationen av ett objekt
Varje objekt i ett FreeCAD dokument har ett associerat vy representationsobjekt som sparar alla parametrar som definierar hur objekten syns, som färg, linjebredd, etc...

In Windows pyuic.py is located in "C:\Python27\Lib\site-packages\PyQt4\uic\pyuic.py" For conversion create a batch file called "compQt4.bat:

In the DOS console type without extension

Into Linux : to do

Since FreeCAD progressively moved away from PyQt after version 0.13, in favour of PySide (Choose your PySide install building PySide), to make the file based on PySide now you have to use:

In Windows uic.py are located in "C:\Python27\Lib\site-packages\PySide\scripts\uic.py" For create batch file "compSide.bat":

In the DOS console type without extension

Into Linux : to do

Observation av mushändelser i 3D visaren via Python
Inventor ramverket tillåter att du lägger till en eller flera återanropsnoder vill visarens scengraf. som standard i FreeCAD är en återanropsnod installerad per visare vilket tillåter att du kan lägga till globala eller statiska C++ funktioner. I en lämplig Python bindning så erbjuds några metoder för att använda denna teknik inuti Python kod.

Klicka nu någonstans i 3D visaren och observera meddelandena i utmatningsfönstret. För att avsluta observationen, anropa bara

Följande händelsetyper stöds


 * SoEvent -- alla sorts händelser
 * SoButtonEvent -- alla musknapps och tangentbordshändelser
 * SoLocation2Event -- 2D rörelsehändelser (normalt musförflyttningar)
 * SoMotion3Event -- 3D rörelsehändelser (normalt spaceball)
 * SoKeyboardEvent -- tangentbordsknapp ned och upphändelser
 * SoMouseButtonEvent -- musknapp ned och upphändelser
 * SoSpaceballButtonEvent -- spaceballknapp ned och upphändelser

Python funktionen som kan registreras med addEventCallback förväntar sig ett lexikon. Beroende på den övervakade händelsen så kan lexikonet innehålla olika nycklar. För alla händelser så har den nycklarna:
 * Type -- händelsetypens namn d.v.s. SoMouseEvent, SoLocation2Event, ...
 * Time -- nuvarande tid som en sträng
 * Position -- en tupel med två heltal, musposition
 * ShiftDown -- en boolesk, sann om Skift var nedtryckt, annars falsk
 * CtrlDown -- en boolesk, sann om CTRL var nedtryckt, annars falsk
 * AltDown -- en boolesk, sann om Alt var nedtryckt, annars falsk

För alla knapphändelser, d.v.s. tangentbord, mus eller spaceball händelser
 * State -- En sträng 'UP' om knappen var uppe, 'DOWN' om den var nera eller 'UNKNOWN' för alla andra fall

För tangentbordshändelser:
 * Key -- tecknet för den nedtryckta tangenten

För musknappshändelser
 * Button -- den nedtryckta knappen, kan vara BUTTON1, ..., BUTTON5 eller ANY

För spaceballhändelser:
 * Button -- den nedtryckta knappen, kan vara BUTTON1, ..., BUTTON7 eller ANY

Och slutligen rörelsehändelser:
 * Förflyttning -- en tupel med tre flyttal
 * Rotation -- en kvaternion för rotationen, d.v.s. en tupel med fyra flyttal

Manipulera scengrafen i Python
Det är också möjligt att hämta och ändra scengrafen i Python, med 'pivy' modulen -- en Python bindning för Coin.

Pivy's Python API skapas med hjälp av verktyget SWIG. Då vi i FreeCAD använder några självskrivna noder så kan du inte skapa dem direkt i Python. Emellertid så är det möjligt att skapa en nod med dess interna namn. En instans av typen 'SoFCSelection' kan skapas med

Lägga till och ta bort objekt till/från scengrafen
Addering av nya noder till scengrafen kan görass på detta sätt. Var noga med att alltid lägga till en SoSeparator för att innehålla geometrin, koordinaterna och materialinformationen på samma objekt. Följande exempel lägger till en röd linje från (0,0,0) till (10,0,0):

För att ta bort den, skriv bara:

Lägga till anpassade widgetar till gränssnittet
Du kan skapa anpassade widgetar med Qt designer, omvandla dem till ett python skript, och sedan ladda dem till FreeCAD gränssnittet med PyQt4.

Den pythonkod som producerats av Ui pythonkompilatorn (det verktyg som konverterar qt-designer .ui file till pythonkod) ser i allmänhet ut så här (det är enkelt, du kan även skriva det direkt i python):

Allt du sedan behöver göra är att skapa en referens till FreeCAD's Qt fönster, sätta in en anpassad widget i det, och "omvandla" denna widget till din med den Ui kod vi just gjorde:

The complete script
This is the complete script, for reference:

Method 1
An example of a dialog box complete with its connections.

Here the same window but with an icon on each button.

Download associated icons (click right "Copy the image below ...)"



Here the code to display the icon on the pushButton, change the name for another button, (radioButton, checkBox) and the path to the icon.

The command UserAppData gives the user path AppHomePath gives the installation path of FreeCAD

This command reverses the horizontal button, right to left.

Method 2
Another method to display a window, here by creating a file QtForm.py which contains the header program (module called with import QtForm), and a second module that contains the code window all these accessories, and your code (the calling module).

The calling file that contains the window and your code.

The file my_file.py

The connections are to do, a good exercise.

Other example

Are treated :

The code page and the icons Qt_Example
 * 1) icon for window
 * 2) horizontalSlider
 * 3) progressBar horizontal
 * 4) verticalSlider
 * 5) progressBar vertical
 * 6) lineEdit
 * 7) lineEdit
 * 8) doubleSpinBox
 * 9) doubleSpinBox
 * 10) doubleSpinBox
 * 11) button
 * 12) button
 * 13) radioButton with icons
 * 14) checkBox with icon checked and unchecked
 * 15) textEdit
 * 16) graphicsView with 2 graphes

Icon personalised in ComboView
Here an example to create an object with properties and icon personalised in ComboView

Download the example icon to the same directory as the macro

Use of an icon for three different use cases: icon_in_file_disk (format .png), icon_XPM_in_macro (format .XPM) and icon_resource_FreeCAD



Complete example creating a cube and its icon

Use QFileDialog for writing to a file
Complete code:

Use QFileDialog to read a file
Complete code:

Use QColorDialog to get the color
Complete code:

Some useful commands
By using the characters with accents, where you get the error :

UnicodeDecodeError: 'utf8' codec can't decode bytes in position 0-2: invalid data

Several solutions are possible.

or with the procedure

UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in position 9: ordinal not in range(128)

or with the procedure

or

or

or