آموزش برنامه نویسی اتولیسپ (فصل دوم) (قسمت اول)

مدیریت لیست‏ها

گرفتن جزئی از یک لیست

هنگامی که در فصل یک (setq a (getpoint)) را به کار گرفتید، مختصات X،Y و Z را به متغیری به نام a اختصاص دادید. این متغیر لیستی است که از سه عنصر تشکیل شده است. در صورتی که بخواهید محتویات متغیر را بررسی کنید، اتولیسپ راه ساده‏ای برای این کار تدارک دیده است.

در خط فرمان تایپ کنید:

!a

با قرار دادن علامت «!» در جلوی نام متغیر مقدار یا مقادیر متغیر نشان داده می‏شود.

(3.0 5.0 0.0)

وقتی «!a» نوشته و اینتر بزنید، مقادیری دیده می‏شود که به معنای وجود لیستی با سه متغیر است. 3 مختصات X، 5 مختصات Y و 0 مختصات Z است. ترکیب مختصات X از یک نقطه و Y از نقطه دیگر، در ترسیم چهارضلعی‏ها، ساخت شبکه‏ ها، مشتق کردن نقطه ‏ای برای شروع یک متن و انتخاب شیء‏ها بسیار سودمند است. بنابراین نیاز به به راهی وجود دارد که با کمک آن بتوان مختصات را جدا کرد، به طوری‏که بتوان آن را به مختصات سومی اختصاص داد.

(car) مختصات X (اولین عنصر)

برخی از فرمان‏های اتولیسپ به سادگی توسط زبان محاوره ‏ای قابل ترجمه نیستند. (car) یکی از فرامین است. این فرمان، دستوری ابتدایی برای کار با بخشی از لیست است.

(car) اولین عنصر لیست را در اختیارتان می‏گذارد. برای مثال، در صورتی که a در برگیرنده مقادیر زیر باشد:

(3.0 5.0 0.0)

در این صورت (setq b (car a)) به متغیر b اولین عنصر در a را اختصاص می‏دهد. بنابراین بعد از اجرای فرمان فوق، b مقدار 3 را خواهد داشت.

در خط فرمان تایپ کنید:

(setq a (getpoint “Pick a Point “))

حالا نقطه‏ ای را در صفحه انتخاب کنید.

در خط فرمان تایپ کنید:

!a

مقدار a لیستی خواهد بود شامل دو یا سه عدد که نشان‏دهنده مختصات X،Y و Z نقطه انتخاب شده است. این مختصات در داخل پرانتز قرار می‏گیرند و بین آنها تنها یک فاصله خالی وجود دارد.

در خط فرمان تایپ کنید:

(setq b (car a))

!b

توجه کنید که مقدار b در پرانتز قرار ندارد که به معنای این است که متغیر b حالا تنها شامل یک مقدار می‏باشد و جزئی از یک لیست محسوب نمی‏شود.



آموزش برنامه نویسی اتولیسپ (فصل اول) (قسمت نهم)

برنامه Les1.lsp

 حالا به بررسی اولین برنامه اتولیسپ می‏پردازیم. این برنامه طرز کار کلیه فرامینی که تا به حال آموخته ‏اید را نشان می‏دهد. در این برنامه باید دو نقطه را در صفحه انتخاب کنید و بعد از انتخاب دو نقطه یک خط راست کشیده می‎شود.

(defun c:drawline (/ p0 p1)

     (graphscr)

     (setq p0 (getpoint “\nPick First Point “))

     (setq p1 (getpoint “\nPick 2nd Point “))

     (prompt “\nThank You”)

     (command “line” p0 p1 ““)

)

 

توضیح خط به خط برنامه

(defun c:drawline (/ p0 p1)

تعیین نام برنامه و محلی کردن متغیرها

     (graphscr)

صفحه گرافیکی اتوکد نشان داده می‏شود.

     (setq p0 (getpoint “\nPick First Point “))

تعیین متغیر p0 به عنوان نقطه اول و جمله Pick First Point در خط فرمان نمایش داده می‏شود. باید نقطه‏ ای را در اتوکد انتخاب نمایید.

     (setq p1 (getpoint “\nPick 2nd Point “))

تعیین متغیر p1 به عنوان نقطه دوم و جمله Pick 2nd Point در خط فرمان نمایش داده می‏شود. باید نقطه‏ ای را در اتوکد انتخاب نمایید.

 

     (prompt “\nThank You”)

جمله Thank You در خط فرمان نشان داده می‏شود.

     (command “line” p0 p1 ““)

ترسیم خط از نقطه p0 به p1 (نقاطی که در اتوکد انتخاب کردید)

)

برنامه را به اتمام می‏رساند.

برنامه را با نام Les1 در یک پوشه ذخیره کنید.

آموزش برنامه نویسی اتولیسپ (فصل اول) (قسمت هشتم)

(command) استفاده از فرمان‏های اتوکد

یکی از پرکاربردترین دستورات لیسپ می‏باشد. این دستور اجازه استفاده از همه فرامین اتوکد را در یک برنامه لیسپ فراهم می‏آورد.

متغیرهایی که به دنبال فرمان می‏آیند، در فرمان مورد استفاده قرار می‏گیرند.

تایپ کنید:

(command “line” a b)

در صورتی‏که مختصات یک نقطه در متغیر a ذخیره شده باشد و مختصات نقطه دیگر در متغیر b ذخیره شده باشد، دستور بالا یک خط سه بعدی از نقطه a به نقطه b ترسیم می‏کند. اگر دقت کنید مکان نما از نقطه b قطع نشده است. فرمان را کنسل کنید و خط رسم شده را پاک کنید.

تایپ کنید:

(command “line” a b ““)

توجه داشته باشید حالا خط مورد نظر رسم شده ولی در فرمان باقی نمانده است. کوتیشن مضاعف مانند کنسل عمل می‏کند.

(command “line” a b c d “c”)

اگر تعداد متغیرها زیاد باشد و بین دو کوتیشن‏ها c بنویسید، اولین نقطه به آخرین نقطه وصل می‏شود. (در دستور بالا نقطه d به نقطه a وصل می‏شود)

نکته: از این به بعد برنامه‏ هایی که نام Les دارند را باید به صورت کامل بنویسید. برای این کار پنجره Visual LISP For Auto Cad را فعال می‏کنیم و دکمه  New را می‏زنیم تا صفحه Untitled باز شود. برای بارگذاری موقت و امتحان برنامه‏ ها، از دکمه Load active edit window استفاده کنید و بعد از زدن دکمه، اسم برنامه (اسمی که در جلوی c: نوشته شده است) را در خط فرمان بنویسید و اینتر کنید.

آموزش برنامه نویسی اتولیسپ (فصل اول) (قسمت هفتم)

(getpoint) انتخاب یک نقطه

دستور فوق یک دستور ورودی است که برای انتخاب یک نقطه استفاده می‏شود. تا زمانی‏که نقطه ‏ای بر روی صفحه اتوکد انتخاب نکنید اتفاقی نخواهد افتاد. در صورتی که از دستور (setq) همراه با فرمان (getpoint) استفاده نمایید، مختصات X، Y و Z نقطه انتخاب شده به متغیری که توسط (setq) مشخص شده است، اختصاص می‏یابد.

می‏توانید همواره با دستور (getpoint) پیامی را نیز داشته باشید تا کاربر از کاری که باید انجام دهد مطلع شود.

تایپ کنید:

(getpoint)

چه اتفاقی رخ می‏دهد؟ اتوکد منتظر انتخاب نقطه‏ ای از طرف شما خواهد ماند.

نقطه‏ای را بر روی صفحه اتوکد انتخاب نمایید. مختصات نقطه بر روی خط فرمان بین دو پرانتز ظاهر می‏شود.

تایپ کنید:

(setq a (getpoint “Pick first point”))

فرمان (setq …) مختصات X، Y و Z نقطه انتخاب شده به وسیله فرمان (getpoint …) را به متغیر a اختصاص خواهد داد. به پیام موجود در کوتیشن‏ها که بعد ار (getpoint) آمده است، دقت نمایید. این پیام بر روی خط فرمان ظاهر خواهد شد. در صورتی که می‏خواهید پیام بعدی در خط بعد ظاهر شود به یک فرمان (terpri) نیاز دارید.

توجه: بهترین راه برای نوشتن چنین دستوراتی استفاده از شیوه زیر می‏باشد:

(setq a (getpoint “\nPick first point”))

توجه داشته باشید که (getpoint) با پرانتزهای خود به صورت تودرتو قرار گرفته است. کلیه فرامین باید با پرانتز شروع شوند؛ حتا اگر دربردارنده فرمان دیگری باشند.

نکته: پرانتزها در برنامه نویسی لیسپ بسیار مهم هستند. اما جای نگرانی نیست چون وقتی در محیط ویژوال لیسپ برنامه نویسی می‏کنید، وقتی پرانتزی را میبندید، پرانتز مقابلش پررنگ خواهد شد. برای روشن شدن این قضیه، این‏کار را در محیط ویژوال لیسپ امتحان کنید.

تایپ کنید:

!a

مقدار نهایی a حالا شامل سه مقدار می‏باشد. مقادیر حقیقی X، Y و Z.

(setq …) راه بسیار مناسبی برای به قرار دادن لیستی از مقادیر در یک متغیر است. در صورتی که این مقادیر را در یک متغیر لیست ذخیره کنید، می‏توانید در آینده از آنها استفاده کنید.

مثال:

(setq a (getpoint “\nPick first point”))

(setq b (getpoint “\nPick first point”))

الان دو لیست دارید که در دو متغیر متفاوت ذخیره شده ‏اند.


آموزش برنامه نویسی اتولیسپ (فصل اول) (قسمت ششم)

Set equal  یا    set quote

(setq) متغیر اتولیسپ و سمبل مشخص شده را میگیرد و متغیر را برابر با مقدار سمبل قرار میدهد. دستور فوق یک عبارت تخصیص است و مقدار یک متغیر یا ثابت را به متغیر دیگری تخصیص میدهد.

نکته مهم: (setq) یک فرمان تخصیص ابتدایی در اتولیسپ است. در اتولیسپ، علامت = به عنوان علامت تخصیص به کار نمیرود. = به غیر از دستور (if…) و دیگر دستورات غیر تخصیصی کاربردی ندارد. این علامت نمیتواند متغیری را مساوی با متغیر دیگری قرار دهد. این کار تنها از فرمان (setq) بر می آید. در اولویت عبارت (setq) باید کمی دقت کرد.

(setq a b)

این عبارت مقدار b  را به متغیر a تخصیص میدهد.اولین متغیر بعد از (setq) متغیری است که مقدار را دریافت میکند.دومین متغیر مقدار خود را به متغیر اول میدهد.این دستور تنها برای تخصیص مقادیر متغیر ها به کار نمیرود.

میتوانید از مقادیر ثابت، اعداد و یا رشته ها نیز استفاده نمایید:

(setq a "hello how are you")

در صورتی که اقدام به چاپ a نمایید، hello how are you  را خواهید دید.

(setq a 7)

بعد از اجرای دستور فوق، مقدار a برابر 7 خواهد شد.

تایپ کنید:

(setq a 7)

تایپ کنید:

!a

مقدار 7 بر روی خط فرمان ظاهر خواهد شد. به نحوه عمل «!» در چاپ مقادیر متغیر ها دقت کنید.

هر زمانی که بخواهید مقدار یک متغیر را بدانید، به سادگی میتوانید «!» را در ابتدای نام متغیر قرار دهید تا مقدار متغیر چاپ شود.

تایپ کنید:

(setq b "john")

تایپ کنید:

!b

لغت john باید بر روی خط فرمان ظاهر شود.

تایپ کنید:

(setq a b)

تایپ کنید:

!a

لغت john باید بر روی خط فرمان ظاهر گردد. در این مثال، مقدار متغیری را به متغیر دیگر تخصیص داده اید. هر دو متغیر a و b حالا مقدار یکسانی دارند.

آموزش برنامه نویسی اتولیسپ (فصل اول) (قسمت پنجم)

(terpri) پایان چاپ و \n

این فرمان جهت تعویض خط به کار میرود و سبب میشود که چاپ متن بعدی بر روی خط بعدی ظاهر گردد. به طور کلی این فرمان بعد از دستورات لیسپ به کار میرود.

تایپ کنید:

(prompt "hello how are you") (terpri)

اتولیسپ راه دیگری برای پایان دادن به خط دارد و آن استفاده از \n  قبل از چاپ عبارت بعدی است.گاهی نیاز میشود که متن بعدی درست بر روی همان خط چاپ گردد.این کار شبیه به کاریست که اتوکد به طور خودکار انجام میدهد.در برخی از مواقع نیز نیاز میشود که متن بر روی خط بعدی شروع شود.

تایپ کنید:

(prompt "pick a point: ")(prompt "pick 2nd point: ")

به روش ظاهر شدن دو فرمان بر روی یک خط توجه کنید.

تایپ کنید:

(prompt "pick a point: ")(terpri)(prompt "pick 2nd point: ")

دو عبارت حالا بر روی دو خط متفاوت ظاهر میشوند.

راه دیگری که برای تعویض سطر وجود دارد، به صورت زیر است

تایپ کنید:

(prompt "pick a point: \n")(prompt "pick 2nd point: ")

معمول ترین و بهترین روش استفاده از این دستورات، استفاده از \n  قبل از متن مورد نظر است.

تایپ کنید:

(prompt "\npick a point: ")(prompt "\npick 2nd point: ")

این روش بدون توجه به آنچه که سابق رخ داده است شروع متن بر روی خط جدید را تضمین میکند.

به خاطر داشته باشید که \n  باید در داخل کوتیشن قرار بگیرد و حتمن از حروف کوچک در نوشتن آنها استفاده شود.

(prompt "\n") عملکردی شبیه به (terpri) دارد.

یکی از اهداف نوشتن برنامه در اتولیسپ این است که تا حد امکان از فرامین اتوکد تقلید نمود و مانند آنها رفتار کرد.فرامین فوق امکان قرار دادن فرامین پیوسته بر روی یک خط یا خطوط متفاوت را فراهم می آورد.

آموزش برنامه نویسی اتولیسپ (فصل اول) (قسمت چهارم)

آغاز اجرای برنامه ها

بعد از نوشتن برنامه و بارگذاری فایل دربرگیرنده‏ ی آن، مابقی کار ساده است.

برنامه باید از طریق خط فرمان در اتوکد و یا از طریق خط اعلان وارد شود و یا به منو یا toolbar اضافه گردد. به خاطر داشته باشید که ابتدا باید فایل را بارگزاری نمود و نام برنامه نیز باید توسط پرانتز محصور گردد، مگر اینکه نام برنامه همراه با C:   باشد.

 

(graphscr) صفحه تصویر گرافیکی

بعضی از دستورات باعث میشوند که پنجره متنی اتوکد روی پنجره گرافیکی اتوکد باز شود. این دستور باعث میشود که پنجره ی متنی اتوکد بسته شود.این دستور در اتولیسپ همان F2 در اتوکد است.

(graphscr)

(prompt) عبارت عمومی چاپ متن

این فرمان برای چاپ متن، بر روی خط فرمان به کار گرفته میشود. در خط فرمان اتوکد تایپ کنید:

(prompt "hello how are you")

پیامی که در داخل کوتیشن قرار دارد در خط فرمان چاپ میشود.

نکته: برای دیدن نتیجه سریع فرمان‏هایی مانند فرمان بالا باید این فرمان‏ها را در خط فرمان اتوکد تایپ نمود. منظور از <Enter> این است‏ که بعد از نوشتن دستور دکمه Enter را بزنید.

آموزش برنامه نویسی اتولیسپ (فصل اول) (قسمت اول)

سلام

از این پست به بعد میخوام آموزش زبان برنامه نویسی اتو لیسپ که بهترین زبان برنامه نویسی برای اتوکد هست رو قرار بدم.

اول یه مقدمه ای از لیسپ مینویسم و بعد شروع به توضیح درس میکنم.

این آموزشایی که میذارم از کتاب خودآموز استفاده از اتولیسپ از انتشارات عبد هست. چون دیگه تجدید چاپ نمیشه و پیدا کردن چاپای قدیمی کتاب هم خیلی سخته، به همین خاطر این آموزشارو با کمی تغییر که با ورژنای جدید اتوکد بخوره، اینجا قرار میدم.

 

چرا AutoLISP  را میخوانیم؟

AutoLISP ابزار بسیار قدرتمندی در ایجاد تغییر در اتوکد است و با کمک این ابزار می‏توان در وقت صرفه‏ جویی کرد و برنامههای قدررتمندی نوشت. با کمک این ابزار می‏توان برای کنترل ترسیمات، بانک اطلاعاتی و برنامه‏های کاربردی خودتان برنامه‏ هایی بنویسید.

نکته ای در مورد لیسپ و اتولیسپ

لیسپ اولین زبان برنامه نویسی است که به برنامه نویس امکان توسعه ی برنامه با استفاده از عبارت‏های شبیه به زبان انگلیسی را می‏دهد.

نگارش اتولیسپ برای اتوکد یکی از زیر مجموعه‏ های این زبان برنامه نویسی است. توسعه دهندگان نرم افزار Autodesk تنها فرامینی که مناسب این نیاز بوده است را انتخاب کرده‏اند و حتا برخی از آنها را تغییر داده‏ اند.

شاید تعجب کنید که چرا اتودسک زبانی مثل بیسیک یا زبان‏های مشهور دیگر را به عنوان ابزار برنامه‏ نویسی انتخاب نکرده است. در صورتی که با اتولیسپ آشنا شوید درمیابید که اتولیسپ تنها زبانی است که می‏تواند با قدرت زیاد با لیستی از مقادیر ( مثل مختصات x.y.z) کار کند و بنابراین انتخاب لیسپ یک انتخاب دقیق و هوشیارانه است.

برای وارد شدن به محیط برنامه نویسی لیسپ به روش زیر عمل میکنیم:

از منوی Tools زیر گروه auto LISP گزینه Visual LISP Editor را انتخاب کنید



بعد از انتخاب گزینه، صفحه Visual LISP For Auto Cad باز میشه و میتونید برنامه هاتونو تووش بنویسید.