|
|
| Menüeintrag |
|---|
| Skizze → Randbedingungen → Randbedingung Lichtbrechung |
| Arbeitsbereich |
| Sketcher |
| Standardtastenkürzel |
| K W |
| Eingeführt in Version |
| 0.15 |
| Siehe auch |
| Keiner |
Das Werkzeug Sketcher BrechungNachSnelliusFestlegen Legt zwei Linien so fest, dass sie der Lichtbrechung entsprechen, die beim Passieren einer Grenzfläche auftritt, an der zwei Werkstoffe mit unterschiedlichen Brechungsindizes aufeinander treffen. Siehe Snelliussches_Brechungsgesetz.
Snelliussches Gesetz
Die Reihenfolge der Klicks wird durch gelbe Pfeile mit Zahlen angezeigt. n1, n2 zeigen, wo sich die Brechungsindizes befinden.
Die Randbedingungen können in Makros und von der Python-Konsole aus mit dem folgenden Befehl erstellt werden:
Sketch.addConstraint(Sketcher.Constraint('SnellsLaw',line1,pointpos1,line2,pointpos2,interface,n2byn1))
wobei
Sketch ein Skizzenobjekt ist.line1 und pointpos1 zwei ganze Zahlen sind, die den Endpunkt der Linie im Medium mit dem Brechungsindex von n1 identifizieren. line1 ist der Index der Linie in der Skizze (der Rückgabewert von Sketch.addGeometry), und pointpos1 sollte 1 für den Startpunkt und 2 für den Endpunkt sein.line2 und pointpos2 die Indizes sind, die den Endpunkt der zweiten Linie angeben (in Medium n2)interface der Index der Linie ist, die die Position der Grenzfläche zwischen Medium n1 und Medium n2 darstellt.n2byn1 eine Gleitkommazahl ist, die dem Verhältnis der Brechungsindizes n2/n1 entspricht.Die Seite Sketcher Skripterstellung erklärt die Werte, die für line1, pointpos1, line2, pointpos2 und interface verwendet werden können und enthält weitere Beispiele, wie man Randbedingungen mit Python-Skripten erstellt.
Beispiel:
import Sketcher
import Part
import FreeCAD
StartPoint = 1
EndPoint = 2
f = App.activeDocument().addObject("Sketcher::SketchObject","Sketch")
# add geometry to the sketch
icir = f.addGeometry(Part.Circle(App.Vector(-547.612366,227.479736,0),App.Vector(0,0,1),68.161979))
iline1 = f.addGeometry(Part.LineSegment(App.Vector(-667.331726,244.127090,0),App.Vector(-604.284241,269.275238,0)))
iline2 = f.addGeometry(Part.LineSegment(App.Vector(-604.284241,269.275238,0),App.Vector(-490.940491,256.878265,0)))
# add constraints
# helper constraints:
f.addConstraint(Sketcher.Constraint('Coincident',iline1,EndPoint,iline2,StartPoint))
f.addConstraint(Sketcher.Constraint('PointOnObject',iline1,EndPoint,icir))
# the Snell's law:
f.addConstraint(Sketcher.Constraint('SnellsLaw',iline1,EndPoint,iline2,StartPoint,icir,1.47))
App.ActiveDocument.recompute()
(FIXME)