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

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

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

هنگامی که در فصل یک (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”))

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