تفاوت بین AutoLISP و VBA چیست؟

من این سوالات را زیاد می شنوم. تفاوت بین AutoLISP و VBA چیست؟ من می خواهم نحوه برنامه نویسی اتوکد را یاد بگیرم ، اما مطمئن نیستم که ابتدا کدام ابزار را یاد بگیرم. کدامیک بهتر است؟

پاسخ سریع و آسان این است که هر دو خوب هستند و شما باید هر دو را یاد بگیرید. توجه داشته باشید که من می گویم این پاسخ سریع است. مطمئناً راه حل سریع نیست. پاسخ کامل تر به زمان و سوالات بیشتری نیاز دارد تا بتوانید تصمیمی کاملاً آگاهانه بگیرید. به عنوان مثال ، آیا شما از قبل BASIC را می شناسید؟ اگر این چنین است ، VBA سریعترین یادگیری خواهد بود. اگر نه ، آیا زبان برنامه نویسی دیگری می شناسید؟ اگر این چنین است ، احتمالاً خوب است که یک زبان رویه ای مانند FORTRAN یا PASCAL باشد ، که در این صورت یادگیری VBA بسیار آسان خواهد بود. اگر اصلاً هیچ زبان برنامه نویسی نمی دانید ، یادگیری AutoLISP می تواند آسان تر باشد.

اما فقط دانش و تجربه شما در برنامه نویسی کامپیوتر نیست که باید تصمیم بگیرد چه زبانی را در اتوکد یاد بگیرد. پاسخ به سوالات بعدی دشوارتر است. امیدواری چه کاری رو به سرانجام برسونی؟ هر زبانی نقاط قوت و ضعف خود را دارد. AutoLISP در ایجاد دستورات جدید و ایجاد ترکیبی از دستورات موجود خوب است. VBA در کار با اشیاء از جمله مواردی که در برنامه های دیگر مانند Excel و Access از Microsoft یافت می شود خوب است. AutoLISP یک سیستم پردازش لیست است که به برنامه نویس اجازه می دهد تا اطلاعات متنوع را به راحتی ذخیره و دستکاری کند در حالی که VBA دارای اشیاء حاوی داده ها و ابزارهای مختلف برای دستکاری چیزهای پیچیده است. اینجاست که پاسخ دادن به آن دشوار است مگر اینکه واقعاً هر دوی این ابزارها را به خوبی بشناسید.

پس از مدتی متوجه خواهید شد که پاسخ سریع من درست است. شما می خواهید هر دو زبان را یاد بگیرید. شما می خواهید کارهایی را انجام دهید که در AutoLISP با چند خط کد راحت تر انجام می شود. در حالی که با دیگران ، متوجه خواهید شد که VBA ساده ترین راه حل را برای برنامه ارائه می دهد ، مانند ایجاد یک برنامه پیچیده که شامل تعداد زیادی کادر محاوره ای است. AutoLISP از جعبه های گفتگو پشتیبانی می کند ، اما نه به همان میزان که VBA از آنها پشتیبانی می کند. در عین حال ، VBA دسترسی به سیستم اتوکد را در سطح شی فراهم می کند ، اما استفاده از دستورات اولیه اتوکد را به خوبی نشان نمی دهد-چیزی که AutoLISP می تواند به خوبی انجام دهد.

یک چیز مسلم است-این دو زبان به خوبی با هم کار نمی کنند. به این معنی که شما نمی توانید یک ابزار در AutoLISP بنویسید و از آن در VBA به راحتی استفاده کنید. نوشتن یک ابزار در VBA و استفاده از آن در AutoLISP آسان نیست. من نمی گویم غیر ممکن است ؛ فقط آسان نیست نکته اصلی این است که هنگامی که یک برنامه را با استفاده از یکی شروع می کنید ، نمی توانید برای حل مشکل ، جریان میانی را به دیگری تغییر دهید. به احتمال زیاد باید با زبانی که در ابتدا انتخاب کرده اید بمانید.

بنابراین ، اجازه دهید برخی از تفاوتهای این دو زبان را از نظر فنی مورد بحث قرار دهیم. همانطور که قبلاً ذکر شد ، AutoLISP یک ابزار فوق العاده برای ادغام سازه های منطقی با دستورات سنتی اتوکد است. می توانید دستورات اتوکد را در یک اسکریپت با منطق شرطی و حلقه ها ترکیب کرده و دستورات قدرتمندی را با طرح دلخواه خود ایجاد کنید. از این دستورات می توان برای خودکارسازی کارهای معمول و همچنین حل محاسبات به منظور دستیابی به نتیجه استفاده کرد. مواقعی وجود دارد که برنامه ریزی تفکر از نوع فرمان آسان تر از تفکر سطح شی است. یک مثال سریع که این تفاوت را به وضوح نشان می دهد ، فقدان روش نوع شکست در شیء چند خطی است. اگر می خواهید یک خط چند خطی را بشکنید ، باید ریاضی را انجام دهید و شی را به روز کنید. همین امر در مورد دستورات Extend و Trim صادق است. این دستورات به عنوان روش برای اشیاء موجود در سیستم شیء اتوکد در این برهه از زمان در دسترس نیستند. هرچند ممکن است در هر زمان در آینده ظاهر شوند. این زیبایی اجسام است!

اشیاء در بیشتر موارد مزایایی نسبت به دستورات دارند. هنگام صدور فرمان ، ممکن است توانایی انتخاب اشیایی را که می خواهید مستقیماً دستکاری کنید ، داشته باشید یا نداشته باشید. در عوض باید به مکانیزم انتخاب شیء در حال کار در اتوکد تکیه کنید. اشیاء آن ابهام را ندارند. هنگامی که یک شی را به صورت مرجع مشخص می کنید ، کاملاً مشخص است که منظور شما از دستکاری کدام شی است.

دستکاری های سطح شی در Visual LISP نیز موجود است. با استفاده از برنامه های افزودنی (VL) موجود در Visual LISP می توانید ویژگی های شی را تغییر داده و در صورت نیاز از متدهای شی استفاده کنید. شما باید از مراجع شی استفاده کنید که می توانند با تبدیل نام موجودیت موجود یا ایجاد مستقیم اشیاء ایجاد شوند. در بیشتر موارد یک برنامه نویس با تجربه AutoLISP نیازی به استفاده از اشیاء ندارد. اما مواقعی وجود دارد که آنها مطمئناً مفید هستند.

نکته دیگری که Visual LISP (AutoLISP) از VBA عبور می دهد ، نزدیک بودن بیشتر به سیستم اتوکد است. VBA بومی اتوکد نیست-این یک زبان اضافی است که در محیط های دیگر مانند Microsoft Word و Excel یکسان عمل می کند. همچنین از نظر برنامه نویسی به VB (Visual BASIC) در نحوه عملکرد با اتوکد شباهت دارد. Visual LISP فقط در داخل اتوکد اجرا می شود و به این ترتیب از یک رابطه کاری نزدیکتر با نرم افزار استفاده می کند.

هنگام درخواست کاربر در خط فرمان ، می توانید نمونه ای از این تفاوت را بیابید. در Visual LISP از عبارات (PROMPT) یا (PRINT) استفاده می کنید. در VBA شما باید از متد Prompt که بخشی از شیء Utility است و بخشی از شیء Drawing است استفاده کنید. خطوط کد زیر یک خط به خط فرمان اتوکد ارسال می کند. Visual LISP اول است ؛ VBA دوم است.

(سریع “\ n شروع می شود.”)

thisDrawing.Utility.Prpt Chr $ (10) و “شروع”

دو چیز فوراً آشکار می شود. در Visual LISP ، دنباله فرار “\ n” برای شروع یک خط جدید در پنجره فرمان استفاده می شود. VBA از تابع Chr $ (10) استفاده می کند و باید آن را با استفاده از عملگر “&” به جلوی رشته اعلان متصل کند. تفاوت دیگر میزان تایپ مورد نیاز برای دسترسی به روش سریع شیء ابزار در مقایسه با استفاده از دستور است.

در AutoLISP ، می توان از عبارت (PRINT) استفاده کرد و دنباله فرار “\ n” از آنجا که (PRINT) قبل از خروج مقدار به خط جدیدی منتقل می شود ، کاهش یافت. یکی دیگر از ویژگی های (PRINT) این است که هر نوع داده ای را خروجی می دهد در حالی که فقط می توان از رشته ها در عملکرد (PROMPT) استفاده کرد.

برای متدهای شیء Utility در VBA و همچنین توابع (GETxxx) AutoLISP ، باید همیشه از رشته ها استفاده کنید. AutoLISP شامل چندین عملکرد مختلف است که نوع داده مورد استفاده شما را به رشته تبدیل می کند. (RTOS) اعداد واقعی را به رشته و (ITOA) اعداد صحیح را تبدیل می کند. VBA دو تابع تبدیل عددی STR و FORMAT را ارائه می دهد. تابع STR یک رشته را با یک تفاوت ظریف برمی گرداند: هنگام تبدیل یک عدد غیر منفی ، یک فاصله به جلوی رشته اضافه می شود. یعنی str (-1.1) رشته “-۱.۱” را برمی گرداند و str (1.1) نتیجه “۱.۱” را می دهد. FORMAT به شما امکان می دهد قالب تبدیل را به طور خاص مشخص کنید. برای کسانی که تازه VBA یاد می گیرند ، توضیحات عملکرد FORMAT را در راهنمای آنلاین مشاهده کنید ، این مثال های زیادی ارائه می دهد که نشان می دهد چگونه می توان داده ها را برای خروجی تبدیل کرد.

متعادل کردن مقیاسها
این واقعیت که AutoLISP می تواند در سطح فرمان یکپارچه شود ، مقیاس ها را بیشتر به نفع AutoLISP برای سفارشی سازی اتوکد متمایل می کند. فقط با تعریف عملکرد با نویسه “C:” به عنوان دو نویسه اول نام ، می توانید دستورات جدیدی را با استفاده از AutoLISP تعریف کنید. از آنجا که آنها دقیقاً مانند دستورات اتوکد عمل خواهند کرد ، توابع “C:” “توابع فرمان” نامیده می شوند. VBA ماکرو دارد و باید ماکروها را از مدیر برنامه VBA اجرا کنید.

این واقعیت که VBA از خط فرمان (یا ماکرو ساده منو) اجرا نمی شود ، مشکلی عمده ایجاد نمی کند. می توانید مدیر برنامه VBA را با استفاده از AutoLISP راه اندازی کنید و سپس ماکرو را به همان شیوه فراخوانی کنید. هنگام استفاده از عبارت (COMMAND) ، مطمئن شوید که از علامت “-” در جلوی دستور مانند موارد زیر استفاده می کنید:

(فرمان “-VBALOAD” “mymacros” “-VBARUN” “mymacro”)

اگر خط تیره را وارد نکنید ، یک کادر محاوره ای برای کاربر ظاهر می شود تا ماژول های VBA را بارگذاری کرده و ماکروها را اجرا کند. در بیشتر موارد ، این روند مطلوب نیست. در عوض ، ماکروها بارگذاری می شوند و در یک تابع فرمان اجرا می شوند و در نتیجه توهم یک ماژول VBA مبتنی بر فرمان را ایجاد می کنند. بنابراین ، آنچه در ابتدا به نظر می رسید برای AutoLISP بسیار مفید بوده است ، نگران کننده نیست. این در برنامه نویسی غیر معمول نیست-هنگامی که نقص یا حفره ای مشخص شد ، اغلب یک کار در اطراف ایجاد می شود.

علاوه بر اجازه راه اندازی از طریق AutoLISP ، VBA همچنین دارای مجموعه ای از عملکردهای خوب برای واکنش به نقاشی و کار همزمان با چندین نقاشی است. می توانید برخی از این کارها را در Visual LISP انجام دهید ، اما نه به آسانی در VBA. راکتورها می توانند به نقشه ها متصل شوند و حتی در نقاشی های الگو تعبیه شوند و به هر دلیلی به نقشه های شما اجازه می دهد برنامه هایی را در خود جای دهند. Visual LISP بدون برنامه نویسی هوشمند یا دستکاری در منو این قابلیت را ندارد.

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

دستکاری تاریخ و زمان در VBA نمی تواند آسان تر باشد. از تابع FORMAT می توان برای ایجاد فرمت های خروجی تقریباً با هر توصیفی استفاده کرد و می توانید مقایسه های عددی و تفاوت های اساسی را با مقادیر انجام دهید. بنابراین ، می توانید اطلاعات مربوط به ذخیره زمان خود را در قالبی که کار با آن ساده است ذخیره و دستکاری کنید.

من شنیده ام که برنامه نویسان سرسخت AutoLISP اعلام کرده اند که VBA مانند LISP از لیست پشتیبانی نمی کند. درست است. اما VBA از Variants پشتیبانی می کند ، که بسیار شبیه به نمادهای LISP هستند زیرا هر نوع داده را در خود جای می دهند. انواع مختلف به VBA اجازه می دهد تا با داده ها و ساختارهای متغیر کار کند ، اما آنها به اندازه لیست های LISP قدرتمند نیستند. از لیست ها می توان برای ذخیره انواع مختلف داده ها استفاده کرد و سپس با چند خط کد بر اساس (MAPCAR) ، (FOREACH) و (APPLY) آنها را به سرعت دستکاری کرد. اما برای تسلط بر این نوع سبک های برنامه نویسی به مدتی زمان نیاز است و اکثر برنامه نویسان مبتدی هنگام استفاده از VBA دسترسی به ساختارهای لیست را از دست نمی دهند.

صادقانه بگویم ، پردازش لیست به اندازه دستکاری اشیاء برای برنامه نویسان جالب نیست. در VBA (و در Visual LISP) می توانید با سایر سیستم های پشتیبانی کننده از اشیاء پیوند دهید. رابط ActiveX ویندوز یک سیستم ارتباطی شیء گرا برای پردازش برنامه نویسان است. این به برنامه VBA شما که در داخل اتوکد اجرا می شود اجازه می دهد تا Excel یا سایر وظایف خودکار را پشتیبانی و اجرا کند. و از آنجا که Excel از VBA پشتیبانی می کند ، می توانید اتوکد را از داخل یک کاربرگ اکسل رانندگی کنید. هنگامی که شروع به فکر کردن می کنید ، اتوماسیون چند فرایند دارای پتانسیل فوق العاده ای است.

در صورت بارگیری بایگانی Zip millslot.zip، متوجه خواهید شد که شامل دو برنامه است: یکی در VBA (با پسوند DVB) و دیگری در Visual LISP (با پسوند LSP). این توابع هر دو یک کار را انجام می دهند: آنها از کاربر می خواهند تا یک اسلات آسیاب اصلی را از پارامترها تعریف کرده و سپس به ترسیم یکی بپردازد. شکاف آسیاب را می توان در هر زاویه ای قرار داد و دارای گوشه شعاع (۹۰ درجه) یا درپوش انتهایی کامل نیم دایره است. این مثالها چندین تفاوت بین سبک های برنامه نویسی VBA و Visual LISP را نشان می دهد. شاید قابل توجه ترین روش ایجاد چند خط سبک وزن باشد. در VBA شیء به عنوان مجموعه ای از نقاط تعریف می شود. فاکتورهای برآمدگی پس از ایجاد شی اولیه ارائه می شوند. مثال Visual LISP به سادگی از دستور PLINE برای خروجی نقاط و کمان ها به صورتی که از خط فرمان ارائه می شود ، استفاده می کند. از نظر برنامه نویسی ، ایجاد نسخه Visual LISP آسان تر است زیرا لازم نیست چیزی در مورد عوامل برآمدگی و نحوه استفاده از آنها در اجسام چند خطی بدانید. من می توانستم از عبارت (Entmake) در Visual LISP استفاده کنم و عوامل برآمدگی را در یک لیست موجودیت تعریف کنم ، اما کدگذاری نسخه مبتنی بر فرمان بسیار ساده تر است.

اگر تا اینجا دنبال کرده اید ، می بینید که Visual LISP و VBA بسیار متعادل هستند. جایی که یکی ضعیف است ، دیگری قوی است. در حالی که VBA برخی از مفاهیم جدید را برای برنامه نویسان AutoLISP پشتیبانی می کند ، اما دارای برخی مشکلات است که می تواند یک برنامه ساده را برای برنامه ریزی پیچیده کند. من تمایل دارم که Visual LISP را در بیشتر موارد ترجیح دهم زیرا گزینه های بیشتری را ارائه می دهد و من تجربه زیادی در استفاده از آن برای سفارشی سازی اتوکد دارم. اما بارها از VBA برای برنامه های سرویس گیرنده استفاده می کنم ، زیرا نگهداری از آنها برای آنها راحت تر است و رابط کاربری آسان را برای برخی دیگر از ماژول های اتوماسیون فراهم می کند. بسیاری از مشتریان من تجربه زیادی در زمینه سفارشی سازی اتوکد ندارند ، اما دارای سابقه ای در زبان BASIC هستند. در نتیجه ، آنها از برنامه VBA که برای آنها می نویسم استفاده می کنند ،

همه دلایلی که تا به حال ارائه شده است به همین دلیل است که من یادگیری Visual LISP و VBA را توصیه می کنم. اما باز هم ، این بستگی به این دارد که می خواهید با ابزارها چه کار کنید. یادگیری فقط یکی خوب است ، اما شما نمی دانید که از دیگری چه چیزی را از دست می دهید و با جلو رفتن زمان ، آنها باید با هم برخورد کنند. اولین قدم شما احتمالاً یادگیری نحوه اجرای عبارات LISP از VBA یا اجرای یک کلاس کلاس سفارشی VBA از Visual LISP خواهد بود. از آنجا ، چه کسی می داند که بعد از آن چه خواهد شد!

از کجا شروع
کنیم به منظور تعیین اینکه با کدام زبان ابتدا باید برخورد کنید ، خود ارزیابی ساده ای انجام دهید. اگر دستورات اتوکد را به خوبی می شناسید و می خواهید فرایند استفاده از آنها را خودکار کنید ، Visual LISP اولین قدم است. اگر اتوکد را نمی شناسید اما یک برنامه نویس کامپیوتری هستید که نحوه کار اجسام را درک می کند ، سپس با VBA شروع کنید. اگر شما یک برنامه نویس C ++ هستید ، ممکن است بخواهید با VBA شروع کنید تا ببینید چگونه اشیاء به هم متصل می شوند و سپس این درس ها را به ObjectARX (کتابخانه C ++ برای ساخت DLL هایی که در نقشه حافظه مشابه خود اتوکد اجرا می شوند) ببرید. به گزینه ObjectARX در این مقاله مورد توجه قرار نگرفته است زیرا باید از کامپایلر خارجی C ++ استفاده کنید و مجموعه ابزار ObjectARX را از Autodesk تهیه کنید. Visual LISP و VBA با AutoCAD 2000 ارائه می شوند.

و آخرین توصیه برای کسانی که می خواهند نحوه برنامه نویسی اتوکد را بیاموزند: به دنبال کتابها و مقالات مجله باشید که نمونه هایی از آنها وجود داشته باشد. [یادداشت ویراستار: برای دو مورد از بهترین کتابها ، به AutoLISP Treasure Chest by Bill Kramer (MFI Books) و AutoCAD VBA Programming توسط Bill Kramer و John Gibb (MFI Books) مراجعه کنید. همچنین استفاده از ویژوال بیسیک با اتوکد ، ویرایش دوم را ببینید، توسط اندرو رو (دلمار).] و نمونه های بیشتری را در وب جستجو کنید. راهنمای آنلاین موجود در Visual LISP و VBA برای مبتدیان گیج کننده است. برخی از عملکردها از نظر VBA و برخی دیگر از دیدگاه Visual LISP مستند شده اند. صرف نظر از این که از چه زبانی استفاده می کنید ، به احتمال زیاد برای کمک به زبان دیگر دچار مشکل می شوید ، زیرا آنها به هم نزدیک هستند. بنابراین ، من اکیداً توصیه می کنم یک یا دو کتاب را جستجو کنید. گزینه های متعددی برای انتخاب وجود دارد و یک فروشگاه کتاب خوب باید چند مورد را در خود جای دهد.

انتخاب های زیادی وجود دارد و هر کدام مزایایی دارند. برای مقابله با هر کدام که انتخاب می کنید ، بعضاً احتمالاً می خواهید همه آنها را در جستجوی دانش بیشتر بیاموزید. در این فاصله ، برنامه را ادامه دهید.

نظرات کاربران



دیدگاهتان را بنویسید

درباره نویسنده



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

تلفن همراه: ۰۹۰۰۱۲۳۴۴۴۴

ایمیل: s.doostdari@gmail.com

ترفند های اتوکد



دسته بندی مطالب​