Vă propun să analizăm și eventual să creăm o mică unealtă în limbajul de programare AutoLISP/VisualLISP (rulând sub mediul software AutoCAD sau sub vreun software urmaș de IntelliCAD), pornind de la o temă geometrică aparent simplă: trasarea de mediatoare (sau „bisectoarea perpendiculară a unui segment”).
Să presupunem că apare o situație în care avem de trasat multe mediatoare într-un desen (sau poate la o serie de mai multe desene), astfel – firește – ne vom gândi că ne-ar fi utilă o aplicație care să ne ajute la această sarcină, și – dacă lucrăm cu un mediu AutoCAD/IntelliCAD – atunci ne vom aminti de LISP. ,,Wow!". O aplicație AutoLISP/VisualLISP?! ,,Long Time No See", cum ar spune anglofonul. Dar înainte de a scrie/analiza vreun cod sursă în venerabilul limbaj de programare, ar fi necesar să înțelegem de ce tema aceasta de geometrie elementară nu este chiar simplu de rezolvat în software-urile CAD/ CADD. (Ne amintim: mediatoarea unui segment înseamnă perpendiculara pe acel segment pornită din chiar mijlocul său.)
Să ne imaginăm (și eventual să încercăm) rezolvarea punctuală, adică trasarea unei mediatoare undeva în desenul existent în AutoCAD/IntelliCAD! Manevra ar presupune:
(1) apelarea comenzii LINE,
(2) impunerea modului OSNAP scriind la prompter imediat ,,mid",
(3) selectarea cu mouse-ul/cursorul a segmentului dorit, și apoi
(4) alegerea direcției pentru perpendiculara pe segment.
Problema este că nu putem impune acum condiția de perpendicularitate pe segmentul selectat (mediul CAD/CADD nu permite două moduri OSNAP simultane), așa că linia noastră, pornită din mijlocul segmentului va fi condiționată unghiular doar de eventualul mecanism de asistență POLAR (dacă este activ; și eventual îl activăm cu tasta F10), care mecanism nu știe de intenția noastră unghiulară.
Vom observa că unghiurile propuse dinamic de asistența POLAR (0°, 90°, 180°, 270°) sunt raportate implicit la UCS (sistemul de coordonate curent), ceea ce ne sugerează că reorientarea UCS-ului prin aliniere la segmentul vizat ar putea fi o soluție. (Adică o instrucțiune AutoLISP de genul (command "ucs" "ob" (car (entsel "\nSelectati segmentul vizat:"))) inserată în eventualul program înainte de (command "Line" "mid" ...).) Însă poate că ar fi mai simplu să recurgem la alinierea mecanismului POLAR la respectivul segment, adică printr-o instrucțiune (setvar "polarmode" 1), pe care însă va trebui la finalul programului să o anulăm prin (setvar "polarmode" 0), pentru a readuce mediul AutoCAD/ IntelliCAD la starea implicită/firescă. (O abordare similară ar putea combina comanda UCS cu modul ORTHO de asistență a desenării.)
Ne putem juca la prompterul de comenzi inserând direct instrucțiunile AutoLISP de mai sus (ceea ce vă și recomand), exploatând astfel avantajul interacțiunii imediate (dat de faptul că mediul LISP de programare este aici unul interpretativ). Însă dacă încercăm să reunim imediat aceste comenzi într-un program-sursă (adică un fișier text cu extensia LSP, pentru a fi încărcat apoi în AutoCAD/ IntelliCAD prin comanda APPLOAD, sau din meniul-ribbon Manage > Load Application) vom vedea că nu funcționează (deoarece comanda LINE nu poate rămâne suspendată; altfel am fi putut introduce unghiul, prin coordonate polare, la prompterul "from point").
Așa că ne rămâne varianta ,,forței brute", adică să încercăm a scrie un mic program AutoLISP care să facă intern ceea ce voiam să se întâmple la nivelul comenzilor AutoCAD/IntelliCAD. Pentru asta va trebui să alcătuim codul sursă LISP care să ana-lizeze segmentul de linie vizat/selectat, să îi extragă coordonatele celor două capete, să calculeze unghiul lui de înclinare, și doar apoi să apeleze comanda LINE și să îi impună acesteia atât punctul de plecare (mijlocul segmentului, calculat ca medii aritmetice ale coordonatelor X și Y ale celor două capete) cât și unghiul de înclinare (perpendicular pe segmentul nostru).
Desigur, (și ceea ce va constitui o complicație în plus în viitorul program) va trebui să tratăm particular cele două cazuri de existență ale segmentului de linie:
(1) când entitatea este de tip linie,
(2) când entitatea este de tip poli-linie.
Aplicația propusă ca exemplu definește o comandă nouă (numită ,,mediatoare"), pe care o vom putea introduce ulterior la prompterul de comenzi din AutoCAD/IntelliCAD.
Și dacă vom scrie aplicația folosind mediul de programare VisualLISP integrat în AutoCAD (apelabil tot din meniul Manage), vom remarca puternicele facilități de auditare/asistență (precum urmărirea animată a instrucțiunilor și a variabilelor din codul sursă, la simularea/analizarea aplicației).









