ارتباط با کاربر

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

گرفتن اطلاعات از کاربر و سپس تصمیم گیری بر مبنای آن دو رکن اساسی یک برنامه ی کاربردی است. در پست امروز با نحوه ی برقراری ارتباط با کاربر و گرفتن اطلاعات از آن آشنا می شویم. این اطلاعات شامل انتخاب یک نقطه جهت شروع ترسیم ، گرفتن مقدار یک عدد یا عنوان یک نوشته و ... میشود. همانطور که بسیاری از دستورات اتوکد از طریق خط فرمان کار می کنند شما هم می توانید برنامه هایی بنویسید که از طریق خط فرمان با کاربر ارتباط برقرار می کنند. البته راه بهتر استفاده از پنجره و زبان DCL است که در مباحث پیشرفته تر به آن خواهیم گرداخت.

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

getint
گرفتن یک مقدار عددی از نوع صحیح
 
getreal
گرفتن یک مقدار عددی از نوع اعشاری
 
getstring
گرفتن یک مقدار رشته ای ( کلمه یا نوشته)
 
getpoint
گرفتن مختصات یک نقطه
 
getcorner
گرفتن یک گوشه (مانند دستور fillet)
 
getdist
یک مقدار حقیق از حد فاصل بین دو نقطه
 
getangle
گرفتن یک زاویه
 
getorient
گرفتن راستا یا جهت
 
getkword
گرفتن یک کلمه ی کلیدی (مانند دستورات در خط فرمان)

همانطور که در راهنمای اتوکد درج شده است دستوراتی مانند getvar و getcfg هم هستند که با get شروع می شوند اما به عنوان گرفتن ورودی از کاربر مورد استفاده قرار نمی گیرند و اساسا وظایف دیگری دارند.
در مورد getint ، getreal و getstring باید مقدار ورودی آنها با نوعی که میگیرند یکسان باشد در غیر این صورت مقدار nil خروجی می دهند.

Command: (getint "Number of copies ?")
Number of copies ?10
10
Command: (getint "Number of copies ?")
Number of copies ?11.5
Requires an integer value.
Number of copies ?p30ton
Requires an integer value.
Number of copies ?5
5


در مورد دستور getpoint میتوانید علاوه بر نوشته ای که کاربر آن را می بیند یک مقدار پیشفرض برای نقطه پیشنهاد دهید.

Command: (getpoint '(10 10 0) "Pick a point :")
Pick a point :(18.8631 17.8634 0.0)

در اینجا نقطه ی 10،10 به عنوان مبدا و پیشفرض به کاربر نمایش داده می شود.
گاهی لازم میشود مقداری که کاربر وارد می کند بررسی کنید تا برنامه دچار مشکل نشود.مثلا ممکن است کاربر درجایی بجای طول خط مورد نظرش مقدار منفی وارد کند . یا هنگام رسم دایره شعان آن را صفر وارد کند. برای جلوگیری از این موارد از دستور initget استفاده می شود.
این دستور با ترکیبهای بیتی کار می کند. باید حالت مورد نظر خود را از جدول راهنمای آن بیابید و بعد جمع کنید. مثلا اگر میخواهید عدد وارد شده هر چیزی غیر از صفر باشد به صورت زیر عمل می کنید.

Command: (initget 2)(getint "Circle radius :")
Circle radius :0
Value must be nonzero.

کد اعداد غیر منفی 4 است. پس اگر میخواهید علاوه بر اعداد غیر صفر از ورود اعداد منفی هم جلوگیری کنید عدد 4 را با 2 جمع میکنید و در دستور initget عدد 6 را به عنوان ورودی میدهید.

Command: (initget 6)(getint "Circle radius :")
Circle radius :0
Value must be positive and nonzero.
Circle radius :-5
Value must be positive and nonzero.

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

Command: (initget 7)(getint "Circle radius :")
Circle radius :
Requires a positive nonzero integer.

اینتر زدن خالی باعث میشود سوال دوباره تکرار شود.
برای مشاهده ی لیست کاملی از کدهای بیتی مربوط به دستور initget به راهنمای اتوکد مراجعه کنید.