Scenegraph/sv: Difference between revisions

From FreeCAD Documentation
(Created page with "{{docnav/sv|Mesh to Part/sv|Pivy/sv}}")
(Updating to match new version of source page)
(6 intermediate revisions by 2 users not shown)
Line 1: Line 1:
<languages/>
I grunden är FreeCAD ett kollage av olika kraftfulla bibliotek, vilket de viktigaste är [http://en.wikipedia.org/wiki/Open_CASCADE openCascade], för hantering och konstruktion av geometri, [http://en.wikipedia.org/wiki/Coin3D Coin3d] för att visa denna geometri, och [http://en.wikipedia.org/wiki/Qt_(toolkit) Qt] för att sätta ihop allt detta i ett snyggt grafiskt användargränssnitt.
{{docnav|[[Mesh to Part|Mesh to Part]]|[[Pivy|Pivy]]}}


<div class="mw-translate-fuzzy">
Den geometri som syns i FreeCAD's #D vyer är renderade av Coin3D biblioteket. Coin3D är en implementering av [http://en.wikipedia.org/wiki/Open_Inventor OpenInventor] standarden. openCascade mjukvaran erbjuder också samma funktionalitet, men det beslöts när FreeCAD påbörjades att inte använda openCascade's inbyggda visare utan istället använda sig av den snabbare coin3D mjukvaran.
Den geometri som syns i FreeCAD's #D vyer är renderade av Coin3D biblioteket. Coin3D är en implementering av [http://en.wikipedia.org/wiki/Open_Inventor OpenInventor] standarden. openCascade mjukvaran erbjuder också samma funktionalitet, men det beslöts när FreeCAD påbörjades att inte använda openCascade's inbyggda visare utan istället använda sig av den snabbare coin3D mjukvaran.
</div>


<div class="mw-translate-fuzzy">
[http://en.wikipedia.org/wiki/Open_Inventor OpenInventor] är egentligen ett 3D scen beskrivningsspråk. Den scen som beskrivs i renderas sedan av OpenGL på din skärm. Coin3D gör arbetet med detta, så programmeraren inte behöver bry sig om komplexa openGL anrop, programmeraren behöver bara förse den med giltig OpenInventor kod. Den stora fördelen är att openInventor är en mycket välkänd och väldokumenterad standard.
[http://en.wikipedia.org/wiki/Open_Inventor OpenInventor] är egentligen ett 3D scen beskrivningsspråk. Den scen som beskrivs i renderas sedan av OpenGL på din skärm. Coin3D gör arbetet med detta, så programmeraren inte behöver bry sig om komplexa openGL anrop, programmeraren behöver bara förse den med giltig OpenInventor kod. Den stora fördelen är att openInventor är en mycket välkänd och väldokumenterad standard.
</div>


<div class="mw-translate-fuzzy">
Ett av de stora jobben som FreeCAD gör för dig är att översätta openCascade geometriinformation till openInventor språket.
Ett av de stora jobben som FreeCAD gör för dig är att översätta openCascade geometriinformation till openInventor språket.
</div>


OpenInventor beskriver en 3D scen i formen av en [http://en.wikipedia.org/wiki/Scene_graph scenegraph], som den nedan:
OpenInventor beskriver en 3D scen i formen av en [http://en.wikipedia.org/wiki/Scene_graph scenegraph], som den nedan:
Line 13: Line 20:


En openInventor scengraf beskriver allt som utgör en 3D scen, som geometri, färger, material, ljus, etc, och organiserar all den data i smidig och klar struktur. Allting kan grupperas till sub-strukturer, vilket tillåter dig att organisera ditt sceninnehåll så som du vill. Här är ett exempel på en openInventor fil:
En openInventor scengraf beskriver allt som utgör en 3D scen, som geometri, färger, material, ljus, etc, och organiserar all den data i smidig och klar struktur. Allting kan grupperas till sub-strukturer, vilket tillåter dig att organisera ditt sceninnehåll så som du vill. Här är ett exempel på en openInventor fil:
{{Code|code=
<syntaxhighlight>
#Inventor V2.0 ascii
#Inventor V2.0 ascii
Separator {
Separator {
RotationXYZ {
RotationXYZ {
axis Z
axis Z
angle 0
angle 0
}
}
Transform {
Transform {
translation 0 0 0.5
translation 0 0 0.5
}
}
Separator {
Separator {
Material {
Material {
diffuseColor 0.05 0.05 0.05
diffuseColor 0.05 0.05 0.05
}
}
Transform {
Transform {
rotation 1 0 0 1.5708
rotation 1 0 0 1.5708
scaleFactor 0.2 0.5 0.2
scaleFactor 0.2 0.5 0.2
}
}
Cylinder {
Cylinder {
}
}
}
}
}
}


}}
</syntaxhighlight>


Som du kan se, så är strukturen mycket simpel. Du använder separatorer för att organisera din data till block, lite som du skulle organisera dina filer i mappar. Varje uttryck påverkar vad som kommer härnäst, till exempel de första två punkterna i vår rot separator är en rotation och en förflyttning, båda kommer att påverka nästa punkt, vilken är en separator. I den separatorn, så är ett material definierat, och en annan förflyttning. Vår cylinder kommer därför att påverkas av båda förändringarna, den som vi lade direkt på den och den som vi lade på dess förälderseparator.
Som du kan se, så är strukturen mycket simpel. Du använder separatorer för att organisera din data till block, lite som du skulle organisera dina filer i mappar. Varje uttryck påverkar vad som kommer härnäst, till exempel de första två punkterna i vår rot separator är en rotation och en förflyttning, båda kommer att påverka nästa punkt, vilken är en separator. I den separatorn, så är ett material definierat, och en annan förflyttning. Vår cylinder kommer därför att påverkas av båda förändringarna, den som vi lade direkt på den och den som vi lade på dess förälderseparator.
Line 50: Line 57:


Själva FreeCAD har flera verktyg för att se eller ändra openInventor kod. Till exempel, följande pythonkod kommer att visa openInventor representationen av ett valt objekt:
Själva FreeCAD har flera verktyg för att se eller ändra openInventor kod. Till exempel, följande pythonkod kommer att visa openInventor representationen av ett valt objekt:
{{Code|code=
<syntaxhighlight>
obj = FreeCAD.ActiveDocument.ActiveObject
obj = FreeCAD.ActiveDocument.ActiveObject
viewprovider = obj.ViewObject
viewprovider = obj.ViewObject
print viewprovider.toString()
print viewprovider.toString()


}}
</syntaxhighlight>
<div class="mw-translate-fuzzy">
Men vi har också en python modul som tillåter komplett åtkomst till allt som hanterar av Coin3D, som vår FreeCAD scengraf. Så, läs vidare på [[Pivy/sv|Pivy]].
Men vi har också en python modul som tillåter komplett åtkomst till allt som hanterar av Coin3D, som vår FreeCAD scengraf. Så, läs vidare på [[Pivy/sv|Pivy]].
</div>


<div class="mw-translate-fuzzy">
{{docnav/sv|Mesh to Part/sv|Pivy/sv}}
{{docnav/sv|Mesh to Part/sv|Pivy/sv}}
</div>


{{Userdocnavi}}
[[Category:Poweruser Documentation]]

[[Category:Poweruser Documentation/sv]]
{{clear}}
{{clear}}
<languages/>

Revision as of 08:11, 14 June 2019

Den geometri som syns i FreeCAD's #D vyer är renderade av Coin3D biblioteket. Coin3D är en implementering av OpenInventor standarden. openCascade mjukvaran erbjuder också samma funktionalitet, men det beslöts när FreeCAD påbörjades att inte använda openCascade's inbyggda visare utan istället använda sig av den snabbare coin3D mjukvaran.

OpenInventor är egentligen ett 3D scen beskrivningsspråk. Den scen som beskrivs i renderas sedan av OpenGL på din skärm. Coin3D gör arbetet med detta, så programmeraren inte behöver bry sig om komplexa openGL anrop, programmeraren behöver bara förse den med giltig OpenInventor kod. Den stora fördelen är att openInventor är en mycket välkänd och väldokumenterad standard.

Ett av de stora jobben som FreeCAD gör för dig är att översätta openCascade geometriinformation till openInventor språket.

OpenInventor beskriver en 3D scen i formen av en scenegraph, som den nedan:

image from Inventor mentor

En openInventor scengraf beskriver allt som utgör en 3D scen, som geometri, färger, material, ljus, etc, och organiserar all den data i smidig och klar struktur. Allting kan grupperas till sub-strukturer, vilket tillåter dig att organisera ditt sceninnehåll så som du vill. Här är ett exempel på en openInventor fil:

#Inventor V2.0 ascii
 
Separator { 
    RotationXYZ {	
       axis Z
       angle 0
    }
    Transform {
       translation 0 0 0.5
    }
    Separator {	
       Material {
          diffuseColor 0.05 0.05 0.05
       }
       Transform {
          rotation 1 0 0 1.5708
          scaleFactor 0.2 0.5 0.2
       }
       Cylinder {
       }
    }
}

Som du kan se, så är strukturen mycket simpel. Du använder separatorer för att organisera din data till block, lite som du skulle organisera dina filer i mappar. Varje uttryck påverkar vad som kommer härnäst, till exempel de första två punkterna i vår rot separator är en rotation och en förflyttning, båda kommer att påverka nästa punkt, vilken är en separator. I den separatorn, så är ett material definierat, och en annan förflyttning. Vår cylinder kommer därför att påverkas av båda förändringarna, den som vi lade direkt på den och den som vi lade på dess förälderseparator.

Vi har också många andra elementtyper för att organisera vår scen, som grupper, växlar eller annoteringar. Vi kan definiera mycket komplexa material för våra objekt, med färg, texturer, skugglägen och transparens. Vi kan också definiera ljus, kameror, och även rörelser. Det är även möjligt att bädda in skriptbitar i openInventor filer, för att definiera mer komplext beteende.

Om du är intresserad av att lära dig mer om openInventor, hoppa direkt till dess berömdaste referens, Inventor mentor.

I FreeCAD behöver vi normalt inte interagera direkt med scengrafen openInventor. Varje objekt i ett FreeCAD dokument, ett nät, en delform eller något annat, blir automatiskt konverterat till openInventor kod och insatt i huvudscengrafen som du ser i en 3D vy. Den scengrafen uppdateras kontinuerligt när du gör förändringar, lägger till eller tar bort objekt i dokumentet. Alla objekt (i App rymden) har en visare(ett motsvarande objekt i Gui rymden), som anvarar för att ge openInventor kod.

Men det finns många fördelar med att kunna komma åt scengrafen direkt. Vi kan till exempel temporärt ändra utseendet på ett objekt, eller vi kan lägga till objekt som inte har en reell existens i FreeCAD dokumentet, som till exempel konstruktionsgeometri, hjälpare, grafiska tips eller verktyg som manipulatorer eller information på skärmen.

Själva FreeCAD har flera verktyg för att se eller ändra openInventor kod. Till exempel, följande pythonkod kommer att visa openInventor representationen av ett valt objekt:

obj = FreeCAD.ActiveDocument.ActiveObject
viewprovider = obj.ViewObject
print viewprovider.toString()

Men vi har också en python modul som tillåter komplett åtkomst till allt som hanterar av Coin3D, som vår FreeCAD scengraf. Så, läs vidare på Pivy.

Mesh to Part/sv
Pivy/sv