الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

تعلم التحكم ببرنامج أتوكاد من خلال فجوال بيزك ...خطوة بخطوة

بدأه م.حسام في 21 يناير 2010 · 9 رد · 3,472 مشاهدة · في لغة Ms Visual Basic 6 وما قبلها من إصدارات
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بسم الله الرحمن الرحيم ...

إخواني الأفاضل..

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

أرجو من الأخوة الأفاضل ..تقبل موضوعي وبيان طرح هذا الموضوع سابقا وهل هذا مكانه الصحيح ..وأرجو التفاعل معي من خلال أي استفسار أو تصحيح أو فكرة ترونها مناسبة ...ولكم جزيل الشكر

بحول الله نبدأ بالدرس الأول ....

الدرس الأول

•افتح مشروع فجوال بيزك جديد يحوي إطاراً واحداً Form 1 وموديول واحد Module1 وخزنه في أي مكان تختاره وسمه VBcad .

•حيث سنعتمد في دروسنا القادمة على تطوير هذا المثال خطوة بخطوة ليكون شاملاً بإذن الله .

•الآن قم بعمل زر Command1 وأضفه للفورم وقم بتغيير خاصية caption ليصبح (Open New Drawing) . وقم بعمل زر Command2 وأضفه للفورم وقم بتغيير خاصية caption ليصبح (Close New Drawing ) وقم بعمل زر Command3 وأضفه للفورم وقم بتغيير خاصية caption ليصبح (Exit) .

•يجب الآن تحميل مكتبة كائن الأوتوكاد ضمن المشروع ونقوم بعمل ذلك من قائمة Project نختار References ، ثم نبحث في مربع الحوار الذي يظهر لدينا عن مكتبة الأتوكاد ذات الإصدار المرتبط بالنسخة المحملة على جهازك (2000-2004-2007-2009....) ونفعل هذا الخيار Autocad 2009 Type Library ثم موافق .

•نفتح صفحة الموديول Module1 ونكتب السطر التالي :

Public Acadapp As AcadApplication

حيث Acadapp متحول تم تعريفه ليمثل تطبيق أو كائن الأتوكاد ...أي أن هذا المتحول وكأنه برنامج الأتوكاد نفسه سنتعامل مع الأتوكاد من خلاله (وإن كان التعبير غير دقيق).

•الآن في حدث النقر Click على زر Command1 (Open New Drawing) نكتب السطر التالي :

Private Sub Command1_Click()
        Set Acadapp = CreateObject("AutoCAD.Application.17")
        Acadapp.Documents.Add
        Acadapp.Visible = True
        Acadapp.WindowState = acMax        
End Sub

الشرح :

-نقوم أولا بفتح تطبيق أو كائن أتوكاد (Object) من خلال وظيفة CreateObject وإسناد هذا الكائن إلى المتحول Acadapp من خلال وظيفة Set . وهنا أصبح المتحول Acadapp يمثل التطبيق المفتوح وسنتعامل مع التطبيق أو الكائن من خلاله . وهنا نلاحظ الجملة "AutoCAD.Application.17" وهي لنسخ الكاد بعد 2004 أما قبل 2004 نكتب "AutoCAD.Application.16"

-من خلال هذا المتحول (الذي سنتعامل معه وكأنه تطبيق الأتوكاد ) نقوم بفتح ملف جديد من خلال السطر

Acadapp.Documents.Add

-نقوم بعد ذلك بجعل تطبيق الأتوكاد ظاهراً على الشاشة من خلال

Acadapp.Visible = True

-يمكن التحكم بنافذة برنامج الأتوكاد من خلال :

Acadapp.WindowState = acMax

الآن إحفظ العمل وشغل البرنامج واضغط زر (Open New Drawing) ولاحظ النتيجة .

ولكن :

ماذا لو كان برنامج الأتوكاد مفتوحاً عند تشغيل البرنامج ؟

عندها سيقوم بتشغيل برنامج الأتوكاد مرة ثانية ... هنا نستطيع اختبار كون أتوكاد مفتوحأ أم لا كما يلي :

سنعدل الكود السابق بشكل كامل ليصبح على الشكل :

Private Sub Command1_Click()
    On Error Resume Next
        Set Acadapp = GetObject(, "AutoCAD.Application.17")
        Acadapp.Documents.Add
        Acadapp.Visible = True
        Acadapp.WindowState = acMax
    If Err.Number <> 0 Then
        Set Acadapp = CreateObject("AutoCAD.Application.17")
        Acadapp.Documents.Add
        Acadapp.Visible = True
        Acadapp.WindowState = acMax
        Err.Clear
    End If
End Sub

شرح :

نقوم أولاً باختبار كون أتوكاد مفتوحاً أو لا من خلال وظيفة GetObject وإسناد التطبيق المفتوح إلى المتحول Acadapp من خلال وظيفة set . لو كان أتوكاد غير مفتوحأ سنحصل على خطأ Error .

نختبر قيمة الخطأ فإذا كانت مختلفة عن الصفر معنى ذلك وقوع خطأ وهو كون التطبيق مغلق عندها نستخدم وظيفة CreateObject لفتح التطبيق وغسناده للمتحول acadapp من خلال set

الآن إحفظ العمل وشغل البرنامج واضغط زر (Open New Drawing) ولاحظ النتيجة .

----------------------------------------

ملاحظة: لاحظ أنه في كل استعمال لتعليمة Acadapp.Documents.Add نكون قد فتحنا ملف جديد ..أي أنه يمكن فتح عدة ملفات باستخدام هذه التعليمة إلا أن الملف الأخير يكون هو الفعال ActiveDocument وعند إرسال أي أمر إلى البرنامج سيتم التعامل مع هذا الملف .

كيف نغلق ملف أتوكاد وننهي البرنامج ؟

قم بكتابة الكود التالي في حدث النقر على زر Close New Drawing على الشكل :

Private Sub Command2_Click()
    Acadapp.ActiveDocument.Close (False)
    Acadapp.Quit
    Set Acadapp = Nothing
End Sub

الشرح :

- السطر الأول إغلاق الملف الحالي(الفعال) باستخدام Close ولاحظ كتابة كلمة False وهي تعني أغلق الملف بدون حفظ التغييرات (فمثلا لو قمت بإجراء تعديلات على الملف الرسومي وقمت بمحاولة الإغلاق بدون كلمة false ستعترضك رسالة للسؤال هل تريد الحفظ أم لا ).

- نقوم بعد ذلك بإنهاء البرنامج بتعليمة Quit .

- نفرغ المتحول Acadapp من ارتباطه بكائن الأتوكاد من خلال إسناد Nothing إليه من خلال وظيفة Set .

لكن ماذا لو أردنا إغلاق الملف الحالي وحفظ التغييرات ؟

بما أنه قد قمنا بفتح ملف جديد فارغ فإذا أردنا حفظه عند إغلاقه يجب استخدام SaveAs وسنشرح ذلك كما يلي :

- قم بعمل زر Command4 وأضفه للفورم وقم بتغيير خاصية caption ليصبح (SaveAs) .

- في حدث النقر على الزر Command4 نكتب :

Private Sub Command4_Click()
    Dim Path0 As String
    Path0 = "D:/VBcad.dwg"
    Acadapp.ActiveDocument.SaveAs Path0, ac2009_dwg
End Sub

لقد قمنا بعمل نسخة عن الملف الحالي باستخدام الأمر SaveAs حيث يمثل Path0 إسم ومسار الملف كاملاً و ac2007_dwg يدل على حفظ الملف بصيغة 2009 كملف رسومي (يمكن مثلا حفظه 2004 ويمكن حفظه بتنسيق dxf ) .

ماذا لو أردنا فتح ملف رسومي موجود ؟

- قم بعمل زر Command5 وأضفه للفورم وقم بتغيير خاصية caption ليصبح (OpenExsistDrwing) .

- في حدث النقر على الزر Command5 نكتب :

Private Sub Command5_Click()
    On Error Resume Next
        Set Acadapp = GetObject(, "AutoCAD.Application.17")
        Path0 = "D:/VBcad.dwg"
        Acadapp.Documents.Open Path0
        Acadapp.Visible = True
       Acadapp.WindowState = acMax
    If Err.Number <> 0 Then
        Set Acadapp = CreateObject("AutoCAD.Application.17")
        Path0 = "D:/VBcad.dwg"
        Acadapp.Documents.Open Path0
        Acadapp.Visible = True
        Acadapp.WindowState = acMax
        Err.Clear
    End If
End Sub

لاحظ أننا نقوم بفتح الملف المخزن سابقا من خلال تعليمة Open حيث نكتب بعها مسار الملف كاملا Path0 .

ماذا لو أردنا حفظ التغييرات في هذا الملف ؟

- قم بعمل زر Command6 وأضفه للفورم وقم بتغيير خاصية caption ليصبح (Save Changes) .

- في حدث النقر على الزر Command6 نكتب :

Private Sub Command6_Click()
    Acadapp.ActiveDocument.Save
End Sub

لاحظ استخدام تعليمة Save لحفظ التغييرات على ملف مخزن سابقاً .

--------------------------------------------

بعد هذا نستطيع الآن تجربة ما قمنا بعملة بالترتيب التالي :

1-فتح ملف جديد من خلال النقر على زر Open New Drawing .

2-عمل نسخة عن الملف (حفظ لأول مرة ) بتحديد اسم الملف ومساره كاملاً (تستطيع إظهار رسالة للمستخدم ليسأله فيها عن تحديد المسار واسم الملف ولكن هذا ليس المهم هنا فهدفنا البساطة في الشرح وليس التعقيد ) بالضغط على زر Save As .

3-إغلاق الملف الحالي بالضغط على زر Close New Drawing .

4-فتح الملف الذي قمنا بتخزينه سابقاً بالضغط على زر Open Exists Drawing .

5-حفظ التغييرات عليه بالضغط على زر Save Changes .

6-إغلاق الملف الحالي وإنهاء برنامج أتوكاد بالضغط على زر Close New Drawing .

إلى هنا نكون قد أنهينا الدرس الأول ....

دمتم بخير

م.حسام

-----------------------------------------------------

#2

ما قرأت الموضوع كامل

لكن كونها أول مشاركة لك

بحييك وبشكرك على مجهودك الحلو

جزاك الله كل خير عني وعن المؤمنين اجمعين

:)

محتار!!! مش عارف شوتعمل؟؟! عندك مشاكل ونفسك تنحل؟؟!

عليك بالاقتراب من خالقك

عليك بصلاة الاستخارة

وعليك بالصدقة

داوو مرضاكم بالصدقة

ما نقص مال من صدقة

تصدقو ولو بشق تمرة

#3

الف شكر يابشمهندس علي الموضوع

بس الوقتي احنا كل الي عملناه اننا فتحنا ملف وخزنا وحفظنا باسم وقفلنا البرنامج

السؤال هل ممكن نستخدم الاداة في الرسم من خلال البرنامج الي ممكن نصممه في الفيجوال بسك وهل ممكن نعرض ملف اوتوكاد داخل النموذج بتااعنا

وهل ممكن ندي اوامر رسم معينه للتعديل علي ملف اوتوكاد معمول قبل كده

يعني مثلا لو فيه ملف عندنا مرسوم بالاوتوكاد والمفروض اني اضيف رسم معين عليه هل اقدر اقرا بيانات الرسوم الحالي علي الرسم وبالتالي اقدر اضيف التعديل عليها من خلال معرفتي بالرسومات الحالي داخل الملف

وهل جربت تشتغل علي vba الموجود داخل الاوتوكاد نفسه ولا انت شايف ان انك تعمل برنامج خارجي يبقي احسن

اكيد هيكون عندك الخبره لتغطيه اسالتي لانك بتقول انك بحثت في الموضوع لمدة 10 سنين يعني من ايام اوتوكاد 14 او قبله كمان

#4
ae_amr كتب:

الف شكر يابشمهندس علي الموضوع

بس الوقتي احنا كل الي عملناه اننا فتحنا ملف وخزنا وحفظنا باسم وقفلنا البرنامج

السؤال هل ممكن نستخدم الاداة في الرسم من خلال البرنامج الي ممكن نصممه في الفيجوال بسك وهل ممكن نعرض ملف اوتوكاد داخل النموذج بتااعنا

وهل ممكن ندي اوامر رسم معينه للتعديل علي ملف اوتوكاد معمول قبل كده

يعني مثلا لو فيه ملف عندنا مرسوم بالاوتوكاد والمفروض اني اضيف رسم معين عليه هل اقدر اقرا بيانات الرسوم الحالي علي الرسم وبالتالي اقدر اضيف التعديل عليها من خلال معرفتي بالرسومات الحالي داخل الملف

وهل جربت تشتغل علي vba الموجود داخل الاوتوكاد نفسه ولا انت شايف ان انك تعمل برنامج خارجي يبقي احسن

اكيد هيكون عندك الخبره لتغطيه اسالتي لانك بتقول انك بحثت في الموضوع لمدة 10 سنين يعني من ايام اوتوكاد 14 او قبله كمان

أخي الكريم ...

صحيح ما تقول أنني بدأت العمل في الموضوع منذ أيام أتوكاد 14 حيث قمت بعمل برنامج يرسم تفاصيل التسليح للجوائز المستمرة منذ عام 2000 تقريبا من خلال إرسال الأوامر إلى أتوكاد من خلال فجوال بيزك ...

أخي الكريم سأوضح لك بعض النقاط حول ما تستطيع القيام به من خلال برنامج فجوال :

- فتح ملف أتوكاد جديد أو مخزن ويحوي عناصر رسومية .

- رسم كل ما تريده ضمن أتوكاد (جميع العناصر الرسومية - الخطوط الدوائر الاقواس - مجمع الخطوط - النصوص - التهشير - السمات - الكتل - الطبقات - المناطق - المجسمات - المضلعات - ............و و و و و ثنائي ابعاد وثلاثي ابعاد .... كل ما يخطر ببالك ) .

- إجراء كافة أشكال التعديلات والطرق المتبعة للتعديل على العناصر الرسومية ( نسخ - لصق - تحريك - مصفوفة - Triim - Extend - .... و و و الخ) ..

- أمور الطباعة وما إلى ذلك .

- تستطيع فتح ملف أتوكاد موجود سابقاً .. وقراءة كافة العناصر الرسومية بداخله ... والتعديل عليه كما تشاء وكما ترغب ( زي ما تحب ) ...

اي أنك تستطيع أن تلعب بأتوكاد من خلال فجوال كما تشاااااااااء ....

خيرا فالعمل ب VB6 نفسه وفق VB مع اختلاف بسيط من حيث الأوامر واختلاف مهم من حيث الخيارات المتاحة حيث عند استخدامك ل Vb تتاح لك مجموعة كبيرة جدا ومريحة من الخيارات الغير متاحة ضمن vba .. إلا أن المضمون واحد مع اختلاف بسيط في شكل التعليمات ...

,كما أنه أخي الكريم ... لكل طريق بداية .. سنتواصل بالدروس خطوة بخطوة ..حتى نصل إلى مبتغانا بإذن الله ...تابع معي وستتعلم كل ما تريده حول هذا الموضوع بإذن الله ..

دمت بخير

م.حسام

تم تعديل هذه المشاركة بواسطة م.حسام في 21 يناير 2010 في 18:55

#5

الدرس الثاني

بسم الله الرحمن الرحيم

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

وبحول الله نبدأ :

إنشاء طبقة جديدة في الملف الرسومي :

- نفتح صفحة التعريفات العامة للبرنامج Module1 ونكتب ما يلي :

Public LayerObj As AcadLayer

حيث تم تعريف عنصر اسمه LayerObj على أنه طبقة في أتوكاد .

- قم بعمل زر Command7 وأضفه للفورم وقم بتغيير خاصية caption ليصبح (AddNewLayer) .

- في حدث النقر على الزر Command7 نكتب :

Private Sub Command7_Click()
    Set LayerObj = Acadapp.ActiveDocument.Layers.Add("جدران خارجية ")
    LayerObj.Color = acRed
    LayerObj.Lineweight = 0.5
    Acadapp.ActiveDocument.ActiveLayer = LayerObj
End Sub

نقوم بإضافة طبقة جديدة إلى الملف الرسومي ونسميها كما نشاء مثلا (جدران خارجية) ونسندها إلى الكائن LayerObj من خلال وظيفة Set بحيث يصبح هذا الكائن يمثل الطبقة ويعبر عنها ويمكن التحكم بخصائص الطبقة وتعديلها وحذفها من خلاله .

لتغيير لون الطبقة إلى أحمر مثلاً نغير خاصية Color للعنصر LayerObj إلى acRed ولتغيير سماكة الخطوط التي سترسم على الطبقة نغير خاصية Lineweight للعنصر LayerObj إلى 0.5 مثلاً .

وأخيراً عند إضافة عدة طبقات لابد من جعل إحدى الطبقات هي الحالية وذلك من خلال خاصية ActiveLayer للملف الرسومي الحالي ActiveDocument ونجعلها تساوي العنصر LayerObj .

تستطيع تجريب ما قمنا به بفتح ملف رسومي جديد من خلال الضغط على زر Open New Drawing ثم الضغط على زر AddNewLayer ولاحظ النتيجة .

ملاحظة :

يمكن حذف الطبقة في أي وقت باستخدام الخاصية LayerObj.Delete في أي مرحلة من البرنامج (بشرط ألا تكون هي الطبقة الحالية وإلا سنحصل على رسالة خطأ).

#6

الف شكر يابشمهندس علي موضوعك وفي انتظار في لهفه الباقي ان شاء الله وجزاك الله كل خير

#7

يعطيكم العافية استمروا في هذا الموضوع وواصلوا الدروس على الأوتوكاد

#8

السلام عليكم و رحمة الله

سلمت يداك أخي م.حسام

المعلومات التي قدمتها مفيدة جداً جداً

أنا أيضاً أبرمج الأوتوكاد عن طريق الفيجوال6 فقد قمت بتصميم عدة برامج هنسية و مساحية أفادتني كثيراً في عملي الهندسي و لاسيما الطبوغرافي

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

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

#9

بارك الله فيك يا باشمهندس حسام

ولكن لى سؤال هام

كيف بعد الرسم بالاتوكاد يتم الانتقال الى الفيجوال و نجد انه قد قام باستخدام احداثيات النقط المرسومة كمدخلات فى كود البرنامج

هذا برنامج مرفق بسيط تطبيقآ لما شرحته لنا أفتح به الأتوكاد وأرسم فيه ما أشاء
وأرجو منك أن تعدل لى البرنامج بوضع زرين جديدين
Command4 وCommand5
بحيث اذا أشرت فى الرسم على قطعةمستقيمة
معينة ثم ضغطت على الزر Command4 أجده يكتب احداثيات نقطتى طرفيها فى أىTEXT
وأيضآ بحيث اذا أشرت فى الرسم على مستطيل معين ثم ضغطت على الزر Command5 أجده يكتب احداثيات رءوسه الأربعة فى أىTEXT

ولكم ألف شكر

الرسم بالأوتوك&#15.zip

#10
جزاك الله خيرا
هل يمكن اجراء هذا الربط للفجوال بيزك مع الأتوكاد المعمارى ارشيكاد أم autocad architecture

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…