Microstation VBA – Yay Parçalama
Arabistanda ki bir firma için Bentley Firmasının Microstation programına VBA (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:
-
Private Function YayParcala(ele As Element, yumpar As Double, retCnt As Integer) As Point3d()
-
-
Dim p1 As Point3d, p2 As Point3d, m As Point3d
-
Dim i As Long, k As Integer, mes As Double, r As Double
-
Dim angSwp As Double, angBeg As Double, angEnd As Double, ang As Double
-
Dim Pnts() As Point3d, dz As Double, dx As Double, dy As Double
-
Dim rot As Matrix3d, range As Range3d, ln As Double
-
-
m = ele.AsArcElement.CenterPoint
-
p1 = ele.AsArcElement.StartPoint
-
p2 = ele.AsArcElement.EndPoint
-
range = ele.AsArcElement.range
-
r = Point3dDistance(m, p1)
-
-
angBeg = semt(m, p1)
-
angEnd = semt(m, p2)
-
angSwp = angEnd - angBeg
-
'Dairenin buyuk tarafı mı yoksa kucuk tarafı mı paracalanacak
-
ln = Abs(ele.AsArcElement.SweepAngle)
-
If Pi <ln And Abs(angSwp) 0, angSwp - 2 * Pi, angSwp + 2 * Pi)
-
ElseIf Pi> ln And Abs(angSwp)> Pi Then
-
angSwp = IIf(angSwp> 0, angSwp - 2 * Pi, angSwp + 2 * Pi)
-
End If
-
-
mes = r * Abs(angSwp)
-
k = CLng(mes / (yumpar * 2) + 0.5) + 1 'Kac yeni nokta atilacak
-
ReDim Pnts(k + 2) As Point3d
-
Pnts(1) = p1: Pnts(k + 2) = p2
-
-
ang = angSwp / (k + 1)
-
dz = (p2.Z - p1.Z) / (k + 1)
-
For i = 1 To k
-
Pnts(i + 1) = kutupxy(m, angBeg + i * ang, r)
-
Pnts(i + 1).Z = p1.Z + i * dz
-
Next
-
retCnt = k + 2
-
YayParcala= Pnts
-
End Function
Iyi geceler.
Yazdır
| 933 Görüntülenme | Kategori: 3D & CAD & CAM, Diğer Diller, Programlama |
Geri İzleme
Etiketler: Arc to Linestring, Yay, Microstation, LineString, VB, VBA, ArcBenzer Yazılar
Yorum Yap
XHTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

26 Şubat 2009 |












Henüz yorum yapılmamış.