Izris elipse: Razlika med redakcijama
Iz SDMS
Jump to navigationJump to search (New page: Rutina nariše elipso (poligon) okoli točke, ki je v plasti Skica točk. Kot atributi morajo biti zapisane vednosti dolžin osi a in b ter azimut stranice a. Sub NarisiElipse(M As Long...) |
m |
||
| (2 vmesni redakciji drugega uporabnika nista prikazani) | |||
| Vrstica 1: | Vrstica 1: | ||
| − | Rutina nariše | + | Rutina nariše elipse (poligone) okoli filtriranih točk, ki so v plasti Skica točk. Kot atributi morajo biti pri točkah zapisane vednosti dolžin osi a in b ter azimut stranice a. |
| + | <source> | ||
Sub NarisiElipse(M As Long) | Sub NarisiElipse(M As Long) | ||
/*M je faktor povečave osi elipse*/ | /*M je faktor povečave osi elipse*/ | ||
| − | Dim LP As TLayer, F1, F2, F3 As TField, I, J As Long, Y, X, DY, DX, A, DA As Float, PA As TPointArray, SA, CA, SB, CB As Float | + | Dim LP As TLayer, F1, F2, F3 As TField, I, J As Long, Y, X, DY, DX, A, DA As Float, <br/>PA As TPointArray, SA, CA, SB, CB As Float |
LP = [Skica točk] //Plast s točkovno in ploskovno topologijo | LP = [Skica točk] //Plast s točkovno in ploskovno topologijo | ||
F1 = LP.GetField ('[Os a]') | F1 = LP.GetField ('[Os a]') | ||
| Vrstica 37: | Vrstica 38: | ||
EndIf | EndIf | ||
EndSub | EndSub | ||
| + | </source> | ||
Za uporabo rutine si pripravimo gumb na orodjarni. Več o tem je v poglavju [[Urejevalnik orodjarne]]. | Za uporabo rutine si pripravimo gumb na orodjarni. Več o tem je v poglavju [[Urejevalnik orodjarne]]. | ||
Nazaj na [[Zanimive rutine]] | Nazaj na [[Zanimive rutine]] | ||
Trenutna redakcija s časom 11:16, 26. marec 2010
Rutina nariše elipse (poligone) okoli filtriranih točk, ki so v plasti Skica točk. Kot atributi morajo biti pri točkah zapisane vednosti dolžin osi a in b ter azimut stranice a.
Sub NarisiElipse(M As Long)
/*M je faktor povečave osi elipse*/
Dim LP As TLayer, F1, F2, F3 As TField, I, J As Long, Y, X, DY, DX, A, DA As Float, <br/>PA As TPointArray, SA, CA, SB, CB As Float
LP = [Skica točk] //Plast s točkovno in ploskovno topologijo
F1 = LP.GetField ('[Os a]')
F2 = LP.GetField ('[Os b]')
F3 = LP.GetField ('[DTheta]')
LP.Filter.Clear
LP.Filter.SQL = '([Os a].AsNumber > 0)'
LP.Filter.Execute
If LP.FilteredRecords.Count > 0 Then
LP.BeginMultipleUpdate
For I = 0 To LP.FilteredRecords.Count - 1
Y = LP.FilteredRecords.Items(I).Y
X = LP.FilteredRecords.Items(I).X
LP.EditRecord.Edit (LP.FilteredRecords.Items(I))
DY = LP.EditRecord.FldAsNumber (F1) * M
DX = LP.EditRecord.FldAsNumber (F2) * M
A = DegToRad (90 - LP.EditRecord.FldAsNumber (F3))
CB = Cos (A)
SB = Sin (A)
PA = CreatePointArray
For J = 0 To 359 Step 15
DA = DegToRad (J)
CA = Cos (DA)
SA = Sin (DA)
PA.AddPoint (Y + DY * CA * CB - DX * SA * SB, X + DY * CA * SB + DX * SA * CB)
Next
LP.EditRecord.SetPolygon
LP.EditRecord.AddPointArray (PA)
LP.EditRecord.Update
Destroy (PA)
Next
LP.EndMultipleUpdate
EndIf
EndSubZa uporabo rutine si pripravimo gumb na orodjarni. Več o tem je v poglavju Urejevalnik orodjarne.
Nazaj na Zanimive rutine