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")
- في شاشة ال console اكتب الأمر التالي:
(vlisp-compile '1sa "d:/try.lsp" "d:/try.fas")
حيث المسار الأول الأول مسار الملف المرغوب تشفيره والثاني مسار الملف المشفر
او اشترك في القائمة البريدية 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
هل الرقم المعطى سالب ام لا
اذا كان سالب تعطي
جزاك الله خيرا
ردحذفلم اجد على النترنت شرحا بالغة العربية سوى شرحك
جزاك الله خيرا
وعوضك عن الوقت الذي الذي بذلته لصنع هذا الشرح خيرا
اللهم اغفر لي ولاخي
السلام عليكم و رحمة الله
ردحذفبجد الشرح ممتاز
وربنا يوفقك يا عمر
أخوك ............ مصطفى تقي
و عليكم السلام و رحمه الله
ردحذفجزاكم االله خيرا و وفقك لما تحب و ترضي
اخوك عمر سليم
السلام عليكم عندي ليسب كان شغال تمام عندى ةمش عارف ايش اللي حصل كل ما احملوووو على الكاد تظهررر الرسالة دى Pick Insertion point; error: bad argument type: stringp nil
ردحذف