انتظروا قريبا جدا مجموعة دروس تعليم AutoCad 2006 وايضا تعليم Inventor 10 انتظروا

     

اخر الدروس تعليمية

     
  تعليم برنامج MATLAB
  الدرس الثامن
الدرس التاسع
  الدرس العاشر
 
 
  تطبيقات على Matlab
    التعامل مع الصور والالوان
     
  تعليم برنامج AutoCad
    الدرس الخامس
  الدرس السادس
  الدرس السابع
  الدرس الثامن
  الدرس التاسع
  تطبيقات على AutoCad
    الكتل الديناميكية
    تصميم خط عربى
    الحاسبة الهندسية
    الامر تغيير
    القطع المكافئ
    النجوم
  اساسيات المحاكاة فى لمتلاب
      الدرس الاول
    الدرس الثانى
    الدرس الثالث
  االتسجيل في سجل الزوار
   
  وصلات هامة
  موقع الخيمة
     
  موقع البوصلة
   

خدمــــــات

  إرسال الموقع لصديق
     
   
اسم صديقك:
بريد صديقك:
اســمك:
بـــريدك:

  محرك بحث جوجل
   

Google

     
     
     
     
           
 

تطبيقات AutoCad

 

أساسيات AutoCad

نجوم أوتوكاد

 

بسم الله الرحمن الرحيم، والصلاة والسلام على سيدنا محمد، وعلى آله وأصحابه أجمعين...

أتحدث في هذه المقالة عن رسم الأشكال النجمية المنتظمة في أوتوكاد باستخدام لغة البرمجة فيجوال بيسك للتطبيقات (VBA)، المتوفرة أصلاً في أوتوكاد. وللاستفادة من هذه المقالة يجب أن يكون القارئ على دراية سابقة بمبادئ فيجوال بيسك وأوتوكاد.

يعلم معظمكم أنه لا تتوفر في أوتوكاد أوامر جاهزة لرسم الأشكال النجمية، ولذلك فقد صممت برنامجاً ليقوم بهذه المهمة، لهدفين، أولهما: إطلاع القارئ على طريقة استخدام لغة فيجوال بيسك للتطبيقات في أوتوكاد، وثانيهما: وضع هذا البرنامج في متناول مستخدمي برنامج أوتوكاد، مجاناً. وفي ما يلي بعض الأشكال النجمية التي يمكن الحصول عليها بسهولة باستخدامه.


شكل (1): بعض الأشكال النجمية التي يمكن الحصول عليها.

الفكرة النظرية :
نحتاج قبل البدء برسم النجم إلى معرفة المعطيات التالية، الموضحة في الشكل.

هذه المعطيات سيقوم المستخدم بإدخالها، وهي: مركز النجم c إحداثياه (x,y)، والعدد الكلي لرؤوس النجم، أو عدد الرؤوس الخارجية فقط، وسنستخدم ههنا عدد الرؤوس الخارجية n، وهو نصف العدد الكلي للرؤوس، والقطر الكبير r1، والقطر الصغير r2.
سيتولى البرنامج مهمة حساب إحداثيات رؤوس النجم، ومن ثم يقوم برسم مجمع خطوط (polyline)، باستخدام تلك الإحداثيات المحسوبة.

طريقة الحساب:

إن الزاوية ang الموضحة في الشكل، هي ( ang = 2*pi / n )، حيث n: عدد الرؤوس الخارجية.

إن إحداثيات الرأس الخارجي i بالنسبة للمركز هي :
x(i) = r1 * sin( ang * i )
y(i) = r1 * cos( ang * i )
أما إحداثيات الرأس الداخلي i' بالنسبة للمركز فهي :
x’(i) = r2 * sin( ang * i + ang/2 )
y’(i) = r2 * cos( ang * i + ang/2 )
ومن الضروري أن ننتبه أن حساب تلك الإحداثيات بشكل عام يتطلب إضافة إحداثيات المركز لإحداثيات كل رأس، وهكذا تصبح المعادلات السابقة:
x(i) = r1 * sin( ang * i ) + x
y(i) = r1 * cos( ang * i ) + y

x’(i) = r2 * sin( ang * i + ang/2 ) + x
y’(i) = r2 * cos( ang * i + ang/2 ) + y
حيث x , y: إحداثيات المركز.

البدء بالبرنامج:
لتشغيل بيئة VBA في أوتوكاد اضغط ALT + F11، فتظهر النافذة الرئيسية الموضحة في الشكل (4).
شكل (4): بيئة فيجوال بيسك للتطبيقات، (VBA)، في أوتوكاد.
من قائمة "إدراج" (Insert) اختر "وحدة نمطية" (Module)، تظهر نافذة أخرى ضمن النافذة السابقة، سنقوم بكتابة البرنامج فيها.

نقوم بإضافة إجراء فرعي (Sub Procedure) ضمن النافذة، ونسميه DrawStar1، بكتابة السطر التالي:

Public Sub DrawStar1()
يقوم فيجوال بيسك للتطبيقات بإضافة السطر End Sub تلقائياً.
نضيف ما يلي بين السطرين السابقين:
Dim pnt1 As Variant, p(0 To 2) As Double
Dim n As Integer, r1 As Single, r2 As Single
حيث قمنا بتعريف مجموعة من المتحولات وهي:
المتحول  

الشرح

pnt1 النقطة التي سنختارها ضمن نافذة أوتوكاد لتكون مركز النجم (متحول متغير يقبل جميع أنواع البيانات).
p (0 To 2) نفس النقطة ولكن بعد تحويلها إلى صيغة يقبلها أوتوكاد، لاحظ أن كل نقطة يتم تعريفها بشكل مصفوفة (Array) مؤلفة من ثلاثة عناصر هي إحداثيات هذه النقطة (أعداد حقيقية ذات دقة مضاعفة).
n عدد الرؤوس الخارجية (عدد صحيح).
r1 و r2 أنصاف الأقطار (أعداد حقيقية ذات دقة مفردة).
أما الآن فسيطلب البرنامج من المستخدم إدخال مجموعة المعطيات باستخدام الأوامر التالية:
الوظيفة  

الشرح

GetPoint يطلب من المستخدم إدخال نقطة، إما بالنقر على موقع ما في إطار الرسم، أو بإدخال الإحداثيات في نافذة الأوامر.
GetString يطلب من المستخدم إدخال نص.
GetReal يطلب من المستخدم إدخال عدد حقيقي.
وهذه الأوامر، بالإضافة إلى مجموعة من الأوامر الأخرى الشبيهة، هي من الطرق (methods) التابعة للكائن Utility، وهو كائن يمكن الوصول إليه من الكائن الأساسي ThisDrawing الذي يدل على ملف الرسم المفتوح حالياً. تستخدم هذه الأوامر بنفس الأسلوب.

أما الآن فسنتابع إدخال هذه الأوامر في البرنامج بعد السطرين السابقين، بحيث تبدو الشفرة النهائية لهذا الجزء كما يلي:

Public Sub DrawStar1()
    Dim pnt1 As Variant, p(0 To 2) As Double
    Dim n As Integer, r1 As Single, r2 As Single

    With ThisDrawing.Utility
        On Error GoTo anError
        pnt1 = .GetPoint(, "Specify center point: ")
        Do
            n1 = .GetString(0, "Enter number of outer vertices <8>: ")
            If n1 = "" Then n = 8 Else n = Val(n1)
            If n < 3 Then
                .Prompt "Value must be more than 2." & vbLf
            End If
        Loop While n < 3
        Do
            r1 = .GetReal("Specify first radius: ")
            If r1 <= 0 Then .Prompt "Value must be positive and nonzero."
        Loop Until r1 > 0
        Do
            r2 = .GetReal("Specify second radius: ")
            If r2 <= 0 Then .Prompt "Value must be positive and nonzero."
        Loop Until r2 > 0
    End With
    p(0) = pnt1(0): p(1) = pnt1(1): p(2) = pnt1(2)
    CalcStar p(), n, r1, r2
Exit Sub
anError:
End Sub

نلاحظ في السطر الرابع من الأسفل الأمر CalcStar، وهو في الحقيقة برنامج فرعي آخر يقوم بحساب إحداثيات الرؤوس ، وسنقوم بشرحه الآن .

أضف برنامجاً فرعياً بنفس الطريقة السابقة بأن تكتب في سطر فارغ ما يلي:

Private sub CalcStar (p() As Double, n As Integer, r1 As Single, r2 As Single)

يقوم فيجوال بيسك للتطبيقات بإضافة السطر End Sub تلقائياً.
سنقوم الآن بتعريف كائن جديد هو مجمع خطوط، كما يلي:

Dim lineObj as AcadPolyline

ثم نحسب الزاوية ang المشروحة سابقاً:

ang = 2*pi/n

نقوم بحجز مصفوفة لتخزين إحداثيات رؤوس الشكل النجمي، وليكن اسمها Points، أما عدد عناصرها فهو ثلاثة أضعاف عدد النقاط الكلي، x و y و z لكل نقطة، وهذا العدد هو n1.

n1=3*(2*n)-1
ReDim Points (0 to n1) as Double

ثم نقوم بحساب الإحداثيات وتخزينها ضمن المصفوفة Points، بالاعتماد على المعادلات السابقة:

For i = 0 To n - 1
points(i * 6) = r1 * Sin(ang * i) + p(0)
points(i * 6 + 1) = r1 * Cos(ang * i) + p(1) 
points(i * 6 + 2) = p(2)

points(i * 6 + 3) = r2 * Sin(ang * i + ang / 2) + p(0) 
points(i * 6 + 4) = r2 * Cos(ang * i + ang / 2) + p(1) 
points(i * 6 + 5) = p(2)
Next

بقي لدينا الخطوة الأخيرة وهي رسم مجمع الخطوط بعد أن حسبنا إحداثيات رؤوس النجم، وسنستخدم لهذا الغرض الأمر AddPolyline، وهو واحد من الطرق (methods) التابعة لكائن حيز النموذج (ModelSpace) وهو بدوره تابع للكائن ThisDrawing.

Set lineObj = ThisDrawing.ModelSpace.AddPolyline(Points)
LineObj.Closed = True

أصبح الجزء الثاني كاملاً كما يلي:

Private Sub CalcStar(p() As Double, n As Integer, r1 As Single, r2 As Single)
    Dim lineObj As AcadPolyline
    Dim i As Long
    pi = Atn(1) * 4
    n1 = 3 * (2 * n) - 1: ang = 2 * pi / n
    ReDim points(0 To n1) As Double
    For i = 0 To n - 1
        points(i * 6) = r1 * Sin(ang * i) + p(0) 'x
        points(i * 6 + 1) = r1 * Cos(ang * i) + p(1) 'y
        points(i * 6 + 2) = p(2)

        points(i * 6 + 3) = r2 * Sin(ang * i + ang / 2) + p(0) 'x
        points(i * 6 + 4) = r2 * Cos(ang * i + ang / 2) + p(1) 'y
        points(i * 6 + 5) = p(2)
    Next
    Set lineObj = ThisDrawing.ModelSpace.AddPolyline(points)
    lineObj.Closed = True
End Sub

قم بحفظ البرنامج، ولتنفيذه انتقل لنافذة أوتوكاد، واكتب الأمر التالي:

vbarun

تظهر نافذة تحوي أسماء الماكروات النشطة، وفي حالتنا يوجد ماكرو واحد فقط، اسمه DrawStar1 ، اختره ثم اضغط الزر Run، ثم أدخل المعطيات في نافذة الأوامر بالترتيب.

لتنزيل نسخة من البرنامج انقر هنا.

أ
وآخر دعوانا أن الحمد لله رب العالمين.
 

الصفحة الرئيسية     |     دروس     |     الكتب     |     مواقع     |     التسجيل     |     اتصل بنا     |     عن الموقع