Microstation VBA – Yay Parçalama

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

Arabistanda ki bir firma için Bentley Firmasının programına (Visaul Basic For Application) ortamında makrolar yazıyorum. Ortalama 15 tane kadar macro.

Bu macrolardan ilki Arc(Yay) Parçalama. Çizim operatorleri linestring(çoklu çizgi) yapmaları gereken bazı bina ve yol köşelerini Arc ile çizmişler. Benim buradaki amacım kullanicinin veridigi bir parametreye gore bu Arc'lari mantıklı bir şekilde Linestring'e donusturmek.
Aşağıdaki kod sadece Daire uzerinde kesecegi noktaları tesbit edip geri donuyor..

Visual Basic:
  1. Private Function YayParcala(ele As Element, yumpar As Double, retCnt As Integer) As Point3d()
  2.  
  3.   Dim p1 As Point3d, p2 As Point3d, m As Point3d
  4.   Dim i As Long, k As Integer, mes As Double, r As Double
  5.   Dim angSwp As Double, angBeg As Double, angEnd As Double, ang As Double
  6.   Dim Pnts() As Point3d, dz As Double, dx As Double, dy As Double
  7.   Dim rot As Matrix3d, range As Range3d, ln As Double
  8.  
  9.   m = ele.AsArcElement.CenterPoint
  10.   p1 = ele.AsArcElement.StartPoint
  11.   p2 = ele.AsArcElement.EndPoint
  12.   range = ele.AsArcElement.range
  13.   r = Point3dDistance(m, p1)
  14.  
  15.   angBeg = semt(m, p1)
  16.   angEnd = semt(m, p2)
  17.   angSwp = angEnd - angBeg
  18.   'Dairenin buyuk tarafı mı yoksa kucuk tarafı mı paracalanacak
  19.   ln = Abs(ele.AsArcElement.SweepAngle)
  20.   If Pi <ln And Abs(angSwp)  0, angSwp - 2 * Pi, angSwp + 2 * Pi)
  21.   ElseIf Pi> ln And Abs(angSwp)> Pi Then
  22.     angSwp = IIf(angSwp> 0, angSwp - 2 * Pi, angSwp + 2 * Pi)
  23.   End If
  24.  
  25.   mes = r * Abs(angSwp)
  26.   k = CLng(mes / (yumpar * 2) + 0.5) + 1 'Kac yeni nokta atilacak
  27.   ReDim Pnts(k + 2) As Point3d
  28.   Pnts(1) = p1: Pnts(k + 2) = p2
  29.  
  30.   ang = angSwp / (k + 1)
  31.   dz = (p2.Z - p1.Z) / (k + 1)
  32.   For i = 1 To k
  33.     Pnts(i + 1) = kutupxy(m, angBeg + i * ang, r)
  34.     Pnts(i + 1).Z = p1.Z + i * dz
  35.   Next
  36.   retCnt = k + 2
  37.   YayParcala= Pnts
  38. End Function

Iyi geceler.

Çok sevdim, başkalarıyla paylaşayım:
  • Google Bookmarks
  • Facebook
  • MySpace
  • TwitThis
  • del.icio.us
  • Digg
  • Live
  • YahooMyWeb
  • Technorati
  • StumbleUpon
Yazdır Yazdır | 933 Görüntülenme | Kategori: 3D & CAD & CAM, Diğer Diller, Programlama | Trackback  Geri İzleme
Etiketler  Etiketler: , , , , , ,

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>