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

او اكتبها في المدونة http://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و-5 REAL 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 , و اذا وجدت خطأ فاعلمنى به , او اصلحه مشكورا

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

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

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

كلمات حول الكتاب

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

محمود فوزي


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

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

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

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

كتبه :

عمر سليم


Advertisements
%d مدونون معجبون بهذه: