Articol

AutoLISP: Mediatoarea unui segment

Vă propun să analizăm și eventual să creăm o mică unealtă în limbajul de programare AutoLISP/VisualLISP

Mircea Badut30.09.2025 · 4 min
PUBLICITATE
Article Thumbnail Image

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 segmen­tului dorit, și apoi 

(4) alegerea direcției pentru perpendiculara pe segment. 

Problema este că nu putem impune acum condiția de perpendicularitate pe segmentul selec­tat (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 (com­mand "ucs" "ob" (car (entsel "\nSelectati segmen­tul vizat:"))) inserată în eventualul program înainte de (command "Line" "mid" ...).) Însă poate că ar fi mai simplu să recurgem la alinierea mecanis­mului 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 avan­tajul 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 exten­sia 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 par­ticular 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).

mb_i1_4_2025.webp

0
Logo Mircea Badut
Mircea Badut
0 produse143 articole
PUBLICITATE

Din aceeași categorie

Article Thumbnail Image
Article Thumbnail Image
Article Thumbnail Image

AutoCAD 2027

deMircea Badut
20.05.2026
PUBLICITATE
PUBLICITATE

Video din aceeași categorie

PUBLICITATE

Ultimele știri

Article Thumbnail Image

Industria mondială de robotică cere strategii comune pentru accelerarea automatizării

Patru organizații reprezentative pentru industria mondială de robotică și automatizare – AER Automation din Spania, A3 – Association for Advancing Automation din SUA, International Federation of Robotics (IFR) și VDMA Robotics + Automation din Germania – au semnat, la Barcelona, Declarația de la Barcelona privind Robotica și Automatizarea 2026.

PUBLICITATE
Logo Mircea BadutMircea Badut
Newsletter

Nu mai irosi timp căutând știri și noutăți despre ultimele tehnologii apărute în industrie. Îți trimitem noi!

Spune-ne ce te interesează și noi îți vom trimite informații în funcție de preferințele tale.

Despre noi

Revista specializată T&T - Tehnică și Tehnologie este un instrument nelipsit profesioniștilor din orice companie din industrie, util pentru a ține pasul cu noutățile tehnologice de ultima oră.
Facebook logo iconLinkedIn logo icon

Contact

(+40 21) 340 28 68
office@tehnicmedia.ro
Aleea Barajul Iezeru 6A, București 032799, România
Copyright: Tehnic Media © 2026
Design by High Contrast. Development by Neo Vision.