Microstation VBA – Eşyükselti eğrisi seyreltme

Yazan: Revne | Tarih 26 Şubat 2009 | Yorum  Yorum Yok
BerbatKötüOrtaGüzelHarika Henüz puan verilmemiş
Loading ... Loading ...

programının içine yazdığım kodunun bir kısmı..
Buradaki kod Coğrafyadan bildiğimiz Eşyukseklik eğrisi için olculen nokları, parametre olarak verilen yumpar değişkenine gore azaltıyor. Eşyukseklik eğrisi daha az veriyle eskine yakın bir dogrultu izliyor. Bu işlem daha sonra yapılacak B-Spline ve Parametre ile eğriyi yumusatma işlemlerinin ilk adımı. Eğer eğride cok fazla nokta varsa yumusatma yapamiyorsunuz.

Visual Basic:
  1. 'Egri Seyreltme
  2. Public Function EgriSeyrelt(ele As Element, yumpar As Double, retCnt As Integer) As Point3d()
  3.   Dim verts() As Point3d, nverts() As Point3d, vstat() As Boolean, cntVert As Integer
  4.   Dim i As Integer, j As Integer, k As Integer
  5.   Dim mes1 As Double, mes2  As Double
  6.   Dim pkes1 As Point3d, pkes2 As Point3d
  7.   Dim ind As Integer
  8.  
  9.   cntVert = ele.AsVertexList.VerticesCount
  10.   ReDim vstat(cntVert) As Boolean
  11.   ReDim nverts(cntVert) As Point3d
  12.   verts = ele.AsVertexList.GetVertices()
  13.   For i = 0 To cntVert - 2
  14.     mes = 0
  15.     For j = i + 2 To cntVert - 1
  16.       mes1 = Point3dDistance(verts(i), verts(j))
  17.       If mes1> yumpar Then Exit For
  18.     Next
  19.     If j = i + 2 Then
  20.       'diger noktaya konumlan
  21.     Else
  22.       j = j - 1 'Onceki nokya cizgi cizilecek
  23.       mes1 = 0
  24.       ind = i + 1
  25.       For k = i + 1 To j
  26.         pkes2 = dikkesen(verts(k), verts(i), verts(j))
  27.         mes2 = Point3dDistance(pkes2, verts(k))
  28.         If (mes2>= mes1) Then ind = k: mes1 = mes2: pkes1 = pkes2
  29.         vstat(k) = True
  30.       Next
  31.       pkes2.x = (verts(ind).x + pkes1.x) / 2#
  32.       pkes2.y = (verts(ind).y + pkes1.y) / 2#
  33.       pkes2.Z = (verts(ind).Z + pkes1.Z) / 2#
  34.       vstat(j - 1) = False
  35.       verts(j - 1) = pkes2
  36.       i = j - 1
  37.     End If
  38.   Next
  39.   retCnt = 0
  40.   For i = 0 To cntVert - 1
  41.     If vstat(i) = False Then
  42.       retCnt = retCnt + 1
  43.       nverts(retCnt) = verts(i)
  44.     End If
  45.   Next
  46.   EgriSeyrelt = nverts
  47. End Function

Çok sevdim, başkalarıyla paylaşayım:
  • Google Bookmarks
  • Facebook
  • MySpace
  • TwitThis
  • del.icio.us
  • Digg
  • Live
  • YahooMyWeb
  • Technorati
  • StumbleUpon

Benzer Yazılar


Yorum Yap


(gerekli)

(gerekli,yayınlanmaz)




XHTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>