مقدمة لتعلم ال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



او سحب الملف من Windows Explorer الى مساحة العمل بالاوتوكاد

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

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) المتغير يمكن ان يكون اي حرف او رقم ما عدا

- () ' ; " \

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

أمثلة على اسماء المتغيرات

AMRSELIM

WHOAMI

ENGWEB13

تعريف المتغير هو مساحة في الذاكرة محجوزة لقيمة متغيرة

مثلا س= ع +2

فعندما تكون ع= 3 اذن س = 5 و عندما تكون ع = 10 تكون قيمة س = 12

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

Command: (+
4 2)

6

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

Command: (+4 2)

; error: bad function: 4

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

;; مقدمة لمقطع في الليسب

; توضيح لجزء صغير

Command: (+ 4 2 ) ;comment

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

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

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

اذا كان موجب نعطي nil

Command: (minusp -1)

T

Command: (minusp 13)

nil

  • دالة inters

و تعطي نقطة تلاقي اربع نقط

Command: (inters a b c d)

(-443.205 399.475 0.0)

دوال المقارنة

و هي تعطينا t اذا كانت النتيجة صحيحة

و nillاذا كانت النتيجة خاطئه

  • يساوي =

Command: (= 3 3.0)

T

Command: (= 314 950)

nil

Command: (= "omar" "omar")

T

Command: (= "omar" "bush")

nil

عند اعطائه ثلاث قيم فيشترط تساوي الثلاث قيم

Command: (= "AHMED" "AHMED" "SHARON")

nil

  • علامة لا يساوي /=

Command: (/= "omar" "omar")

nil

Command: (/= "omar" "us")

T

Command: (< 10 20)

T

Command: (< 10 20 30)

T

Command: (< 3 4 5 5)

nil

اي الحرفين اولا

Command: (< "e" "t")

T

  • اصغر من او يساوي

Command: (<= 5 8)

T

  • الدالة eq

السلسلتين متساويين ام لا

اذا كانا متساوين يعطينا t

غير متساويين nil

Command: (setq a '(1 2) c '(2 3))

(2 3)

Command: (eq a c)

nil

Command: (setq a b)

(1 2)

Command: (eq a b)

T

  • الدالة equal

مقارنة بين سلسلتين
(setq f1 '(a b c)) 

(setq f2 '(a b c))

(setq f3 f2)

(setq a 1.123456)

(setq b 1.123457)

Command: (equal f1 f3)

T

Command: (equal f3 f2)

T

Command: (equal a b)

nil

الفرق بين a b هو 0.000001 فنقارن بين الفرق بين a b و 0.000001

Command: (equal a b 0.000001)

T

الدوال النصية

  • دالة SUBSTR

و هي لاظهار عدد معين من الاحرف من سلسله نصية

Command: (SUBSTR "MY NAME AMR SELIM" 9 3)

"AMR"

و تتكون من :

"" الجملة النصية.

9 بداية اقتصاص الحروف.

3 عدد الحروف المقتصة .

السلاسل الرقمية

مجموعة من القيم المتتالية

و يستخدم امر لتحدد

Command: (setq x1(list 1 2 3 4))

(1 2 3 4)

  • الدالة strcat

و هي تضم جملتين في جملة واحدة

(strcat " no god but allah " " Mohamed messenger of allah ")

"no god but allah Mohamed messenger of allah"

  • الدالة car

عرض اول رقم في السلسلة

Command: (car x1)

1

و يمكن استخدامه دون وجود سلسلة مكونه بأمر list

يمكن هذا بكتابه السلسله مباشرة مع سبقها بعلامه '

Command: (car '(3 4 5))

3

Command: (car '((3 4) 5))

(3 4)

Command: (car '())

nil

  • الدالة cadr

عرض ثاني رقم في السلسلة

Command: (cadr x1)

2

  • الدالة caddr

عرض ثالث رقم في السلسلة

Command: (caddr x1)

3

  • الدالة cdr

عرض السلسلة بدون الرقم الاول

Command: (cdr x1(

(2 3 4)

  • الدالة nth

عرض عنصر معين من السلسلة الرقمية مع العلم انه يبدأ بترقيم اول عنصر بصفر.

Command: (nth 4 '(2 5 4 7 9 6))

9

  • الدالة cons

اضافة عنصر لاول القائمة

Command: (cons 'a '(b c d))

(A B C D)

  • الدالة apply

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

Command: (apply '* '( 2 3 4 ))

24

Command: (apply 'strcat '("a" "b" "c"))

"abc"

  • دالة APEND

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

Command: (append '(a b c) '(d e f))

(A B C D E F)

Command: (append '((a) (b) (c)) '((d) (e) (f)))

((A) (B) (C) (D) (E) (F))

Command: (append '(egypt sudan) '(iraq syria) '(lebnan philsten) )

(EGYPT SUDAN IRAQ SYRIA LEBNAN PHILSTEN)

  • دالة reverse

و تقوم بعكس السلسلة الرقمية

Command: (setq a '(1 2 3 4 5 6))

(1 2 3 4 5 6)

Command: (reverse a)

(6 5 4 3 2 1)

  • دالة member

و هي تأخذ عنصر و اسم السلسلة الرقمية و تعطينا السلسلة الرقمية من اول هذا العنصر

Command: (setq a '(2 3 4 5 6))

(2 3 4 5 6)

Command: (member 4 a)

(4 5 6)

و في حالة اعطائها عنصر غير موجود في السلسلة الرقمية تعطينا nil

Command: (member 1 a)

nil

  • دالة listp

هل العنصر المعطى سلسلة رقمية ام لا

اذا كان سلسلة رقمية t

و اذا كان غير هذا nil

Command: (listp a)

T

Command: (listp t)

nil

  • دالة strlen

و تعيد عدد حروف الجملة بما فيها المسافات و الارقام و الرموز

Command: (strlen "destory israil")

14

دوال التحويل

  • دالة atof

لتحويل النص الى رقم حقيقي float
عند تخزين رقم مثل 314 على هيئه string فان العمليات الحسابية لا تؤثر عليه و لا يتجاوب معها .

Command: (atof "2.2")

2.2



  • دالة atoi

لتحويل النص الى رقم طبيعي
Command: (atoi"2.2")

2



  • دالة rtos

لتحويل الرقم الى نص

Command: (rtos 2)

"2"

  • دالة cvunit

التحويل من وحدة الى وحدة اخرى سواء وقت او وزن او طول او .......الخ

Command: (cvunit 1 "minute" "second")

60.0

Command: (cvunit 1 "gallon" "furlong")

nil

Command: (cvunit 1.0 "inch" "cm")

2.54

Command: (cvunit 1.0 "acre" "sq yard")

4840.0

Command: (cvunit '(1.0 2.5) "ft" "in")

(12.0 30.0)

Command: (cvunit '(1 2 3) "ft" "in")

(12.0 24.0 36.0)

  • الدالة type

و تعطينا نوع المتغير

Command: (SETQ A 2)

Command: (TYPE A)

INT

Command: (SETQ A "AMRSELIM")

Command: (TYPE A)

STR

  • الدالة princ

اظهار رساله على سطر الاوامر

Command: (princ "يا حي يا قيوم")

يا حي يا قيوم""

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

Command: (princ "good \n friend")

good

friend

و يمكن اضافة \t لجعل باقي الكتابة بعد مسافة

Command: (princ "father come \t hide")

father come hide

  • الدالة ALERT

اظهار رساله للمستخدم

Command: (ALERT "سبحان الله و بحمده")

  • الدالة COMMAND

و هي لاعطاء اوامر الاتوكاد و هناك الكثير من اوامر الاتوكاد تستخدم بالفعل في autolisp كرسم خط او النسخ

Command: (COMMAND "COPY")

Select objects:

للتحويل من الmodel الى layout

Command: (command "tilemode" 0)

للتحويل من الlayout الى model

Command: (command "tilemode" 1)

لرسم خط

Command: (setq a (getpoint))

Command: (setq b (getpoint))

Command: (command "line" a b "")

لرسم قوس

Command: (setq a (getpoint))

Command: (setq b (getpoint))

Command: (setq c (getpoint))

Command: (command "arc" a b c)

  • الدالة LOAD

لتحميل ملف

(LOAD "الملف الذي تريد تحميه" "رساله خطأ عند عدم وجود الملف")

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

(LOAD "c:/amrselim/lisp" "I can't see anything , iam blind")

  • الدالة DEFUN

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

و هي اختصار DEFIN FUNCTION تعريف داله

Command: (defun s (n)(+1 n))

حيث n هنا متغير

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

متغير يستخدم بواسطة الدالة

و متغير محلي يستخدم في الداله فقط و يتم سبقه بعلامة /

Command: (defun s (/n)(………….))

متغيرين احدهما محلي

Command: (defun s ( o /m)(………….))

بدون متغير

Command: (defun s ( )(………….))
(defun C:HATCH ( ) 
  (alert "Using the BHATCH command!")
  (princ "\n  OLDHATCH to get to real HATCH command.\n")
  (command "BHATCH")
  (princ)
)
    

(defun C:HATCH ( )

السطر الاول : اعطينا اسم للدالة ., اسم الداله هنا هو HATCH و C: لاعلام البرنامج ان يعامل الدالة كأي أمر من أوامر الاتوكاد

السطر الثاني : رساله اعلام للمستخدم

السطر الثالث : تظهر رسالة للمستخدم

السطر الرابع : اعطاء امر للبرنامج

Command: (defun c:ze() (command "zoom" "e"))

في هذا المثال عرفنا دالة باسم ze و هي بمثابة اختصار للامر zoom, Extents


و تفيد هذه الدالة و امثالها في حاله نسيان المسافة بين اختصاري z , e


  • الدالة setq

تحديد قيمة لمتغير , و هي اختصار set-quote

Quote تعنى اقتبس و set اجعل

Command: (setq x 1)

1

و يمكن اختصار الثلاث جمل التالية

Command: (SETQ A 1)

Command: (SETQ S 2)

Command: (SETQ E 3)

بالشكل التالي

Command: (SETQ A 1

S 2

E 3)

او

Command: (SETQ A 1 S 2 E 3)

و يمكن نقل قيمة المتغير الى متغير اخر

Command: (setq a 123)

123

Command: (setq b 'a)

A

لاستدعائها نستخدم !

Command: !x

1

  • الدالة getpoint

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

Command: (setq a (getpoint))

(-640.261 146.069 0.0)

  • الدالة getdist

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

Command: (getdist a)

2727.41

(setq dist (getdist '(1.0 3.5)))

و يمكننا اضافه سؤال للمستخدم

(setq dist (getdist '(1.0 3.5) "How far? "))

او يمكن ترك تحديد النقطتين للمستخدم

(setq dist (getdist))

  • الدالة distance

و تستخدم لمعرفة المسافة بين نقطتين (الفرق بينها و بين getdist اننا هنا نعطيها النقطتين مباشرة )

Command: (distance a b)

262.061

  • الدالة getint

و تستخدم للحصول على رقم صحيح من المستخدم

(getint "\Enter your age :")

12

و عند اعطاء اي قيمة لا تساوي رقم صحيح لا يقبلها و يعطينا رساله الخطأ التالية

Command: (getint)

frog

Requires an integer value.

لابد من رقم صحيح فلا يقبل اي رقم به علامة عشرية

Command: (getint)

15.0

Requires an integer value.

و يتم هنا تخزينها في متغير

Command: (setq num (getint "Enter a number:"))

Enter a number: 25

  • الدالة getreal

و تستخدم للحصول على اي رقم صحيح او كسر

Command: (getreal)

2.2

(setq val (getreal "Scale factor: "))

  • الدالة getstring

للحصول على نص من المستخدم و الحد الاقصى 132 حرف , اذا كتبت اكثر من هذا سيتم تجنبه

Command: (setq q (getstring "it's a good day"))

it's a good day

"friday"

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

Command: (setq s (getstring T "Enter filename: "))

Enter filename: c:\my documents\vlisp\secrets

"c:\\my documents\\vlisp\\secrets"

  • الدالة getcorner

و هي تعطيها نقطة ثم تأخذ نقطة اخرى من المستخدم عن طريق تحريك مؤشر الماوس مبتعدا عن النقطة على هيئه مستطيل (للفهم اكثر طبق ثم انظر في الامثلة العملية , الطريقة الثانية لرسم مستطيل)

Command: (setq b (getcorner a))

(5250.86 639.033 0.0)

  • الدالة ascii

اعطاء رقم الاسكي للحرف

Command: (ascii "b")

98

و في حاله عطائه كلمة يعطينا الاسكي لاول حرف فقط

Command: (ascii "a")

97

Command: (ascii "amr")

97

  • الدالة chr

اعطاء الحرف المقابل لرقم الاسكي

Command: (chr 97(

"a"

  • الدالة atom

و تعطي nil اذا كان سلسله و t اذا لم يكن سلسله

Command: (setq a '(b c d e))

(B C D E)

Command: (atom a)

nil

Command: (atom b)

T

Command: (atom '(s d f))

nil

  • الدالة eval

تخبرني بالقيمة المسجلة في المتغير

Command: (setq q 3)

Command: (eval q)

3

Command: (eval (abs -10))

10

  • الدالة quote

تجعل الحروف كبيرة

Command: (quote q)

Q

Command: !'a

A

Command: (quote (a b))

(A B)

  • الدالة setvar

اعطاء قيمه لمتغير الاتوكاد

مثل cmdecho الخاص بالاستجابات الخاصه بسطر الاوامر

     (setvar "cmdecho" 1)

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

0 لا تعرض صناديق الحوار

1 عرض صناديق الحوار

     (setvar "filedia" 1)

و cmddia عرض مربعات الحوار لاوامر متنوعة مثل الطباعة او جعل التعامل في سطر الاوامر وله قيمتين

0 لا تعرض صناديق الحوار

1 عرض صناديق الحوار

     (setvar "cmddia" 1)

Snapunit و هو متغير يتحكم في المسافة بين الجذب snap

 (setvar "snapunit" '(12 12))

Taskbar متغير يتحكم في ظهور كل ملفات الاتوكاد في شريط المهام او ظهور واحد فقط




Command: taskbar

Enter new value for Taskbar <1>: 0

  • الدالة getvar

الحصول على قيمة متغير الاتوكاد
(if (< (getvar "filletrad") 1)
  (setvar "filletrad" 1)
)

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

Command: (/ 21 (setq q 7))

3

Command: !Q

7

  • الدالة (entlast)

تعطينا بيانات عن أخر عنصر

Command: (entlast)

<Entity name: 7efb40b0>

و اذا استخدمناها قبل رسم او استخدام اي عنصر فأنه يعطينا nil

Command: (entlast)

nil

و للحصول على معلومات تفصيليه نكتب

Command: (setq a (entget(entlast)))

((-1 . <Entity name: 7efb40b0>) (0 . "LINE") (330 . <Entity name: 7efb2cf8>) (5

. "116") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (100 .

"AcDbLine") (10 891.592 1203.92 0.0) (11 1789.65 627.174 0.0) (210 0.0 0.0 1.0))

و هناك رموز شائعه الاستخدام مثل

-1 اسم الكائن

0 نوع الكائن

1 قيمة النص

5 القبضه handle

6 اسم ال LINE TYPE

8 الطبقة

10 نقطة البداية او المركز (بحسب العنصر المحدد)

11 نقطة النهاية او المحاذاة

38 المسقط

39 السمك

40 نصف القطر او ارتفاع الن

62 اللون

67 عنصر تحديد خاص بحيز النقطة او علامة حيز الورقة

70 رقم اصدار ال ole

72 حالة العمل هل انت على ال model ام على layout



0 عندما تكون في model , 1 عندما تكون في layout

284 نظام التظليل

  • الدالة ssget

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

Command: (ssget)

Select objects: Specify opposite corner: 2 found

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

Command: (setq q (ssget))

Select objects: Specify opposite corner: 2 found

Select objects:

<Selection set: 2>

و يمكن استخدام العناصر المحددة لاحقا

Command: m

MOVE

Select objects: !q

<Selection set: 2>

و يكمن فلتره العناصر التى نريدها مثل اختيار الخطوط فقط

(SETQ XX(SSGET (LIST (CONS 0 "LINE"))))

  • الدالة polar

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

في هذا المثال :النقطة a و الزاوية 0.1 و المسافة عشرون

Command: (setq a (getpoint))

Command: (setq q (polar a 0.1 20))

(917.808 2660.4 0.0)

  • الدالة assoc

يبحث في السلاسل المزدوجة association list عن زوج كل عنصر

Command: (setq country '((amrica israil) (almania itali) (iran turki) ))

((AMRICA ISRAIL) (ALMANIA ITALI) (IRAN TURKI))

Command: (assoc 'amrica country)

(AMRICA ISRAIL)

و في حالة سؤاله عن عنصر غير موجود

Command: (assoc 'utobia country)

nil

  • الدالة AND

و هي تخبرنا اذا كان المتغير او المعطى به قيمة ام لا

اذا اعطيته اكثر من متغير فيشترط ان يكون كلهم بهم قيمة ليعطيني t

اذا كان ليس به قيمه يعطينا nil

Command: (setq a 103 b nil c "string")

"string"

Command: (and 1.4 a c)

T

Command: (and 1.4 a b c)

nil

Command: (and a)

T

Command: (and w)

Nil

Command: (AND 5)

T

  • دالة arx

و تعطينا اسماء arx المحملة حاليا

AutoCAD Runtime Extension

Command: (arx)

("acapp.arx" "accamera.arx" "acdblclkedit.arx" "acdblclkeditpe.arx" "acdim.arx"

"acdwgrecovery.arx" "acdxnotify.arx" "aceplotx.arx" "acetlodr.arx"

"acetutil.arx" "acgsconfig.arx" "achapi17.dbx" "achlnkui.arx" "acidropmgr.arx"

"acismobj17.dbx" "acismui.arx" "aclayerp.arx" "acmgd.dll" "acpltstamp.arx"

"acprevinput.arx" "acsecopt.arx" "acsign.arx" "acspacetrans.arx" "acstd.arx"

"actaskbar.arx" "actp.arx" "acxrefesw.arx" "acxrefservice.arx" "movebak.arx"

"oleaprot.arx" "vl.arx" "whohas.arx" "wscommcntraccon.arx")

  • دالة arxload

لتحميل ملف arxload

Command: (arxload anyfile.arx)

Command: (arxload "c:/program files/AutoCAD 2007/anyfile.arx")

  • دالة arxunload

لالغاء تحميل ملف arx

Command: (arxunload anyfile)

  • دالة boundp

تنظر هل يحتوي العنصر على قيمة ام لا

اذا كان يحتوي على قيمة الناتج t

اما اذا كان لا يحتوي على قيمة الناتج يكون nil

Command: (setq x 13 y nil)

nil

Command: (boundp 'x)

T

Command: (boundp 'y)

nil

  • الدالة if الشرطية

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

و صيغتها

Command: (if (الشرط ) ( حدث اذا تحقق الشرط)(حدث اخر اذا لم يتحقق الشرط))

IF (YOU UNDERSTAND ANY THING) ,( MEET ME)

Command: (setq z 1)

Command: (if (< z 3) (alert"islamna"))

Command: (setq e (getint))

Command: (if (< e 20) (princ "e is less than 20") (princ "e is not less 20"))

e is not less 20"e is not less 20"

في السطر الاول أنشأنا متغير يأخذ رقم من الستخدم

السطر الثاني اذا كان الرقم الذي ادخلة المستخدم اقل من عشرين اظهر رسالة "الرقم الذي ادخلته اصغر من عشرين" و اذا كان الرقم اكبر من عشرين اظهر رساله "الرقم الذي ادخلته اكبر من عشرين"

Command: (SETQ A (GETINT))

Command: (SETQ B (GETINT))

Command: (if (= a b) (setq b 5 (setq b 6))

السطر الاول و الثاني نطلب من المستخدم ادخال رقمي للمتغيرين A,B

السطر الثالث اذا كانت قيمتي المتغيرين متساويين فاجعل قيمة المتغير الثاني 5

و اذا لم يكونوا متساويين فاجعل قيمة المتغير الثاني 6

  • Repeat

تكرار عمليه معينة عدد معين من المرات
Command: (SETQ A 100)

Command: (REPEAT 4 (SETQ A (+ A 10)))

140

في السطر الثاني قمنا بتكرار عملية اضافة 10 الى المتغير



  • While

افعل شئ ما حتى يحدث حدث معين

"استمر في سرقة الخزانة حتى يكتشفك المدير"

"استمر في الغياب حتى تلدغ اخر الشهر "

Command: (while (شرط)

(الاوامر التى سينفذها البرنامج))

Command: (setq a 1)

Command: (while (< a 20)

(princ a)

(princ "\n")

(setq a (+ 1 a)))
السطر الاول نحدد قيمة للمتغير

السطر الثاني نخبر البرنامج ان يستمر في العمل ما دام المتغير اصغر من العشرين

السطر الثالث و الرابع اوامر للبرنامج و هنا نأمره بكتابة المتغير

السطر الخامس اجعل المتغير يزيد بمقدار 1

و السطر

(princ "\n")
مكافئ ل (terpri) و الذي يقوم بالكتابه على السطر التالي



  • دالة acad_strlsort

و هي ترتب السلاسل الحرفية ترتيبا ابجدياً (في هذا المثال رتبت الاشهر ترتيبا ابجديا )

Command: (setq mont '("Jan" "Feb" "Mar" "Apr" "May" "Jun" "Jul" "Aug"

"Sep" "Oct" "Nov" "Dec"))

("Jan" "Feb" "Mar" "Apr" "May" "Jun" "Jul" "Aug" "Sep" "Oct" "Nov" "Dec")

Command: (acad_strlsort mont)

("Apr" "Aug" "Dec" "Feb" "Jan" "Jul" "Jun" "Mar" "May" "Nov" "Oct" "Sep")

  • دالةvl-file-delete

لالغاء ملف معين و اذا كان في ملف SUPPORT لا نكتب المسار

(vl-file-delete "newauto.bat")

و يمكننا كتابة المسار

(vl-file-delete "c:/newauto.bat")

  • دالة ACAD_COLORDLG

داله تعطيك نافذه تختار منها لون و في هذا المثال جعلنا اللون الافتراضي هو الاخضر 3

Command: (ACAD_COLORDLG 3)

و لتخزين اللون لاستخدامة لاحقاً (اعطاء لون لطبقه مثلا )

Command: (SETQ Q(ACAD_COLORDLG 3)

DCL


لجعل واجهه رسومية

و لتحميل ملف DCL لابد من أمرين

الاول وضع الملف DCL في ملفات ال SUPPORT او اضافة المسار الى ملفات الاتوكاد

الثاني استدعاء ملف DCL

(setq Dcl_Id% (load_dialog "MyDialogs.dcl"))

مثال

MyFirst : dialog {
label = " Hello World";
spacer;
: text {
label = "This is my first dialog.";
alignment = centered;
}
spacer;
ok_only;
}//MyFirst


, و في ملف الليسب نكتب

(defun c:MyFirst (/ Dcl_Id%)
(princ "\nMyFirst")(princ)
; لتحميل الصندوق الحواري
(setq Dcl_Id% (load_dialog "MyDialogs.dcl"))
(new_dialog "MyFirst" Dcl_Id%)
; Dialog Actions
(start_dialog)
; لالغاء التحميل
(unload_dialog Dcl_Id%)
(princ)
);defun c:MyFirst

نقوم بتشغيل الليسب

MYFIRST

فيظهر امامنا






امثلة برمجية

  1. تغير كل العناصر الى اللون الابيض

Command: ( command "_chprop" "all" "" "color" "7" "")
( command اعلام البرنامج اننا سنعطيه امر من اوامر الاتوكاد

"_chprop" امر تغير الخصائص

"all" اختيار تغير كل الخصائص

او يمكن كتابه last لتغير اللون لاخر عنصر فقط

"" ضغط زر الادخال

"color" اختيار تغير خاصية اللون

"7" اختيار تغير اللون الابيض

"") ضغط زر الادخال



  1. تغير لون العناصر التى على طبقة معينة

Command: (command "layer" "color" "7" "hvac" "")
(command اعلام البرنامج اننا سنعطيه امر من اوامر الاتوكاد

"layer" امر الطبقات

"color" اختيار تغير خاصية اللون

"7" اختيار تغير اللون الابيض

"hvac" اختيار الطبقة

"") ضغط زر الادخال



  1. رسم خط

Command: (setq a (getpoint))
Command: (setq b (getpoint))

Command: (command "line" a b "")

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

السطر الثالث نرسم مستطيل بمعلومية ركنيه

و "" بمعني ضغط زر الادخال



  1. رسم مستطيل

Command: (setq a (getpoint))
Command: (setq b (getpoint))

Command: (command "rectangle" a b)

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

السطر الثالث نرسم مستطيل بمعلومية ركنيه



  1. طريقة اخرى لرسم مستطيل

Command: (setq a (getpoint a))

Command: (setq b (getcorner a))

Command: (setq c (list (car b)(cadr a)))

Command: (setq d (list (car a)(cadr b)))

Command: (command "line" a c b d a "")

اي نقطة تحدد باحداثي س, ص

السطر الاول نحدد نقطة A

السطر الثاني نحدد ركن (النقطة B) بناء على النقطة الاولى

السطر الثالث نحدد نقطة (النقطة C)تأخذ من النقطة الثانية موقعها على محور السينات و من النقطة الاولى موقعها على محور الصادات

السطر الرابع نحدد نقطة (النقطة D) تأخذ من النقطة الثانية موقعها على محور الصادات و من النقطة الاولى موقعها على محور السينات (رسم بياني)

السطر الخامس نرسم اربع خطوط بين النقط الاربعه



  1. طريقة ثالثة لرسم مستطيل

Command: (command "rectangle" "_width" "2" "0,0" "10,10")
حيث نرسم مستطيل بسمك 2 و نقطتين معلوومتين هما "0,0" "10,10"



  1. رسم دائرة

Command: (setq a (getpoint))

Command: (command "circle" a 200)

circle Specify center point for circle or [3P/2P/Ttr (tan tan radius)]:

Specify radius of circle or [Diameter]: 200

السطر الاول تحديد نقطة المركز

السطر الثاني

(command اعلام البرنامج اننا سنعطيه امر من اوامر الاتوكاد

"circle" رسم دائرة

a نقطة المركز

200( نصف القطر



  1. عند عمل bind لملف

(DEFUN C:EN()
Command: (command "tilemode" 0)

(COMMAND "ZOOM""E")

(command "audit" "y")

(setvar "bindtype" 1)

(command "-xref" "b" "*")

(COMMAND "PURGE""ALL""*""N")

(COMMAND"QSAVE")

(COMMAND"CLOSE")

)

(DEFUN C:EN() الدالة تعريف

Command: (command "tilemode" 0) layout التحويل الى

(COMMAND "ZOOM""E") عمل زووم للشاشة

(command "audit" "y") audit عمل

(setvar "bindtype" 1) تغير نوع البايند

(command "-xref" "b" "*") bind أمر

(COMMAND "PURGE""ALL""*""N") تنضيف اللوحة

(COMMAND"QSAVE") حفظ

(COMMAND"CLOSE") اغلاق

) غلق القوس



  1. كتابة نص

كتابة نص بنقطة معرفة سابقا و ارتفاع 200 و زاوية 0

Command: (SETQ A (GETPOINT))

(278.852 53.9469 0.0)

Command: (COMMAND "TEXT" A "200" "0" "AMRSELIM" )

  1. تغير ارتفاع نص

(defun C:chtext (/ a ts n index b1 b c d b2)

(setq a (ssget))

(setq ts (getreal "\nEnter new text size"))

(setq n (sslength a))

(setq index 0)

(repeat n

(setq b1 (entget (ssname a index)))

(setq index (1+ index))

(setq b (assoc 0 b1))

(if (= "TEXT" (cdr b))

(progn

(setq c (assoc 40 b1))

(setq d (cons (car c) ts))

(setq b2 (subst d c b1))

(entmod b2))))

(princ)

)

مصطلحات















الشرحالكلمة
ارقام حقيقية مثل 2و2.3و-5REAL OR FLOAT
رقم صحيحة مثل 5و6و3 بدون ارقام عشرية


و هي من 32767 الى -32768
INTEGERمجموعة من الارقام المسلسلة ذات ترتيب معين

(6 5 2 14 8)LISTنص "غزة رمز العزة"stringعنصر مثل pointsymbol

برامج مساعدة

  • DCL&Lisp Generator برنامج متميز لعمل lisp و dcl (dialog component defined) بطريقة سهلة و قويه و واجهه مرئيه تشبه الفيجوال بيسك لكنه ليس مجاني

http://www.beowolftech.com/lispgen/home.html


اهم المواقع لتعلم AUTOLISP

أشهر LISP
































































add.lspتضطر أحياناً لجمع أرقام موجودة على الشاشه أمامك، ومن الأفضل أن تقوم بعملية الجمع مباشرة دون الاستعانة بالآله الحاسبة، وماعليك سوى أن تنقر على الرقم مع زر الإدخال فترى الرقم في سطر الحالة، ثم تنقر على الرقم
ALLUNITS هذا البرنامج لكل من يحتاج إلى التحويل بين وحدات القياس المختلفة أثناء العمل، يتميز ALLUNITS بطريقته السريعة للتحويل بين وحدات القياس المختلفة (وحدات قياس الزمن، الطول، المساحة، الحجم، الوزن، الزوايا)، كل ذلك باستخدام مربع حوار البرنامج و الذي يمكن تشغيله كذلك الأمر بشفافية داخل بعض أوامر اوتوكاد التقليدية و تمرير القيم الناتجة عن عملية التحويل إلى سطر الأوامر مباشرة.
AntiRot.VLXتدوير كائن أو مجموعة كائنات
AUTOLABEL.VLXترقيم تلقائي
bareaيستخدم لحساب مساحة منطقة عن طريق توقيع نقطة بها
bdلرسم الدكت (تكييف)
BreakAllاحداث قطع في الخطوط المتقاطعة و ذلك في نقاط التقاطع
bylaybk.lspيجعل لون البلوك لون اللاير
CAR.LSPيقوم البرنامج بحساب مساحات الأشكال في أوتوكاد، ويعطي نتيجة سريعة للحساب حيث يقوم بإنشاء متعدد خطوط Polyline حول الشكل المطلوب حساب مساحته وبطبقة مستقلة لونها أصفر للتميز في حال وجود أكثر من جزء ثم يطلب البرنامج نقطة لإدراج النص مع إمكانية التحكم بحجمه بشكل ديناميكي وعلى طبقة خاصة أيضاً.
CASE.LSPيحول حالة الكتابة
circle2plتحويل دائرة الة POLYLINE
clipcopyنسخ كل الكلام المحدد و يمكنك بعد هذا نقلة لملف كتابي خارجي
CNTعمل حصر للكتل
EBL.lspمسح البلوك
EN.lspعند الانتهاء من الملف و ارساله يقوم ب


,AUDIT, BIND,LAYOUT ZOOM,SAVEepts.LSPمسح كل النقاط Point الموجودة في الرسم دفعة واحدةEXDWG.LSPفتح المستعرض على اللوحة الحاليةflexلرسم FLEXinch-cm.lspيحول لانش الى سنتيمترINSORTادراج بلوكات يتم تدويرها مع الاحتفاظ باقثية العناصر الكتابية layerhtmانشاء صفحة نت بها اسماء الطبقات و خصائصهاll.lspغلق كل الطبقاتLLN.LSPبرنامج أوتوليسب بسيط يحسب مجموع أطوال عدة خطوط Lines أو متعددات خطوط Polylines. openbak.lspفتح ملفات أوتوكاد ذات الهيئة BAK مباشرةPEND.LSPرسم علامة القطعprefixتوليد ارقام متتالية يسبقها كلمةRBL.LSPيبدل البلوكRF.lspلرص البلوكاتSAVEA.LSPانشاء نسخ احتياطية من الرسومات WBA.LSPجعل كل بلوك في لوحة منفصلة مع كتابة ورقة باسماء البلوكاتwblockm.lspتصدير كل بلوك في اللوحة الى لوحة منفصلة WPIPE.LSPلرسم صاج تكييف

ملخص للأوامر





















































































































































































































defun c:اسم الدالة()
تعريف الدالة


atof


لتحويل النص الى رقم حقيقي

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


atoi


لتحويل النص الى رقم طبيعي

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


rtos


لتحويل الرقم الى نص

~
متمم العدد


cvunit


التحويل من وحدة الى وحدة اخرى

MAX
الرقم الاكبر


TYPE


تعطينا نوع المتغير

MIN
الرقم الاصغر


princ


اظهار رساله على سطر الاوامر

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


ALERT


اظهار رساله للمستخدم

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


COMMAND


لاعطاء اوامر الاتوكاد

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


LOAD


لتحميل ملف

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


setq


تحديد قيمة لمتغير

SQRT
الجذر التربيعي


getpoint


لتحديد نقطة

sin
جا الزاوية


getdist


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

cos
جتا الزاوية


distance


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

atan
ظل الزاوية


getint


للحصول على رقم صحيح من المستخدم

angle
الزاوية


getreal


للحصول على اي رقم صحيح او كسر

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


getstring


للحصول على نص من المستخدم

inters
نقطة تلاقي اربع نقط


ascii


اعطاء رقم الاسكي للحرف

/=
لا يساوي


chr


اعطاء الحرف المقابل لرقم الاسكي

eq
السلسلتين متساويين ام لا


atom


و تعطي nil اذا كان سلسله و t اذا لم يكن

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


eval


تخبرني بالقيمة المسجلة في المتغير

SUBSTR
لاظهار عدد معين من الاحرف من سلسله نصية


quote


تجعل الحروف كبيرة

strcat
تضم جملتين في جملة واحدة


setvar


اعطاء قيمه لمتغير الاتوكاد

car
عرض اول رقم في السلسلة


getvar


الحصول على قيمة متغير الاتوكاد

cadr
عرض ثاني رقم في السلسلة


entlast


تعطينا بيانات عن أخر عنصر

caddr
عرض ثالث رقم في السلسلة


ssget


بحفظ العناصر التى يحددها المستخدم

cdr
عرض السلسلة بدون الرقم الاول


polar

يحدد نقطة بناء على نقطة اخرى و الزاوية
nth
عرض عنصر معين من السلسلة الرقمية


AND


المتغير او المعطى به قيمة ام لا

cons
اضافة عنصر لاول القائمة


arx


و تعطينا اسماء arx المحملة حاليا

apply
تنفيذ دالة معينة على السلسلة الحرفية


arxload


لتحميل ملف arxload

append
تضم السلاسل الرقمية في سلسلة واحدة


arxunload


لالغاء تحميل ملف arx

reverse
عكس السلسلة الرقمية


boundp


هل يحتوي العنصر على قيمة ام لا

listp
هل العنصر المعطى سلسلة رقمية ام لا


if


لوضع شرط على حدث

strlen
عدد حروف الجملة


Repeat


تكرار عمليه معينة عدد معين من المرات


للشرح : حمل كتاب شرح الاتوليسب من


While


افعل شئ ما حتى يحدث حدث معين

www.amrselim.net
acad_strlsort


و هي ترتب السلاسل الحرفية ترتيبا ابجدياً



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

وما بها من خطأ ومن خلل    أذنت في إصلاحه لمن فعل

لكن بشرط العلم والإنصاف    فذا وذا من أجمل الأوصاف

والله يهدي سُـبل السـلامِ    سـبحانه بحبله اعتصـامي
كلمات حول الكتاب

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


محمود فوزي


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


الاستاذ حسين محمد
رئيس قسم الرسم في مكتب انفايرو سيفك

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

اتمنى ان يكون الكتاب قد نال رضاك


عمر سليم


تعليقات

إرسال تعليق

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