Автоматизация на проектирането, AutoCAD
Един от ефективните начини заавтоматизиране на процеса напроектиране в AutoCAD може да бъде създаването на ваши собствени програми на езика LISP.
Ако в работата ви има типични, често срещани операции, можете да напишете програма за тях, която ще ги изпълни за няколко секунди и ще ви остави повече време за творчество.
Пример за автоматизиране на проектирането на вентилационни системи може да служи като диалогов прозорец, създаден в урока: "Диалогов прозорец AutoCAD". Вижте фиг. 1.
Ориз. 1. Диалогов прозорец.
Диалоговият прозорец ви позволява да изберете формата на секцията, да промените скоростта на потока и размера на секцията. В този случай за всяка промяна в отделно поле се изчислява скоростта на въздуха.
В предишната статия разгледахме подробно възможна опция за управление на диалогов прозорец от програма LISP. Но все още има няколко идеи за подобряване на програмата. Това ще направим в този урок.
Позволете ми да ви напомня, че когато щракнете върху бутона OK, нашият диалогов прозорец беше затворен и програмата ви помоли да посочите две точки, по които се изгражда мултилинията (кръгъл или правоъгълен канал).
Ориз. 2. Многоредов.
В този урок ще научим:
Отворете програмата pr_uch.lsp, създадена в предишния урок: Управление на диалогов прозорец.
Запазете го под друго име: pr_uch2.lsp
серия от въздуховоди.
Би било хубаво, ако нашата програма нарисува не един, а няколко въздуховода от една и съща секция наведнъж.
Изграждането на прав участък от канала се извършва в потребителската функция Vml. Вижте фиг. 3
Ориз. 3. Функция в многоредови ставки.
Ще започнем с промяна на тази функция.
Преместете реда на заявкатавтора точка:
Под линията, която изчертава мултиреда:
Добавете линия, където координатите на втората точка са присвоени на първата:
И оградете тези редове в масив с помощта на функцията while:
Функцията while ще обхожда изразите в масива, докато p2 стане нула.
Веднага щом p2 стане нула, функцията while ще приключи и програмата ще продължи.
Заменете горното в програмата. Вижте фиг. 4.
Ориз. 4. Многократно повторение на изграждане на многоред.
Отидете на AutoCAD;
В командния ред въведете pr_ush и натиснете .
Ще се отвори диалогов прозорец. Ако искате, можете да промените оригиналните данни. Вижте фиг. 5.
Ориз. 5. Диалогов прозорец.
След това натискаме бутона OK.
Към заявката "Посочете първата точка:" - посочете всяка точка в работния прозорец на AutoCAD.
Към заявката "Посочете втората точка:" - посочете следващата точка.
И заявката ще се появи отново: „Посочете втората точка:“ - посочете друга точка.
Искането: "Посочете втората точка:" ще се повтаря безкрайно много пъти, докато спрем програмата с натискане на (или ).
Ако натиснете функцията getpoint връща нула, цикълът while ще прекъсне и изпълнението на програмата ще продължи.
Програмата ще начертае мрежа от канали. Вижте фиг. 6.
Ориз. 6. Мрежа от въздуховоди.
Ако бъде натиснат, изпълнението на цялата програма ще бъде прекъснато. В командния ред ще се появи съобщение за грешка. Вижте фиг. 7.
ориз. 7. Прекъсване на програмата с "Esc"
Последният ред на функцията Vml
няма да бъдат изпълнени.
Беше изпълнено във всеки случай, добавете функция за обработка на грешки:
Функцията *error* ще се изпълни, когатовъзникне каквато и да е грешка
Той ще запише името на грешката в променливата msg.
След това отпечатваме името на грешката в командния ред:
И върнете първоначалния стил на многоредовия:
За да избегнем грешка, ако потребителят натисне " Esc ", когато бъде подканен за първата точка, пропускаме реда:
Променяме текста на заявката на втората точка на по-разбираем:
Добавяме всичко по-горе към програмата. Вижте фиг. 8.
Ориз. 8. Vml функция с манипулатор на грешки.
Как да запомните последния изграден въздуховод?
Би било хубаво, ако нашата програма, когато се рестартира, показва данните на последния конструиран канал в диалоговия прозорец. Неговата форма на напречно сечение, дебит и размер.
За да се случи това, трябва някъде да съхраняваме тези данни, докато диалоговият прозорец е затворен.
Предлагам да ги съхранявате в моделното пространство vla обект. За да направим това, се нуждаем от функциите за разширение на езика LISP.
който зарежда функции за разширение на езика LISP.
След това получаваме името на vla-обекта на самата програма AutoCAD и го съхраняваме в променливата acad_object:
След това дефинираме името на активния документ и го съхраняваме в променливата active_document:
И накрая, името на vla обекта на моделното пространство, което се съхранява в променливата model_space:
Нека добавим тези редове към основната програма. Вижте фиг. 9.
Ориз. 9. Допълнения към основната програма.
Докато диалоговият прозорец е отворен, можем да прочетем стойността на радио бутона „Кръгъл“ (код „rb_K“):
И след това използвайте функцията vlax-ldata-put, за да го запазите в моделното пространство:
По същия начин запомнете в моделното пространство:
Стойността на радиобутона "Правоъгълен" (код "rb_P"):
Стойността на полето "Разход m3/h" (код "eb_L"):
Иномер на текущия елемент в падащия списък "Размер mm" (код "pop1"):
Нека създадем дефинирана от потребителя функция do_get за запис на данни от диалоговия прозорец в пространството на модела:
И за да се изпълни, точно преди затваряне на диалоговия прозорец, в главната програма, добавете го към реда на натискане на бутона OK:
В резултат на това получаваме:
Добавяме горното към програмата. Вижте фиг. 10.
Ориз. 10. Функция за запис на данни от диалогов прозорец в моделно пространство.
Сега данните, които са били последни в диалоговия прозорец, се съхраняват в пространството на модела.
И ние просто трябва да ги извлечем от там, когато отворим отново диалоговия прозорец
Функцията vlax-ldata-get се използва за извличане на данни:
Извлечете стойността на бутона за избор "Кръг" (код в пространството на модела "za_rb_K")
И като използвате функцията set_tile, присвоете извлечената стойност на радиобутона „Round“ (код „rb_K“):
По подобен начин четем от моделното пространство и присвояваме стойности:
Радио бутон "Правоъгълен" (код "rb_P"):
Полето "Разход m3/h" (код "eb_L"):
Падащ списък "Размер mm" (код "pop1"):
Обърнете внимание, че не можем да присвоим стойност на падащия списък „Размер mm“ (код „pop1“ ), докато o не бъде попълнено.
Следователно, преди линията
Извикваме функцията за попълване на падащия списък iz_sech :
Нека създадем персонализирана функция do_put за запис на данни от моделното пространство в диалоговия прозорец:
В основната програма ще изпълним тази функция веднага след отваряне на диалоговия прозорец:
Тъй като функцията ( iz_sech ) ще бъде изпълнена, когато се извика ( do_put ), тя трябва да бъде премахната от основната програма.
Добавяме всичко по-горе. Вижте фиг. единадесет.
Ориз. 11. Функцията за запис на данни от моделното пространство в диалоговия прозорец.
Отидете на AutoCAD;
В командния ред въведете pr_ush и натиснете .
Ще се отвори диалогов прозорец. Променете формата на секцията няколко пъти: кръгла на правоъгълна и обратно.
Така променяме съдържанието на падащия списък. На дадена стъпка програмата не знае кой елемент от списъка трябва да стане текущ.
Ориз. 12. Текущата стойност на падащия списък е празна.
Щракнете върху бутона "Отказ", прозорецът ще се затвори.
За да коригирате това, добавете следния ред към персонализираната функция за промяна на формата на секцията iz_sech:
( set_tile "pop1" ( vlax-ldata-get model_space "ms_pop1" "0") ))
Ориз. 13. Функцията за промяна на формата на секцията.
Този ред ще вземе номера на елемента от моделното пространство (ако вече не е там, ще приеме стойността "0" - първият елемент от списъка) и ще го направи текущия в падащия списък.
Отидете на AutoCAD;
В командния ред въведете pr_ush и натиснете .
Ще се отвори диалогов прозорец.
Променете формата на секцията на "Правоъгълна"; Променете "Поток m3/h" на 750; Изберете "Сечение mm" 250x200 и щракнете върху OK. Вижте фиг. 14.
Ориз. 14. Диалогов прозорец.
Изберете три точки, за да нарисувате чифт канали. Вижте фиг. 15.
Ориз. 15. Въздуховоди.
Кликнете, за да прекратите програмата.
И натиснете отново, за да повторите командата.
Ще се отвори диалогов прозорец с данните за последния изграден канал. Вижте фиг. 16.
Ориз. 16. Диалогов прозорец.
Как да добавя допълнителни данни към канала?
Когато създавате програми на езика LISP, често има нужда от добавяне къмконструиран обект (примитив) допълнителни данни. Така че те се съхраняват в него и, ако е необходимо, е възможно да ги извадите оттам.
Това може да стане по няколко начина. Но в тази статия ще разгледаме, по мое мнение, най-простите от тях.
Но между другото, вече го разгледахме малко по-високо, когато записахме данните във vla-обекта на пространството на модела.
Факт е, че по този начин можете да съхранявате данни във всеки vla-обект.
За да добавите допълнителни данни към многоредов (канал):
Използвайки функцията entlast, извлича името на последния изтеглен примитив (многоредов):
След това, използвайки функцията vlax-ename->vla-object, ние го преобразуваме във vla обект:
Низът ще върне името на vla-обекта.
Запазете го в променливата vla_puch
Сега нека добавим размер на раздел към нашия vla обект. Отново използване на функцията vlax-ldata-put:
Нека разберем в коя променлива съхраняваме размера на секцията.
Имаме тази променлива в потребителската програма за изчисляване на скоростта ras_v.
За да бъдем по-точни, има две такива променливи:
ориз. 17. Две променливи с размер на раздела.
Нека променим малко програмата, така че променливите да съвпадат. Нека заменим реда:
И не забравяйте да премахнете L и RazP от списъка с временни променливи. Те ще се използват извън функцията ras_v.
Ориз. 18. Функция за изчисляване на скоростта.
Сега функцията за добавяне на размер на раздел към нашия vla обект ще изглежда така:
По същия начин добавете стойността на въздушния поток:
Към персонализираната функция Vml, непосредствено след реда за изграждане на мултиреда. Вижте фиг. 19.
Ориз. 19. Вмъкване на многоредова функция.
И така допълнителнодобавени данни.
И накрая, трябва да добавим променливи към основната програма, които са създадени в дефинирани от потребителя функции и използвани след завършването им. И също така нови променливи, които са създадени в него. Вижте фиг. 20.
Ориз. 20. Основна програма.
Крайната версия на програмата. Вижте фиг. 21.
Ориз. 21. Крайната версия на програмата.
Нека проверим дали всичко работи правилно за нас
Отидете на AutoCAD;
В командния ред въведете pr_ush и натиснете .
Ще се отвори диалогов прозорец.
Въведете "Поток m3/h" 1000 .
Изберете "Сечение mm" 300x150 и щракнете върху OK. Вижте фиг. 22.
Ориз. 22. Диалогов прозорец.
Изберете две точки. Програма за изграждане на въздуховод. Вижте фиг. 23.
Ориз. 23. Въздуховод.
За да проверите дали съдържа допълнителни данни, които сме добавили.
Извън програмата, само за тестване, добавете следните три реда:
Ние четем и конвертираме последния конструиран обект във VLA обект:
Извличаме данни от него под код "Размер":
Извличаме данни от него под код "Rashod":
Изберете и трите реда и кликнете върху бутона "Зареждане на селекцията". По-долу прозорецът на Visual LISP Console ще покаже резултатите от изпълнението на тези редове. Вижте фиг. 24.
Ориз. 24. Извлечете добавените данни.
Това означава, че каналът всъщност съхранява допълнителни данни.
Това приключва нашия урок. В него разгледахме някои въпроси наавтоматизациятапроектирането с помощта на програми, написани на езика LISP.
Искате да получавате известия, когато се пускат нови статии. Абонирай се.