Code snippets/sv

Introduction
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.

Every module must contain, besides your main module file, an InitGui.py file, responsible for inserting the module in the main Gui. This is an example of a simple one.

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.

This is an example of a main module file, containing everything your module does. It is the Scripts.py file invoked by the previous example. You can have all your custom commands here.

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:

Making an importer for a new filetype in FreeCAD is easy. FreeCAD doesn't consider that you import data in an opened document, but rather that you simply can directly open the new filetype. So what you need to do is to add the new file extension to FreeCAD's list of known extensions, and write the code that will read the file and create the FreeCAD objects you want:

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.

A line simply has 2 points.

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

A polygon is simply a set of connected line segments (a polyline in AutoCAD). It doesn't need to be closed.

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...

Each object in a FreeCAD document has an associated view representation object that stores all the parameters that define how that object appears: i.e. color, linewidth, etc... See also List the components of an object snippet below

Replace the form of mouse with one image (cross) include
The image is created by Gimp exported in a .XPM file. Copy and use the code between the bracket "{" code to copy  "}"

Observe camera change in the 3D viewer via Python
This can be done adding a Node sensor to the camera.

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.

The Inventor framework allows to add one or more callback nodes to the scenegraph of the viewer. By default in FreeCAD one callback node is installed per viewer which allows to add global or static C++ functions. In the appropriate Python binding some methods are provided to make use of this technique from within Python code.

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

Display keys pressed and Events command
This macro displays in the report view the keys pressed and all events command

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.

It is also possible to get and change the scenegraph in Python, with the 'pivy' module -- a Python binding for 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):

Adding new nodes to the scenegraph can be done this way. Take care of always adding a SoSeparator to contain the geometry, coordinates and material info of a same object. The following example adds a red line from (0,0,0) to (10,0,0):

För att ta bort den, skriv bara:

Save the sceneGraph in 3 series of 36 files
View the code snippet by expanding this section

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.

You can create custom widgets with Qt designer, transform them into a python script, and then load them into the FreeCAD interface with PySide.

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:

Add a Tab to the Combo View
The following code allows you to add a tab to the Combo view, separate from the preexisting "Model" and "Tasks" tabs. It also uses the module to load an UI file directly in that tab.

Enable or disable a window
This script give the ability to manipulate the UI from the Python console to show/hide different components in the FreeCAD interface such as:
 * Report view
 * Tree view
 * Property view
 * Selection view
 * Combo view
 * Python console
 * draftToolbar

Function resident with the mouse click action
Here with SelObserver on a object select

Other example with ViewObserver on a object select or view

List the components of an object
This function list the components of an object and extracts:
 * this object its XYZ coordinates,
 * its edges and their lengths center of mass and coordinates
 * its faces and their center of mass
 * its faces and their surfaces and coordinates

Search and data extraction
Examples of research and decoding information on an object.

Each section is independently and is separated by "############" can be copied directly into the Python console, or in a macro or use this macro. The description of the macro in the commentary.

Displaying it in the "Report View" window (View > Views > Report view)

Manual search of an element with label
Note: Usually the angles are given in Radian. To convert them:


 * 1) angle in Degrees to Radians :
 * 2) *Angle in radian = pi * (angle in degree) / 180
 * 3) *Angle in radian = math.radians(angle in degree)
 * 4) angle in Radians to Degrees :
 * 5) *Angle in degree = 180 * (angle in radian) / pi
 * 6) *Angle in degree = math.degrees(angle in radian)

Cartesian coordinates
This code displays the Cartesian coordinates of the selected item.

Change the value of "numberOfPoints" if you want a different number of points (precision)

Other method display on "Int" and "Float"

Get the normal vector on the surface
This example show how to find normal vector on the surface by find the u,v parameters of one point on the surface and use u,v parameters to find normal vector

Get the normal vector of a surface from a STL file
you are done then run for quit:

Create one object to the position of the Camera
here same code simplified

Create a Sketch on a Surface in PartDesign
This snippet can be useful, if you want to create a sketch on a surface in PartDesign from inside a macro. Note, that body might be None, if no active body is selected and that the Selection might be empty.

How to Simulate a Mouse Click at a given Coordinate
The position is relative to the GL widget. See forum thread.

If you have a 3d point and want to get the 2d point on the opengl widget then use this:

How to create a face with holes using Python API
This snippet demonstrates how to create a face with internal holes through the Python API. See forum thread.

Coin3D
See Coin3d snippets

Related

 * Scripted objects
 * Macros
 * Topological_data_scripting