# تعلم تصميم برنامج بالفيجوال بيسك يرسم في الاوتوكاد



## سميرة عبد الله (1 نوفمبر 2011)

السلام عليكم :
بسم الله الرحمن الرحيم
سوف نبدأ اليوم في وضع دروس لتصميم برنامج
بلغة فيجوال بيسك 6 و يرسم في الاوتوكاد
الادوات اللازمة لبدء العمل :
1- برنامج فيجوال بيسك 6



> هذا رابط portable visual basic بمساحة 5 ميجا فقط للتسهيل لمن ليس عنده البرنامج
> 
> http://www.mediafire.com/?p76kzo3zzdjgx2m


2- برنامج الاوتوكاد اي اصدار متوفر
سوف نقوم باذن الله تصميم برنامج من الصفر حتى تحزيم البرنامج ليصبح جاهزا للاستخدام كبرنامج مستقل عن الفيجوال بيسك
يقوم البرنامج برسم المقطع التالي :





نسألكم الدعاء لي و لوالدي خصوصا في هذه الايام الفضيلة و لكل المسلمين
يرجى تنصيب هذين البرنامجين لمتابعتي في الدروس حتى تكون الفائدة اكبر
​


----------



## سميرة عبد الله (1 نوفمبر 2011)

*الدرس الاول: التعرف على الفيجوال بيسك 6*

السلام عليكم :
نبدأ دروسنا بالتعرف على الفيجوال بيسك 6
بعد تنصيب البرنامج نقوم بفتحه فتظهر النافذة كما يلي :






نختار مشروع قياسي Standard ExEثم نضغط زر open
فتظهر النافذة التالية عليها اسما ء النوافذ التي تظهر فيها






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


----------



## اوغاريت (1 نوفمبر 2011)

السلام عليكم و رحمة الله
الشكر على هذه المساهمة المميزة
و لكن ارجو ان تكون مكتملة و ليس على شكل دروس منفصلة و متباعدة
و ذلك لتحقيق الفائدة المرجوة
و ان تكون من خلال ملف منفصل ( وورد او بي دي اف ) يتم تحميله للاستفادة منه بشكل افضل
مع الشكر الجزيل


----------



## سميرة عبد الله (1 نوفمبر 2011)

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


----------



## م/السيد الشيخ (1 نوفمبر 2011)

جزاكم الله خيرا واى مساعدة فى الفجول بيزك او سى ++ انا موجود وربنا يوفقكم


----------



## م/السيد الشيخ (1 نوفمبر 2011)

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


----------



## تامر شهير (1 نوفمبر 2011)

> نسألكم الدعاء لي و لوالدي خصوصا في هذه الايام الفضيلة و لكل المسلمين


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


----------



## نجانجا (1 نوفمبر 2011)

هذه المشاركة ذات صلة بملتقى المهندسين العرب : http://www.arab-eng.org/vb/showthread.php?t=293783#ixzz1cWrZnuyR

*يرجى تنصيب هذين البرنامجين لمتابعتي في الدروس حتى تكون الفائدة اكبر
​*​ 
اين البرنامجين ؟ ​


----------



## سميرة عبد الله (2 نوفمبر 2011)

السلام عليكم :
م/السيد الشيخ شكرا لتعاونكم و اذا رغب السادة المهندسين ان تبدؤوا 
بدروس مبسطة عن الفيجوال قبل ان ابدأ شرحي لتصميم البرنامج فعلى الرحب و السعة
لانني لن اتبحر ببرنامج الفيجوال بل ساشرح ما استخدمه منه 
بالنسبة للسيد ابو نجانجا البرنامجين هما :
الفيجوال بيسك 6 ويمكنكم تحميله من الرابط :
http://depositfiles.com/files/nwvtcd37k
و برنامج الاوتوكاد و اكيد كل مهندس عنده نسخة منه


----------



## سميرة عبد الله (2 نوفمبر 2011)

*الدرس الثاني: الربط مع الاوتوكاد*

السلام عليكم:
سوف نقوم في هذه المرحلة من المشروع باجراء ربط بين برنامجنا 
و برنامج الاوتوكاد و يمكن الربط مع اي برنامج موجود على حاسبنا 
مثل : الاكسل , الوورد .. الخ
و يكون الربط كما هو موضح في الصورة التالية :






اما برمجيا فيتم الربط عن طريق متحول يعبر عن تطبيق اوتوكاد 
يكتب الكود في النافذة المخصصة له ضمن احداث 
نكتب الكود الاول للبرنامج في حدث تحميل البرنامج وفق الخطوات التالية :
-ننقر بالماوس على سطح الفورم (form) فتظهر النافذة البرمجية لحدث التحميل form_load 
- نكتب فيها الكود التالي :


```
Private Sub Form_Load()
Dim acadapp As AcadApplication
 On Error Resume Next
 Set acadapp = GetObject(, "AutoCAD.Application")
 If Err Then
 Err.Clear
 Set acadapp = CreateObject("AutoCAD.Application")
 If Err Then
 MsgBox Err.Description
 Exit Sub
 End If
 End If
 acadapp.Visible = True
End Sub
```






شرح الكود :
نعرف في السطر الاول متحول acadapp على انه تطبيق من نوع اتوكاد AcadApplication
باقي الكود الى السطر ما قبل الاخير يعالج خطأ عدم وجود برنامج الاتوكاد او وجود اصدار غير متوافق مع الاصدار الذي نستخدمه و يعطي رسالة خطأ في كل حالة
عندما لا يوجد توافق في الاصدار يعطي الرسالة التالية :





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


----------



## hossamkatab (3 نوفمبر 2011)

استفسار بسيط هل اصدارات الاتوكاد الجديده يمكن ربطها بvisual basic ايضا


----------



## سميرة عبد الله (3 نوفمبر 2011)

hossamkatab قال:


> استفسار بسيط هل اصدارات الاتوكاد الجديده يمكن ربطها بvisual basic ايضا


نعم كل الاصدارات​


----------



## خالد الأزهري (3 نوفمبر 2011)

الموضوع للتثبيت


----------



## سميرة عبد الله (3 نوفمبر 2011)

*شرح بعض المفاهيم*

*[FONT=&quot]سوف احاول في هذا الدرس شرح كيف نعبر عن عناصر الاتوكاد [/FONT]**[FONT=&quot]
برمجيا في الفيجوال بيسك 
كما نعلم فان لكل عنصر في الاتوكاد اسم يعرف به فمثلا الخط يعبر عنه بـ line
و الدائرة Circle ..الخ
فعندما نعرف متحول في البرنامج فاننا نضيف للاسم في الاوتوكاد الكلمة Acad 
بمعنى لتعريف متحول خط نكتب العبارة التالية: 
[/FONT]*

```
[B][COLOR=black][FONT=&quot]Dim lineObj As AcadLine[/FONT][/COLOR][/B]
```
*[FONT=&quot]lineObj[/FONT]**[FONT=&quot]هو اسم اختياري [/FONT]**[FONT=&quot]
قس على ذلك كل التعاريف 
في مثالنا لابد من تحليل الشكل الى عناصره الاولية و كتابة كود لكل عنصر على حدى
و هذا هو الامر الرائع في البرمجة انها عبارة عن تجميع لبرامج جزئية مهما كان البرنامج ضخما 
يتألف الشكل من العناصر التالية :
1- الشكل الخارجي و هو [/FONT]**[FONT=&quot]Polyline [/FONT]*[FONT=&quot]
[/FONT]*[FONT=&quot] و من الممكن ان يكون مجموعة Lines [/FONT]*[FONT=&quot]
*2- الشكل الداخلي مضلع حوافه منحنية و هو شكل *[/FONT]*[FONT=&quot]Polyline [/FONT]*[FONT=&quot]
[/FONT][FONT=&quot]*مجمع من خطوط و اقواس
3- *[/FONT][FONT=&quot]*مجموعة Circles *[/FONT][FONT=&quot]* مهشرة من نوع*[/FONT][FONT=&quot]*Gradient *[/FONT][FONT=&quot]*
4- خطي بعد DimaAigned
5- خطوط lines
6- نص text عدد 2 
سوف نبدأ باذن الله كتابة اول كود في هو رسم Polyline 
من صندوق الادوات نضع زر CommandButton
و ذلك بالنقر عليه بالماوس مرتين ثم نعدل مكانه بالسحب بالماوس و من خاصية caption
نكتب اسم الزر رسم مقطع كما في الشكل :





سوف نكتب كود رسم Polyline في حدث النقر على الزرCommand1_Click و ذلك بالنقر على الزر مرتين فتظهر نافذة الكود :





ملاحظة : يوجد نوعان للبولي لاين 2D polyline و 3D polyline
الفرق بينهما هو الاحداثي Z حيث يهمل في المستوي و هذا يساعدنا في الشكل المكون من عدد كبير من النقاط
لتقليل ابعاد المصفوفة التي نخزن فيها احداثيات النقاط المشكلة لـ *[/FONT][FONT=&quot]*polyline 
كيف نحدد عدد عناصر المصفوفة ؟
اذا كان شكل مكون من 3 نقطة فكل نقطة تحتاج لاحداثيين اي عدد الاحداثيات =3*2=6
و بما اننا نبدأ العد من الصفر في المصفوفة فاننا نطرح من العدد 1 اي يصبح عدد عناصر المصفوفة 6-1=5
هذا الكود ارجو تجريبه و سوف اقوم بشرحه بالتفصيل الدرس القادم باذن الله
*[/FONT]

```
Dim acadapp As AcadApplication
Dim anobg As Object
On Error Resume Next
'هل التطبيق موجود مسبقاً
Set acadapp = GetObject(, "autocad.application")
If Err Then
   Err.Clear
   ' إنشاء تطبيق أوتوكاد
  Set acadapp = CreateObject("autocad.application")
   If Err Then
    MsgBox Err.Description
    Exit Sub
   End If
  End If
Dim x As Double
Dim y As Double
x = InputBox("x", "أدخل قيمة x")
y = InputBox("y", "أدخل قيمة y")
Dim plineObj As AcadLWPolyline
Dim points(0 To 9) As Double
    ' Define the 2D polyline points
    points(0) = 0: points(1) = 0
    points(2) = x: points(3) = 0
    points(4) = x: points(5) = y
    points(6) = 0: points(7) = y
    points(8) = 0: points(9) = 0
    ' Create a lightweight Polyline object in model space
    Set plineObj = acadapp.ActiveDocument.ModelSpace.AddLightWeightPolyline(points)
```


----------



## م/السيد الشيخ (3 نوفمبر 2011)

للمساعدة هذا رابط portable visual basic بمساحة 5 ميجا فقط للتسهيل لمن ليس عنده البرنامج
http://www.mediafire.com/?p76kzo3zzdjgx2m


----------



## سميرة عبد الله (4 نوفمبر 2011)

*شرح الكود*

*سوف نقوم بشرح هذا الجزء من الكود :


كود:


Dim x As Double
Dim y As Double
x = InputBox("x", "input x")
y = InputBox("y", " input  y")
Dim plineObj As AcadLWPolyline
Dim points(0 To 9) As Double
    ' Define the 2D polyline points
    points(0) = 0: points(1) = 0
    points(2) = x: points(3) = 0
    points(4) = x: points(5) = y
    points(6) = 0: points(7) = y
    points(8) = 0: points(9) = 0
    ' Create a lightweight Polyline object in model space
    Set plineObj = acadapp.ActiveDocument.ModelSpace.AddLightWeightPolyline(points)

نقوم بتعريف متحول x , y من نوع Double
يتم ادخال قيمتهما من خلال صندوق حوار InputBox كما في الصورة :






يمكن ايضا ربط هذه القيمة بخانة نص من صندوق الادوات TextBox
المهم يقوم البرنامج بتخزين القيمة المدخلة من قبل المستخدم في المتحول الموافق
نقوم بتعريف متحول plineObj من نوع AcadLWPolyline 
كما نعرف مصفوفة points ابعادها نحسبها كما شرحت سابقا 
حيث اننا لرسم شكل رباعي مغلق الى 5 نقاط ( النقطة الاخيرة هي ذاتها الاولى )
فيكون عدد ابعاد المصفوفة 5*2-1=9
ملاحظة :يمكن الاكتفاء بـ 4 نقاط لرسم Polyline و بعد رسمه نكتب الكود التالي :


كود:


plineObj.Closed=True

نكتب احداثيات النقاط المكونة للشكل كما هو موضح في الكود حيث اعتمدنا 0,0 مبدأ الاحداثيات لسهولة العمل و يمكن البدء من اي نقطة مرجعية 
السطر الاخير هو تعليمة رسم الشكل في Model Space
كل تعليمات الرسم في الاتوكاد تبدأ بـ Set ثم اسم المتحول المعرف بعدها 
acadapp.ActiveDocument.ModelSpace.Add =
الكلمة Add متصلة مع كل اسم عنصر مرسوم مثلا
لرسم خط AddLine 
لرسم دائرة AddCircle 
.
.
الخ
و لكن لكل عنصر بيانات يجب تحديدها فلرسم خط نحتاج احداثيات البداية و احداثيات النهاية 
و الدائرة تتعين باحداثيات مركزها و نصف قطرها .... و هكذا
يرجى تجريب البرنامج و اذا كانت الامور تسير على ما يرام 
ننتقل الى الدرس التالي و هو رسم الشكل الداخلي ذو الزوايا المنحنية




*


----------



## سميرة عبد الله (4 نوفمبر 2011)

*من أين نحضر الاكواد اللازمة في البرمجة؟*

*السلام عليكم :
لابد ان الكثير يطرح هذا السؤال و الجواب بسيط 
يوجد في الاوتوكاد ملف Help ولتسهيل البحث فقد ادرجت الملف الخاص بالبرمجة بالفيجوال بيسك و لكن هذه الاكواد يلزمها تعديل بسيط لنتمكن من استخدامها في برنامجنا 
حيث من الممكن نسخ هذه الاكواد الى برنامجنا و بتعديل بسيط تصبح جاهزة و هذا التعديل هو كالتالي :
كما لاحظتم عند رسم **[FONT=&quot]Polyline كتبنا الكود التالي:
[/FONT]*

```
[B][COLOR=black][FONT=&quot]Set plineObj = acadapp.ActiveDocument.ModelSpace.AddPolyline(points)[/FONT][/COLOR][/B]
```
*
و في ملف **Help ستجدونه على الشكل التالي :


كود:


Set plineObj = ThisDrawing.ModelSpace.AddPolyline(points)

نستبدل الكلمة ThisDrawing بـ **[FONT=&quot]acadapp.ActiveDocument
يرجى تجريب بعض الكودات للتدريب على هذا الامر 
[/FONT]*


----------



## خالد الأزهري (4 نوفمبر 2011)

سميرة عبد الله قال:


> *السلام عليكم :
> لابد ان الكثير يطرح هذا السؤال و الجواب بسيط
> يوجد في الاوتوكاد ملف Help ولتسهيل البحث فقد ادرجت الملف الخاص بالبرمجة بالفيجوال بيسك و لكن هذه الاكواد يلزمها تعديل بسيط لنتمكن من استخدامها في برنامجنا
> حيث من الممكن نسخ هذه الاكواد الى برنامجنا و بتعديل بسيط تصبح جاهزة و هذا التعديل هو كالتالي :
> ...



جزاكم الله خير..
واستاذنكم في اضافة هذا الكتاب

http://www.4shared.com/document/POqbrr3q/AutoCAD_2006_VBA.html






This book will help you take full advantage of the Visual Basic for Applications programming environment within AutoCAD 2006. Whether you want to automate routine tasks, or create sophisticated applications or design that can be generated programmatically, this book will empower you to make AutoCAD work for you.

This book is also suitable if you’re a power user who wants to make use of the advanced features of AutoCAD 2006 VBA, and you need a fast reference for the full AutoCAD object model. You’ll learn to run Autodesk design tasks in the embedded VBA environment. This book is loaded with source code examples, and gives you no matter your skill level the necessary tools to accomplish your AutoCAD 2006 automation tasks.


----------



## سميرة عبد الله (4 نوفمبر 2011)

*كتاب فيه شرح ممتع للفيجوال بيسك 6*

*السلام عليكم
اقدم هذا الكتاب الرائع و الذي عثرت عليه اثناء بحثي في الانترنت
اسلوبه جميل في شرح هذا البرنامج
اتمنى الفائدة للجميع
*


----------



## سميرة عبد الله (4 نوفمبر 2011)

*كيفية ربط ابعاد المستطيل X,Y بخانة نص TextBox*

*السلام عليكم 
في الرابط شرح فيديو لكيفية ادخال الابعاد X,Y 
في خانة نص في البرنامج 
ارجو ان يكون الشرح واضحا
*http://www.gulfup.com/X99ijxsl41nggck* 
*


----------



## hiba.a (8 نوفمبر 2011)

سميرة عبد الله قال:


> *السلام عليكم
> في الرابط شرح فيديو لكيفية ادخال الابعاد x,y
> في خانة نص في البرنامج
> ارجو ان يكون الشرح واضحا
> ...





مشكورة آنسة سميرة على هذا الشرح وبارك الله فيك 
تم تحميل الملف لكنه لم يعمل معي هل يوجد مشكلة في الملف ؟​


----------



## سميرة عبد الله (8 نوفمبر 2011)

يرجى تنصيب هذين الملفين ليفتح ملف الفيديو


----------



## تامر شهير (9 نوفمبر 2011)

*عودة الى المشاكة الثانية...



-ننقر بالماوس على سطح الفورم (form) فتظهر النافذة البرمجية لحدث التحميل form_load

أنقر للتوسيع...


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




يرجى تجريب البرنامج لنتابع في الدرس القادم كتابة اكواد البرنامج

أنقر للتوسيع...


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

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

*


----------



## سميرة عبد الله (10 نوفمبر 2011)

أبا حفص عمر قال:


> *عودة الى المشاكة الثانية...
> 
> 
> أختى الكريمة واستاذتى الفاضلة ..
> ...


نعم النقر يكون مرتين على سطح الفورم
لتجريب البرنامج اما بالضغط على f5
او يوجد مثلث صغير اسود في الشريط العلوي للفيجوال


----------



## سميرة عبد الله (10 نوفمبر 2011)

*رسم الشكل الداخلي*

*السلام عليكم 
الشكل الداخلي ايضا **[FONT=&quot]Polyline و لكن فيه خطوط و منحنيات**[FONT=&quot]
طريقة رسمه تشبه رسم الشكل السابق مع اضافة تطبيق انحناء على بعض الخطوط
يتم ترقيم قطع الشكل ابتاءا من الصفر حيث الخط الواصل من النقطة 0 الى 1 تأخذ
الرقم 0 و القطعة من 1 الى 2 تأخذ الرقم 1 .......... الخ






نحتاج في تطبيق الانحناء الى رقم القطعة و ظل زاوية الانحناء [/FONT]*[/FONT]*كما في الشكل:
*




*[FONT=&quot] يجب الانتباه الى بداية الرسم يجب ان تكون بعكس اتجاه عقارب الساعة
نضيف للشكل السابق قطع مستقيمة هي عبارة عن شطفات في الزوايا و ذلك لتطبيق الانحناء عليها لتصبح اقواس كما في الشكل:





بفرض ان كل شطفة مقدارها من الجهتين r نصف قطر الدائرة 
ارجو من المتابعين في الدروس كتابة الكود الخاص بهذا الشكل ثم بعد ذلك
اكمل الكود في الجزء الخاص بتطبيق اقواس عند الشطفات
و كتابة الكود تكون وفق المراحل التالية :.
1- ماهو عدد عناصر المصفوفة ؟
2- ما هي احداثيات النقاط للشكل ؟
لتنظيم العمل يرجى وضع جدول للاحداثيات لسهولة نقلها الى الكود
بانتظار حلولكم مع اعتبار 0,0 مبدأ الاحداثيات و البعدين x1,y1
و سنقوم فيما بعد التعديل على القيم حسب شكلنا المطلوب رسمه 
ارجو ان يكون الشرح واضحا 
*[/FONT]


----------



## سميرة عبد الله (13 نوفمبر 2011)

*كتابة كود الشكل الداخلي*

*السلام عليكم
سوف نكتب الكود على مراحل لفهمه 
1- نقوم بتعريف متحولات اضافية لابعاد الشكل الداخلي 
بالاضافة الى مقدار بعده عن الشكل الخارجي Polyline:
* *


كود:


Dim X1 As Double
Dim y1 As Double
Dim a As Double
Dim r As Double

**2 - نكتب كود يمكننا من ادخال قيمة a 
**


كود:


a = InputBox("a", "أدخل قيمة التغطية a")

**3 - نكتب كود يمكننا من ادخال قيمة نصف قطر الانحناء r 
**


كود:


r = InputBox("r", "أدخل قيمة نصف قطر القضيب r")

*​* 
4 - نربط القيم X1,y1 بالقيم X ,y كما في العلاقتين :
**


كود:


X1 = X - a
y1 = y - a

**5- نكتب كود رسم الشكل الداخلي يمكنكم استنتاج احداثيات النقاط بدلالة الرموز
علما ان عدد نقاط الشكل هي 8 نقطة (0 - 7 ) و نقوم بعمل اغلاق للشكل في النهاية 
يعني عدد عناصر المصفوفة 2*8-1=15
**


كود:


Dim plineObj1 As AcadLWPolyline
Dim points1(0 To 15) As Double
    ' Define the 2D polyline points
    points1(0) = 0: points1(1) = r
    points1(2) = r: points1(3) = 0
    points1(4) = X1 - r: points1(5) = 0
    points1(6) = X1: points1(7) = r
    points1(8) = X1: points1(9) = y1 - r
    points1(10) = X1 - r: points1(11) = y1
    points1(12) = r: points1(13) = y1
    points1(14) = 0: points1(15) = y1 - r
    ' Create a lightweight Polyline object in model space
    Set plineObj1 = acadapp.ActiveDocument.ModelSpace.AddLightWeightPolyline(points1)
plineObj1.Closed = True

**6- نقوم بتطبيق انحناء عند القطع 0,2,4,6 (كما شرحت سابق ) وفق الكود التالي :
**


كود:


Dim currentBulge As Double
currentBulge = plineObj1.GetBulge(3)
plineObj1.SetBulge 0, 0.5
plineObj1.SetBulge 2, 0.5
plineObj1.SetBulge 4, 0.5
plineObj1.SetBulge 6, 0.5

**عند تجريب البرنامج سوف تجدون ان الشكلين ملتصقين من جهة مبدأ الاحداثيات 
لذا فاننا نقوم بعمل Move تحريك للشكل الداخلي في الاتجاهين X ,y القيمة **a**/2 
7- كود التحريك Move:
**


كود:


Dim point1(0 To 2) As Double
Dim point2(0 To 2) As Double
point1(0) = 0: point1(1) = 0: point1(2) = 0
point2(0) = a / 2: point2(1) = a / 2: point2(2) = 0
plineObj1.Move point1, point2

**طبعا نضيف هذا الكود الى الكود السابق و نجرب البرنامج
ارجو ان يكون الشرح واضحا *​


----------



## سميرة عبد الله (15 نوفمبر 2011)

*اضافة العكفات للاترية( link)*

*السلام عليكم 
اود في البداية الى تنبيه هام حول الكود السابق 
ان القيمة a المدخلة يجب ان تكون ضعف التغطية 
و قد قمت بالتعديل على الكود لجعل القيمة المدخلة هي التغطية
فيصبح الكود عل الشكل التالي :
**


كود:


Dim X1 As Double
Dim y1 As Double
Dim a As Double
Dim r As Double
a = InputBox("a", "input a")
r = InputBox("r", "input  r")
X1 = X - 2 * a
y1 = y - 2 * a
Dim plineObj1 As AcadLWPolyline
Dim points1(0 To 15) As Double
    ' Define the 2D polyline points
    points1(0) = 0: points1(1) = r
    points1(2) = r: points1(3) = 0
    points1(4) = X1 - r: points1(5) = 0
    points1(6) = X1: points1(7) = r
    points1(8) = X1: points1(9) = y1 - r
    points1(10) = X1 - r: points1(11) = y1
    points1(12) = r: points1(13) = y1
    points1(14) = 0: points1(15) = y1 - r
    ' Create a lightweight Polyline object in model space
    Set plineObj1 = acadapp.ActiveDocument.ModelSpace.AddLightWeightPolyline(points1)
plineObj1.Closed = True
Dim currentBulge As Double
currentBulge = plineObj1.GetBulge(3)
plineObj1.SetBulge 0, 0.5
plineObj1.SetBulge 2, 0.5
plineObj1.SetBulge 4, 0.5
plineObj1.SetBulge 6, 0.5
plineObj1.Color = acBlue
Dim point1(0 To 2) As Double
Dim point2(0 To 2) As Double
point1(0) = 0: point1(1) = 0: point1(2) = 0
point2(0) = a: point2(1) = a: point2(2) = 0
plineObj1.Move point1, point2

**- رسم العكفات ( الخطين المائلين في زاوية الشكل الداخلي )
- المستقيم الاول :
**[FONT=&quot]نرسم مستقيم يبدأ من النقطة 7 في الشكل الداخلي و يتجه نحو الاسفل عكس المحور [/FONT][FONT=&quot]y[/FONT][FONT=&quot] بطول [/FONT][FONT=&quot]L[/FONT]*​* [FONT=&quot]1- نقوم بادخال طول المستقيم 
[/FONT]**


كود:


Dim l As Double
l = InputBox("l", "input  l")

**2- نوجد احداثيات النقطة 7 لاننا حركنا الشكل كما يلي :
نعرف متحول من نوع Variant ثم نخزن فيه احداثيات النقطة رقم 7 من Polyline
**


كود:


Dim coord As Variant
coord = plineObj1.Coordinate(7)

*​
*3- نرسم الخط :
**


كود:


Dim lineObj As AcadLine
    Dim startPoint(0 To 2) As Double
    Dim endPoint(0 To 2) As Double
   startPoint(0) = coord(0): startPoint(1) = coord(1): startPoint(2) = 0#
    endPoint(0) = coord(0): endPoint(1) = coord(1) - l: endPoint(2) = 0# 
    Set lineObj = acadapp.ActiveDocument.ModelSpace.AddLine(startPoint, endPoint)

**[FONT=&quot]3- نقوم بعمل تدوير لهذا المستقيم بزاوية 45 درجة عكس عقارب الساعة 
[/FONT]*
*[FONT=&quot]ملاحظة[/FONT][FONT=&quot] اشارة الزاوية في التدوير تكون موجبة عندما يكون التدوير عكس عقارب الساعة[/FONT]*​
*[FONT=&quot]نحتاج لاجراء التدوير تحديد نقطة التدوير و زاوية التدوير[/FONT]*​
*[FONT=&quot]في مثالنا نقطة التدوير هي بداية المستقيم و زاوية التدوير 45+ درجة[/FONT]*​* [FONT=&quot]كود التدوير:
[/FONT]**


كود:


Dim rotationAngle As Double
    rotationAngle = 45 * 3.14 / 180 ' 45 degrees
    lineObj.Rotate startPoint, rotationAngle
lineObj.Color = acBlue

**لرسم المستقيم الثاني نتبع الطريقة السابقة مع الانتباه الى اخذ النقطة رقم 6
و زاوية الدوران سالبة =-45 و الخط يرسم باتجاه X
فيكون الكود للمستقيم الثاني :
**


كود:


coord = plineObj1.Coordinate(6)
startPoint(0) = coord(0): startPoint(1) = coord(1): startPoint(2) = 0#
    endPoint(0) = coord(0) + l: endPoint(1) = coord(1) : endPoint(2) = 0#
    Set lineObj = acadapp.ActiveDocument.ModelSpace.AddLine(startPoint, endPoint)
Dim rotationAngle As Double
    rotationAngle = -45 * 3.14 / 180 ' 45 degrees
    lineObj.Rotate startPoint, rotationAngle
lineObj.Color = acBlue

*​*الشكل النهائي الناتج :




*​


----------



## سميرة عبد الله (23 نوفمبر 2011)

*رسم قضبان التسليح*

السلام عليكم 
في هذا الدرس سوف نقوم برسم قضبان التسليح المهشرة 
كود التهشير :


```
Dim hatchObj As AcadHatch
    Dim patternName As String
    Dim PatternType As Long
    Dim bAssociativity As Boolean
```
1- نعرف متحول hatchObj من نوع تهشير في الاتوكاد 
2- نعرف متحول patternName من نوع نص لتحديد اسم التهشير
3- نعرف متحول PatternType لتحديد شكل التهشير ( تلوين او اشكال )
4- نعرف متحول bAssociativity من نوع المنطقي يحتمل قيمتين True او False

```
patternName = "CYLINDER"
    PatternType = acPreDefinedGradient '0
    bAssociativity = True
    ' Create the associative Hatch object in model space
    Set hatchObj = acadapp.ActiveDocument.ModelSpace.AddHatch(PatternType, patternName, bAssociativity, acGradientObject)
```
- نعطي هذه المتحولات قيم و قد اخترنا نمط التهشير acPreDefinedGradient ( تلوين )
اسناد هذه القيم الى صيغة التهشير Set hatchObj
بما ان اخترنا التلوين فاننا نعرف اللون الذي سنستخدمه 
- كود اختيار اللون و اسناده الى التهشير:

```
Dim col1 As AcadAcCmColor, col2 As AcadAcCmColor
    Set col1 = AcadApplication.GetInterfaceObject("AutoCAD.AcCmColor")
    Set col2 = AcadApplication.GetInterfaceObject("AutoCAD.AcCmColor")
    Call col1.SetRGB(50, 50, 50)
    Call col2.SetRGB(0, 50, 0)
    hatchObj.GradientColor1 = col1
    hatchObj.GradientColor2 = col2
```
يمكن تغيير الارقام من 0 - 255 لنحصل على اللون الذي نريد 
- سوف نرسم المقطع الدائري ثم نطبق عليه التهشير و يمكنم تطبيق التهشير دون رسم الشكل
كود رسم دائرة :
نحتاج لرسم دائرة الى معرفة احداثيات المركز و نصف القطر 
سوف نرسم الدائرة السفلية القريبة من مبدأ الاحداثيات و اترك للسادة المهندسين
رسم باقي الدوائر

```
Dim circleObj As AcadCircle
 Dim centerPoint(0 To 2) As Double
    Dim radius As Double
    centerPoint(0) = a + r: centerPoint(1) = a + r: centerPoint(2) = 0#
    radius = r
    Set circleObj = acadapp.ActiveDocument.ModelSpace.AddCircle(centerPoint, radius)
```
كود تلوين الدائرة 

```
Dim outerLoop(0 To 0) As AcadEntity
        Set outerLoop(0) = acadapp.ActiveDocument.ModelSpace.AddCircle(centerPoint, radius)
    hatchObj.AppendOuterLoop (outerLoop)
    hatchObj.Evaluate
    acadapp.ActiveDocument.Regen True
```
ارجو ان يكون الشرح واضحا 
النتيجة :




​


----------



## المهندس ابوعمر (23 نوفمبر 2011)

جزاكم الله خيرا


----------



## كيرو عبده (24 نوفمبر 2011)

وما مدى الأستفادة من استخدام البيزك للكاد


----------



## سميرة عبد الله (24 نوفمبر 2011)

يرجى الاطلاع على هذا الموقع http://www.sw4all.com
و فيه برامج مصممة بهذه الطريقة و اترك لكم الحكم


----------



## عمر عبد السلام (6 ديسمبر 2011)

مشكور


----------



## anass81 (9 ديسمبر 2011)

السلام عليكم

جزى الله المهندسة سميرة عنا خيراً على هذا الشرح الممتاز

سوف يتم فك التثبيت عن الموضوع الى حين معاودة النشاط مرة ثانية


----------



## سميرة عبد الله (20 ديسمبر 2011)

اعتذر من السادة المتابعين في الدورة
منذ مدة طويلة لم استطع فتح صفحة المنتدى 
اليوم فتحت معي , ان شاء الله سوف اتابع في هذا الموضوع
دعاؤكم لنا بتيسير هذا الامر


----------



## فواز العنسي (5 سبتمبر 2012)

الله يكتب لك الاجر


----------



## sami az (31 مارس 2013)

السلام عليكم 
الاخت العزيزة بارك الله بالجهود 
انا اليوم اطلعت على موظوعك وكذلك كتابك ولكن بشكل مختصر
وانا بحاجة كبيره لهذا الموظوع وقد وجدت ضالتي فانا كنت افكر في تصميم جزء ميكانيكي
واود ان اسالكي هذا السؤال
هل يمكن ان ارسم اي جزء ميكانيكي اعتمادا على الابعاد التي استنتجها التصميم من خلال الفيجوال بيسك
يعني الاسكال والابعاد من الفيجوال والرسم بالاوتوكاد بحيث اذا صممت اكير بوكس مثلا احصل على النتائج من الفيجوال وارسم بالاوتوكاد
ارجو الاجابة مع فائق الشكر والتقدير


----------



## سميرة عبد الله (31 مارس 2013)

يمكن ذلك و الكتاب الذي قمت بتأليفه في هذا المجال
يحتوي امثلة متنوعة تثبت قدرة الفيجوال مع الاتوكاد في تصميم برامج رائعة


----------



## اسلام الكبابى (14 ديسمبر 2013)

*بارك الله فيك يا باشمهندسة
وزادك من علمه*


----------



## اسلام الكبابى (15 يوليو 2019)

هناك برنامج اسمه AutoCAD Architecture لايرسم فقط خطوط ودوائر وغير ذلك 
ولكن يرسم محاور وأعمدة وحوائط وسلالم رسمآ مباشرآ
فهل يمكن ربط الفيجوال بيسك6 بهذا الرنامج ؟
وان كان ممكنآ فما كود رسم المحاور (مثلآ 4محاور أفقية و6 محاور رأسية)
وكود رسم عمود معين على نقطة نفاطع المحورين (5و2) مثلآ
ولك ألف شكر


----------



## اسلام الكبابى (15 يوليو 2019)

هناك برنامج اسمه <a href="http://www.absba.org/showthread.php?t=883430" target="_blank" rel="nofollow">AutoCAD Architecture</a> لايرسم فقط خطوط ودوائر وغير ذلك
<br>ولكن يرسم محاور وأعمدة وحوائط وسلالم رسمآ مباشرآ<br>فهل يمكن ربط الفيجوال بيسك6 بهذا الرنامج ؟<br>وان كان ممكنآ فما كود رسم المحاور (مثلآ 4محاور أفقية و6 محاور رأسية)<br>وكود رسم عمود معين على نقطة نفاطع المحورين (5و2) مثلآ<br><font size="5">ولك ألف شكر</font>


----------



## اسلام الكبابى (15 يوليو 2019)

هناك برنامج اسمه AutoCAD Architecture لا يرسم فقط خطوط ودوائر وغير ذلك
ولكن يرسم محاور وأعمدة وحوائط وسلالم رسمآ مباشرآ
فهل يمكن ربط الفيجوال بيسك6 بهذا الرنامج ؟
وان كان ممكنآ فما كود رسم المحاور (مثلآ 4محاور أفقية و6 محاور رأسية)
وكود رسم عمود معين على نقطة تقاطع المحورين (5و2) مثلآ
ولك ألف شكر


----------



## سميرة عبد الله (17 أغسطس 2019)

السلام عليكم
لم اتعامل مع AutoCAD Architecture ولكن اعتقد انه يقبل الربط مع الفيجوال 
رسم المحاور سهلة يمكنك وضع شبكة تدخل فيها تباعدات المحاور وبامر واحد يرسم المحاور دفعة واحدة 

وكود الرسم يكون :

```
[LEFT]Private Sub Command1_Click()[/LEFT]
  [LEFT]Dim acadapp As AcadApplication[/LEFT]
  [LEFT]Dim anobg As Object[/LEFT]
  [LEFT]On Error Resume Next[/LEFT]
  [LEFT]' هل التطبيق موجود مسبقا[/LEFT]
  [LEFT]Set acadapp = GetObject(, "autocad.application")[/LEFT]
  [LEFT]If Err Then[/LEFT]
  [LEFT]   Err.Clear[/LEFT]
  [LEFT]   ' autocad انشاء تطبيق [/LEFT]
  [LEFT]  Set acadapp = CreateObject("autocad.application")[/LEFT]
  [LEFT]  If Err Then[/LEFT]
  [LEFT]    MsgBox Err.Description[/LEFT]
  [LEFT]    Exit Sub[/LEFT]
  [LEFT]  End If[/LEFT]
  [LEFT]  End If[/LEFT]
  [LEFT]Dim acadlin As acadline[/LEFT]
  [LEFT]    Dim textObj As AcadText[/LEFT]
  [LEFT]    Dim textString As String[/LEFT]
  [LEFT]    Dim starP(0 To 2) As Double[/LEFT]
  [LEFT]    Dim height As Double[/LEFT]
  [LEFT]Dim circleObj As AcadCircle[/LEFT]
  [LEFT]    Dim center(0 To 2) As Double[/LEFT]
  [LEFT]    Dim radius As Double[/LEFT]
  [LEFT]If Data1.Recordset.RecordCount <> 0 Then[/LEFT]
    [LEFT]End If[/LEFT]
  [LEFT]acadapp.WindowState = acMax[/LEFT]
  [LEFT]Me.WindowState = 1[/LEFT]
  [LEFT]X = 0[/LEFT]
  [LEFT]For i = 1 To Grid1.Rows - 1[/LEFT]
  [LEFT]X = X + Val(Grid1.TextMatrix(i, 2))[/LEFT]
    [LEFT]Next i[/LEFT]
  [LEFT]Y = 0[/LEFT]
  [LEFT]For i = 1 To Grid2.Rows - 1[/LEFT]
  [LEFT]Y = Y + Val(Grid2.TextMatrix(i, 2))[/LEFT]
    [LEFT]Next i[/LEFT]
  [LEFT]starP(0) = 0: starP(1) = Y + 0.5: starP(2) = 0[/LEFT]
  [LEFT]endP(0) = 0: endP(1) = 0: endP(2) = 0[/LEFT]
  [LEFT]Set acadlin = acadapp.ActiveDocument.ModelSpace.AddLine(starP, endP)[/LEFT]
  [LEFT]        center(0) = 0: center(1) = Y + 1: center(2) = 0[/LEFT]
  [LEFT]    radius = 0.5[/LEFT]
  [LEFT]    Set circleObj = acadapp.ActiveDocument.ModelSpace.AddCircle(center, radius)[/LEFT]
  [LEFT]    textString = Grid1.TextMatrix(1, 1)[/LEFT]
  [LEFT]    height = 0.25[/LEFT]
  [LEFT]    Set textObj = acadapp.ActiveDocument.ModelSpace.AddText(textString, center, height)[/LEFT]
    [LEFT]X1 = 0[/LEFT]
  [LEFT]For i = 1 To Grid1.Rows - 1[/LEFT]
  [LEFT]X2 = Val(Grid1.TextMatrix(i, 2))[/LEFT]
  [LEFT]starP(0) = X1 + X2: starP(1) = Y + 0.5: starP(2) = 0[/LEFT]
  [LEFT]endP(0) = X1 + X2: endP(1) = 0: endP(2) = 0[/LEFT]
  [LEFT]Set acadlin = acadapp.ActiveDocument.ModelSpace.AddLine(starP, endP)[/LEFT]
  [LEFT] If Grid1.TextMatrix(i + 1, 2) <> "" Then[/LEFT]
  [LEFT]        center(0) = X1 + X2: center(1) = Y + 1: center(2) = 0[/LEFT]
  [LEFT]    radius = 0.5[/LEFT]
  [LEFT]    Set circleObj = acadapp.ActiveDocument.ModelSpace.AddCircle(center, radius)[/LEFT]
  [LEFT]    textString = Grid1.TextMatrix(i + 1, 1)[/LEFT]
  [LEFT]    height = 0.25[/LEFT]
  [LEFT]    Set textObj = acadapp.ActiveDocument.ModelSpace.AddText(textString, center, height)[/LEFT]
  [LEFT] End If[/LEFT]
  [LEFT] X1 = X1 + X2[/LEFT]
  [LEFT]Next i[/LEFT]
  [LEFT]starP(0) = -0.5: starP(1) = 0: starP(2) = 0[/LEFT]
  [LEFT]endP(0) = X: endP(1) = 0: endP(2) = 0[/LEFT]
  [LEFT]Set acadlin = acadapp.ActiveDocument.ModelSpace.AddLine(starP, endP)[/LEFT]
  [LEFT]        center(0) = -1: center(1) = 0: center(2) = 0[/LEFT]
  [LEFT]    radius = 0.5[/LEFT]
  [LEFT]    Set circleObj = acadapp.ActiveDocument.ModelSpace.AddCircle(center, radius)[/LEFT]
  [LEFT]    textString = Grid2.TextMatrix(1, 1)[/LEFT]
  [LEFT]    height = 0.25[/LEFT]
  [LEFT]    Set textObj = acadapp.ActiveDocument.ModelSpace.AddText(textString, center, height)[/LEFT]
  [LEFT]'acadlin.Linetype=[/LEFT]
  [LEFT]Y1 = 0[/LEFT]
  [LEFT]For i = 1 To Grid2.Rows - 1[/LEFT]
  [LEFT]Y2 = Val(Grid2.TextMatrix(i, 2))[/LEFT]
  [LEFT]starP(0) = -0.5: starP(1) = Y1 + Y2: starP(2) = 0[/LEFT]
  [LEFT]endP(0) = X: endP(1) = Y1 + Y2: endP(2) = 0[/LEFT]
  [LEFT]Set acadlin = acadapp.ActiveDocument.ModelSpace.AddLine(starP, endP)[/LEFT]
  [LEFT] If Grid2.TextMatrix(i + 1, 2) <> "" Then[/LEFT]
  [LEFT]        center(0) = -1: center(1) = Y1 + Y2: center(2) = 0[/LEFT]
  [LEFT]    radius = 0.5[/LEFT]
  [LEFT]    Set circleObj = acadapp.ActiveDocument.ModelSpace.AddCircle(center, radius)[/LEFT]
  [LEFT]    textString = Grid2.TextMatrix(i + 1, 1)[/LEFT]
  [LEFT]    height = 0.25[/LEFT]
  [LEFT]    Set textObj = acadapp.ActiveDocument.ModelSpace.AddText(textString, center, height)[/LEFT]
  [LEFT] End If[/LEFT]
    [LEFT] Y1 = Y1 + Y2[/LEFT]
  [LEFT]Next i[/LEFT]
  [LEFT]acadapp.ZoomExtents[/LEFT]
    [LEFT]End Sub [/LEFT]
```

بالنسبة لرسم عمود يمكن الاستعانة باختيار نقطع توضع العمود مباشرة على الرسم


----------

