Izris elipse
Iz SDMS
Redakcija dne 11:14, 26. junij 2009 od 217.72.79.210 (pogovor)
Rutina nariše elipso (poligon) 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, 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
EndSub
Za uporabo rutine si pripravimo gumb na orodjarni. Več o tem je v poglavju Urejevalnik orodjarne.
Nazaj na Zanimive rutine