Nukopijuokite ir pasukite lengvai naudodami LISP

Priešingai nei .NET pavyzdyje, į kurį atkreipiau dėmesį paskutiniame šio tinklaraščio epizode, čia yra paprastas LISP komandos, naudojamos objektams nukopijuoti ir pasukti, pavyzdys:

 (nelemtas c: kopijavimas (/ „slset pt1 pt2“) (paraginti „Pasirinkite subjektus, kuriuos norite kopijuoti ir pasukti:“) („setq sset“ („ssget“)) („setq pt1“ („getpoint“ „Nurodykite kopijos bazinį tašką:“)) („terpri“) („setq pt2“) (gavimo taškas pt1 "Nurodykite antrą taško kopiją:")) (terpri) (komanda ".copy" sset "" pt1 pt1 ".move" sset "" pt1 pt2 ".redraw") (setq pt2 (getpoint "Nurodykite pasukti bazinį tašką" : ")) (terpri) (komanda" .rotate "sset" "pt2))

Dabar tai trumpa programa! Kaip jau minėjau aukščiau, ši „komanda“ sujungia komandas „Perkelti“ ir „Pasukti“ į vieną komandą.

Ta pati programa su komentarais:

LISP kabliataškis žymi komentaro eilutę, todėl viskas, kas yra po to, nėra apdorojama.

(neveikiantis c: kopijavimas (/ slzet pt1 pt2)
; nusako komandos funkciją „copy“
(paraginti „Pasirinkite subjektus, kuriuos norite kopijuoti ir pasukti:“)
; paraginkite vartotoją komandinėje eilutėje 
(setq sset (ssget))   
; paraginti vartotoją pasirinkti objektus      
; kintamasis, kuriame yra objektai, yra „sset“
(„setq pt1“ (gavimo taškas „Nurodykite kopijos bazinį tašką:“)) (terpri)
; gauti pagrindinį tašką „pt1“
(setq pt2 (getpoint pt1 "Nurodykite antrą kopijos tašką:")) (terpri)
; gauti antrą tašką „pt2“
(komanda ".copy" sset "" pt1 pt1 ".move" sset "" pt1 pt2 ".redraw")
; nukopijuokite objektus vietoje ir perkelkite ankstesnius…; lengviausias būdas nukopijuoti ir pasukti naujai sukurta objektų grupė
(„setq pt2“ (taškas „Nurodykite pasukimo bazinį tašką:“)) (terpri)
; pasukite pagrindinį tašką ... kaip šalutinį užrašą,
; Aš labiau norėčiau kaip pagrindinį tašką iš originalo naudoti kaip sukimosi centrą
; Norėdami tai padaryti, tiesiog pašalinkite arba pakomentuokite aukščiau esančią eilutę “; (setq pt2“
(komanda ".rotate" sset "" pt2)
; pasukti anksčiau perkeltą grupę
)
; uždaryti funkciją

Norėdami patobulinti savo funkcijos naudojimą, galėtume pridėti „o“ kilpą (kad nuolat prašytume daugiau pasirinkimų) ir suteikti kampines parinktis, įjungti / išjungti „Osnaps“ ar „Ortho“ ir tt ...

Ar LISP rutina yra per daug?

Pateikęs tai, aš jums pasakysiu, kad yra daug atvejų, kai LISP rutina gali būti per daug sunaikinta. Jei tiesiog vykdote komandų eilutes, kurioms nereikia „manipuliuoti“ duomenimis tarp funkcijų, arba kai duomenų įvedimas yra nuoseklus, tada meniu makrokomandos gali būti dar efektyvesnės nei LISP. Tačiau meniu makrokomandos negali būti suprojektuotos atsižvelgiant į pasirinkimą ir gali būti „trapios“, tai yra, lengvai sulaužomos, nes negali valdyti klaidų. Mano rekomendacija? Štai šiek tiek hibrido - tai vienos eilutės LISP rutina:

* ^ c ^ c (komanda „Pasirinkite“ pristabdyti „kopijuoti“ „p“ „“ „@“ „@“ „judėti“ „p“ „“ pristabdyti pauzę „pasukti“ „p“ ““ „@“ pristabdyti)

Ši paprasta, tačiau elegantiška LISP „makrokomanda“ veikia tiksliai taip, kaip aukščiau pateiktoje programoje, su pridėtu automatiniu funkcijų pakartojimu (* ^ c ^ c) ir pateikia visus dinaminius grafinius vartotojo atsiliepimus apie sudėtingą programą. Tiesiog pridėkite piktogramą prie vieno iš savo meniu naudodamiesi CUI sąsaja ir įkiškite aukščiau esančią eilutę į komandų eilutę, ir jūs turite puikią kopijavimo / pasukimo funkciją.

Tinkamas darbo įrankis

Galbūt galvojate, kad lygiai taip pat lengva naudoti „Grips in BricsCAD“ ir dešiniuoju pelės mygtuku spustelėkite, jei norite pereiti per visas parinktis. Mano atsakymas būtų priminimas, kad aš esu (tikrai) sena mokykla ir, nors dažnai naudojuosi „Grips“, aš taip pat žinau, kad klavišas „Esc“ visada buvo pirmasis klavišas, kuris mirė nuo piktnaudžiavimo mano klaviatūra (gerai, tikrai ne). Pagrindinis dalykas yra įsitikinti, kad naudojate reikiamą įrankį šiam darbui, ir, nors .NET programoms tikrai yra tinkamas panaudojimas, aš negaliu priversti savęs rašyti sudaryto kodo puslapių, kai galiu švariai atlikti darbą su kelios LISP eilutės.

Tikimės, kad šis įvadas sulaukė jūsų susidomėjimo. Manau, kad pasinerdami į LISP pasaulį, rasite naudingų patarimų / pasiūlymų. Atminkite, kad viskas priklauso nuo to, ar greitai ir tiksliai atliksite savo projektavimo darbus. Kas gali būti geresnis būdas nei naudoti funkcijas, įmontuotas BricsCAD, kad ji veiktų kaip jums tinkama?