AUTOLISPمقدمة لتعلم ال


AUTOLISPمقدمة لتعلم ال



هي احدى لغات البرمجة الخاصة بشركة Autodesk   , مثلها مثل VBA ،. ObjectARX و هي تعطي قوة للاتوكاد , و تمكنك من الرسم بسرعة , و اختصار الخطوات و توفير الوقت.

كل ما يمكنك فعله في الاتوكاد , يمكنك بكل سهولة أن تفعله بالاتوليسب مزيدا لانتاجك .

Lisp is a programmable programming language.

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

, و كان اول ظهور لل AUTOLISP  في النسخة AUTOCAD  2.18 في  شهر يناير 1986.

و هي اختصار

LISt Processing.



Or LISt Programming

و يقال انها اختصار

"Lots of Stupid Parentheses". 



و هي لغة

interpreted. بمعنى انها عكس الفيجوال بيسك لا يتم compiled لها .






لتحميل الليسب



من قائمة  TOOLS  أختر



LOAD APPLICATION











اختر الليسب ثم  LOAD





و لجعل الليسب يحمل تلقائيا مع الاتوكاد في كل مره يعمل : أختر



CONTENTS











او اكتب aapload  في سطر الاوامر





Command: appload





و لكتابه اوامر تعمل عند بداية التشغيل نضعها في ملف acad.lsp   او  acaddoc.lsp و هو ملف يبحث عنه الاتوكاد عند بداية التشغيل في مسارات support



قواعد لغة autolisp

1)لا تفرق لغة الاتوليسب بين الحروف الكبيرة و الصغيرة .

2) تكتب لغة الاتوليسب في اقواس و لا بد ان يكون عدد الاقواس اليمنى مساوي لعدد الاقواس اليسرى و يتم التعامل مع الاقواس الداخلية اولا .



Command: (* (+ 3 4) (+ 2 5))

49



في حالة ترك قوس مفتوح  فأن البرنامج يخبرك ان هناك اقواس ناقصة





Command: (* (+ 3 4) (+ 2 5)          

(_>





3) يتم كتابة الرمز او الداله اولا



Command: (+ 4 2)

6



4) المتغير يمكن ان يكون اي حرف او رقم ما عدا

- () '  ;  "  \

5) يجب ان تكون هناك مسافة بين الدالة و المتغير





Command: (+ 4 2)

6







Command: (+4 2)

; error: bad function: 4





6)  عند كتابة تعليق نكتب قبله علامة   ;





Command: (+ 4 2 ) ;coment

6







و الامتدادات لهذا الملف قد تكون:

Lsp المف العادي و يمكن تحريرة بالمفكره العادية بالويندوز

*.mnl

Vlx    Fas    ملف ليسب محول للغة الاله

و اذا كان لدينا ثلاث ملفات بنفس الاسم بالامتدادات السابقة فان الاتوكاد يحمل vlx  ثم  fas    ثم   lsp



و لتشفير ملف الليسب (و ان كنت لا انصح بهذا . لجعل المنفعة عامة )


- من قائمة tools إفتح visual lisp editor
-
في شاشة ال console اكتب الأمر التالي:
(vlisp-compile '1sa "d:/try.lsp" "d:/try.fas")
حيث المسار الأول الأول مسار الملف المرغوب تشفيره والثاني مسار الملف المشفر









اذا واجهتك مشاكل راسلني على ENGWEB@GMAIL.COM



او اكتبها في المدونة www.amrselim.net            



او اشترك في القائمة البريدية http://groups.google.com/group/DRAFTSMAN



عمرو سليم







البداية مع Autolist

1)يمكن كتابة الاوامر مباشرة في سطر الاوامر الخاص بالاتوكاد  command line

و يفهم الاتوكاد ان اي امر يبدأ بالاقواس  () هو يتبع لغة الاتوليسب







2) او كتابة الاوامر في ملف txt   مع تغير الامتداد من TXT  الى lsp

و هو المعتاد ليسهل تبادلها و التعديل بها .





و اذا كان الامتداد غير ظاهر نذهب الى   قائمة  tools ثم الى folder option







ثم نختار view



ثم نقوم بازاله علامة "صح" من امام السطر

Hide extensions for known file types





و الصيغة العامة



(defun c:اسم الداله(نكتب هنا المتغيرات الخاصه بالداله او يمكن تركها فارغه  )

نكتب هنا الدوال و الاوامر

)



و يفضل ان يكون اسم الداله هو نفس اسم الملف لتسهيل الامر و ليس شرطا .



مثال بسيط نقوم فيه برسم مستطيل (سيتم شرح المثال لاحقا)



(defun c:REC1()

(setq a (getpoint))

(setq b (getpoint))

 (command "rectangle"  a b)

)







3) الدخول الى بيئه برمجة visual lisp editor

و تعطي قوة للتعديل و معالجة الاخطاء

من قائمة Tools أخترAutolisp   ثم   Visual Lisp Editor




  

تظهر امامك شاشة VISUAL LISPFOR AUTOCAD










الدوال الحسابية:

الامثلة التالية  لشرح لغه الاتوليسب و يمكن كتابتها في سطر الاوامر مباشرة .





  • الجمع +

المثال التالي نجمع فية الرقم الاول على الرقم الثاني .

مع العلم اننا (عكس اكثر لغات البرمجة) نكتب علامة الجمع اولا



 Command: (+ 1 2)

3









  • الطرح -


 Command: (- 4 1)

3







Command: (- 4 4)

0



طرح رقم سالب من رقم موجب



Command: (- 4 -4)

8



عند طرح ثلاث ارقام يتم طرح الرقم الثاني من الاول ثم طرح الثالث من الناتج



Command: (- 9 4 2)

3







  • الضرب *

في هذا المثال نضرب الرقم الاول في الرقم الثاني .



Command: (* 4 10)

40



في المثال التالي نضرب ثلاث ارقام في بعض .





Command: (* 3 7 100)

2100





ضرب رقم موجب في رقم سالب



Command: (* 2 -3)

-6







  • القسمة /

قسمة رقم على اخر



 Command: (/ 21 3)

7





و عند قسمة ثلاث ارقام يتم قسمة الاول على الثاني , ثم يتم قسمه ناتج القسمه على الرقم الثالث



Command: (/ 8 4 2)

1





مثال اخر



Command: (/ 22 3)

7





في المثال السابق نجد ان لغة الاتوليسب تجاهلت الكسور حيث ان القسمة كانت بين رقمين حقيقين integer

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



Command: (/ 21.2 3)

7.06667





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



Command: (/ 2 4)

0





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



Command: (/ 2.1 4)

0.525





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



Command: (* .2 5)

; Error: misplaced dot on input



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



Command: (+2 5)

; Error: no function definition: *2





المثال التالي يشرح اهمية الاقواس و ترتيب العمليات  . حيث ان البرنامج يقوم بحل ما داخل الاقواس  اولا (و هو ما يسمى التعشيش)فيجمع 5 مع 6 ثم يضربها في 3 لينج لنا 11



Command: (* 3(+ 5 6))

33







  • دالة اضافة واحد

و هي داله مستقله تضيف رقم واحد الى العدد





Command: (1+ 6)

7







و عند كتابه رقم أخر غير الواحد تظهر لي رساله تقول انه لا توجد داله معرفة بهذا الاسم 2+



Command: (2+ 6)

; Error: no function definition: 2+







  • دالة طرح واحد


Command: (1- 6)

5







  • دالة gcd

تقوم هذه الدالة باقتراح انسب رقم يقبل عليه الرقمين القسمة عليه



Command: (gcd 100 15)

5







  • الدالة zerop

للتأكد هل الناتج صفر ام لا .

في حاله الصفر يكون الناتج t

و في حاله غير هذا يكون الناتج nill



Command: (zerop 0)

T









Command: (zerop 9)

Nil




  • الدالة abs

و تعطي القيمة المطلقة للرقم (تقلب السالب لموجب)



Command: (abs -4)

4







Command: (abs 4)

4







  • الدالة exp

و تعطي القيمة الاسيه



Command: (exp 1)

2.71828







Command: (exp 4)

54.5982



و عند اعطاء البرنامج عدد من المتغيرات يخالف المتوقع تظهر لنا رساله الخطأ التالية



Command: (exp 5 2)

; Error: too many arguments









  • الدالة EXPT

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



Command: (expt 2 3)

8









  • الدالة    ّ

و تعطينا المتمم للعدد

The bitwise NOT (1's complement) of the argument.



Command: (~ 4)

-5







Command: (~ -4)

3









  • الدالة MAX

و هي تعطينا الرقم الاكبر



Command: (MAX 950 314)

950









  • الدالة MIN

و هي تعطينا الرقم الاصغر



Command: (MIN 3000 1000)

1000







  • الدالة REM

ايجاد REMINDER(المُذكر)    للارقام

المتبقي من القسمة



Command: (REM 3 4)

3







Command: (REM 4 4)

0



المتبقي من قسمة 6 على 4





Command: (REM 6 4)

2









Command: (rem 42 16)

10







  • الدالة FIX

تقريب لاقرب عدد صحيح و الغاء الكسور



Command: (FIX 3.2)

3

Command: (FIX 3.7)

3







  • الدالة FLOAT



تحول العدد الى كسر



Command: (FLOAT 3.2)

3.2







Command: (FLOAT 3)

3.0





و ربما يكون السؤال :ما هي الفائدة ؟



هل تذكر عندما نقسم عدد حقيقي على اخر حقيقي و كان البرنامج يتجاهل الكسور؟؟



Command: (/ 22 3)

7



تأمل المثال التالي عند استخدام الدالة FLOAT



Command: (/ (FLOAT 22) 3)

7.33333







  • الدالة LOG

ايجاد اللوغريتم



Command: (LOG 1)

0.0







Command: (LOG 10)

2.30259







Command: (LOG 2)

0.693147







  • الدالة SQRT

و تعطينا الجذر التربيعي



Command: (SQRT 144)

12.0



و عند اعطائه رقم سالب , لا يتعرف عليه , و يعطينا رساله خطأ.



Command: (sqrt -4)

; error: function undefined for argument: -4







  • دالة sin

و تعطينا جا الزاوية

و يتم ادخال الزاوية القطرية و ليست الدائرية



 Command: (sin 165)

0.997797









  • دالة cos

و تعطينا جتا الزاوية

و يتم ادخال الزاوية القطرية و ليست الدائرية



  Command: (cos 165)

-0.0663369







  • دالة atan

و تعطينا ظل الزاوية

و في حالة اعطائها زاويتين فأنها تعطي ظل (حاصل قسمة الاولى على الثانية)



Command: (atan 1)

0.785398

Command: (atan 1 2)

0.463648







  • دالة angle

و تستخدم لايجاد الزاوية



Command: (angle '(1.0 1.0) '(1.0 4.0))

1.5708

Command: (angle '(5.0 1.33) '(2.4 1.33))

3.14159





او يمكن كتابتها بطريقة اخري بالاستعانة بداله getpoint



Command: (setq a (getpoint))

Command: (setq b (getpoint))

Command: (angle c b)

0.724992





دالة minusp

هل الرقم المعطى سالب ام لا

اذا كان سالب تعطي 


تعليقات

  1. جزاك الله خيرا

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

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

    ردحذف
  3. و عليكم السلام و رحمه الله
    جزاكم االله خيرا و وفقك لما تحب و ترضي
    اخوك عمر سليم

    ردحذف
  4. السلام عليكم عندي ليسب كان شغال تمام عندى ةمش عارف ايش اللي حصل كل ما احملوووو على الكاد تظهررر الرسالة دى Pick Insertion point; error: bad argument type: stringp nil

    ردحذف

إرسال تعليق

المشاركات الشائعة