Šiame įraše apžvelgiame galingiausią „ne programuotojams“ prieinamą metodą, tinkinantį BricsCAD - LISP programavimo kalbą. Šiame įraše sužinokite pirmuosius veiksmus, kurių reikia norint surašyti savo LISP tvarką.

Norėdami gauti visą LISP komandų, skirtų BricsCAD, apžvalgą, galite peržiūrėti oficialius, BricsCAD LISP kūrėjo vadovas.


Šiame įraše aptariamos šios temos:


KODĖL RAŠYTI PROGRAMĄ?

Jei esate panašūs į daugelį CAD vartotojų, esate užsiėmę kurdami brėžinius ir neturite laiko išmokti rašyti programinės įrangos programas. Be abejo, jums gali kilti klausimas: „Kodėl nerimauti mokytis programavimo kalbos?“ Tam tikra prasme tai yra tarsi vėl grįžti į mokyklą. Sėdėjimas klasėje kartais atrodo kaip laiko švaistymas.

Bet tai, ką išmokote dabar, palengvina gyvenimą vėliau. Kai kurių LISP programavimo mokymasis reiškia, kad jausitės tikrai gerai, išnaikindami keletą kodo eilučių, kad LISP galėtų atlikti varginančias užduotis. Gražus dalykas LISP yra tai, kad jūs galite jį programuoti skraidydami. Ir jūs galite naudoti tai tikrai paprastoms, bet varginančioms užduotims.

Štai pavyzdys, kurį naudosime šiai mokymo programai:

ID komanda

BricsCAD turi ID komanda. Kai pasirenkate tašką ekrane, ID praneša taško 3D x, y, z koordinates. Problema yra, ID praneša komandų eilutės srityje esančią vertę, kaip ši:

: ID
Pasirinkite tašką, kad nustatytumėte koordinates: (Pasirinkite tašką.)
X = 8,9227 Y = 6,5907 Z = 0,0000

Argi nebūtų puiku, jei galėtumėte pasikeisti ID taip, kad jis pateiktų koordinates brėžinyje, šalia paėmimo taško? Tai leistų jums pažymėti x, y-koordinates ir z-aukščius virš svetainės plano. Su LISP galite.

ATSAKYMO PLANAS

Prieš rašydami bet kurį LISP kodą, turite išsiaiškinti, kaip pateksite tas x, y, z koordinates komandų eilutės srityje ir į brėžinį. Pripažinkite, kad yra dvi problemos sprendimo dalys:

1 dalis. Gaukite koordinates iš brėžinio, tikriausiai, pasirinkdami tašką.
2 dalis. Padėkite koordinates kaip tekstą brėžinyje.

Koordinačių gavimas

LISP pateikia kelis būdus, kaip gauti pasirinkto taško koordinates. Naršymas per LISP programavimo kalbos nuoroda, sužinote, kad galėtumėte:

  • Naudokite ID komandą su komandų funkcija, kaip ir (komanda „ID“).
  • Naudokite LastPoint sistemos kintamasis su getvar funkcija, kaip ir („getvar“ paskutinis taškas).
  • Naudokite gauti tašką funkcija, kaip ir (taškas „Pasirinkite tašką:“)

Būtų naudinga pamoka panaudoti kiekvieną iš trijų ir tada pamatyti, kas atsitiks. Eksperimentuodami darote klaidas, o paskui mokykitės iš klaidų.

  1. Paleiskite BricsCAD, įkelkite piešinį ir perjunkite į langą Prompt History naudodami F2. Prie „:“ raginimo įveskite:

    : (komandųID“)

    Čia vykdote BricsCAD komandą (Id) iš LISP rutinos. Komandų funkcija leidžia
    LISP naudojate bet kurią BricsCAD komandą. BricsCAD komanda yra kabutėse „ID“, nes komanda yra eilutė („teksto“ programuotojo pokalbis). Kaip ir anksčiau, BricsCAD ragina jus nurodyti tašką.

  2. Reaguodami į LISP rutinos raginimą, pasirinkite tašką:

    Pasirinkite tašką, kad nustatytumėte koordinates: (Pasirinkite tašką.)
    X = 8,9227 Y = 6,5907 Z = 0,0000

  3. Jums nežinomas, BricsCAD visada saugo paskutiniojo taško x, y, z koordinates sisteminiame kintamajame, vadinamame LastPoint. Taigi, jūs turėtumėte nukopijuoti koordinates iš LastPoint į savo paties kintamąjį. Tai turite padaryti, nes „LastPoint“ koordinatės yra perrašomos kitą kartą naudojant komandą, kuri naudoja pasirinktą tašką.
    Iš šio skyriaus prisiminkite, kad setq funkcija saugo reikšmes kintamuosiuose. Pasinaudokite ja dabar. Prie „:“ raginimo įveskite:

    : (setq xyz (getvar LastPoint“))
    (8.9227 6.5907 0.0000)

    • Ksyzas yra kintamojo, kuriame kaupiate x, y, z koordinates, pavadinimas.
    • Getvaras yra funkcijos LISP, kuri nuskaito sistemos kintamajame saugomą vertę, pavadinimas.
    • Ir „LastPointYra sistemos kintamojo vardas; jį supa kabutės, nes tai yra sistemos kintamojo vardas (eilutė).

    Įvedęs LISP funkciją, BricsCAD grąžina reikšmę, kurią išsaugojo kintamajame xyz, pvz., (8.9227 6.5907
    0.0000) - jūsų rezultatas bus kitoks. Atkreipkite dėmesį, kaip koordinatės supa skliausteliuose. Tai yra
    vadinamas sąrašu, kuriuo garsėja LISP (tiesa, LISP trumpai reiškia „sąrašo apdorojimą“). Tarpai atskiria skaičius, kurie yra atitinkamai x, y ir z koordinatės:

    x 8,9227
    y 6.5907
    z 0,0000

    BricsCAD vertės visada saugomos x, y ir z tvarka. Niekada nerasite pirmosios z koordinatės arba paskutinės x koordinatės.

Taigi pirmąją problemą mes išsprendėme vienu būdu. Iš brėžinio gavome koordinates, tada jas išsaugojome kintamajame. Mes paminėjome trečiąją LISP funkciją, kuria galėtume naudotis, gauti tašką. Programuotojai teikia pirmenybę gauti tašką nes yra efektyvesnis nei „Id-LastPoint“ combo, kurį mes naudojome aukščiau.

Įveskite taip, kad pamatytumėte, kad jis veikia lygiai taip pat, nes skiriasi tuo, kad pateikiame greitą tekstą („Taškas:“):

: (setq xyz (gauti tašką „Taškas:“))
Punktas: (Pasirinkite tašką.)
(8.9227 6.5907 0.0000)

Kaip ir anksčiau, mes naudojame setq funkcija išsaugoti koordinačių vertę kintamajame xyz. gauti tašką funkcija laukia, kol pasirinksite tašką ekrane. „Taškas:“ vadinamas raginimu, kuris nurodo vartotojui, ko programa tikisi iš vartotojo. Lygiai taip pat lengvai galėjome parašyti bet ką, pavyzdžiui:

: (setq xyz (taškas „Paspauskite pelės mygtuką:“))
Paspauskite pelės mygtuką: (Pasirinkite tašką.)
(8.9227 6.5907 0.0000)

Arba visai negalėjome paraginti:

: („setq xyz“ (gauti tašką))
(Pasirinkite tašką.)
(8.9227 6.5907 0.0000)

Teisingai. Nėra raginimo. Tiesiog tylus BricsCAD kantriai laukia, kol įvyks teisingas įvykis ... ir vartotojas suglumino, kodėl nieko nevyksta. Galima sakyti, kad trūksta bendravimo. Štai kodėl raginimai yra svarbūs.

Dabar matėme keletą požiūrių, kurie skirtingai išsprendžia tą pačią problemą. Turėdami x, y, z koordinates saugiai išsaugotas kintamajame, spręskime antrąją problemą.

TEKSTO PATEIKIMAS

Norėdami įterpti tekstą į piešinį, galime naudoti tik komandų funkcija kartu su Tekstas komanda. Manau, kad MT tekstas komanda gali veikti, bet vienai teksto eilutei - Tekstas komanda yra puiki. Tekstas tačiau komanda yra sudėtingesnė nei ID komanda. Tai turi mažiausiai keturis raginimus, į kuriuos LISP rutina turi atsakyti:

: tekstas
Tekstas: Stilius / Lygiuoti / Tinka / Viduryje / Viduryje / Dešinėje / Pateisinti / :
Teksto aukštis <2>:
Teksto pasukimo kampas <0>:
Tekstas:

Pradinis taškas: skaičių pora, konkrečiai x, y koordinatė.
Teksto aukštis: skaičius, kad tekstas būtų įskaitomas.
Teksto sukimosi kampas: skaičius, tikriausiai 0 laipsnių.
Tekstas: eilutė, mūsų atveju x, y, z koordinatės.

Sukurkime LISP funkciją x, y, z koordinatėms pateikti kaip tekstą:

(komanda „tekstas”Xyz 200 0 xyz)

(komanda yra komandų funkcija.
„Tekstas“ yra BricsCAD Tekstas komanda vykdoma.
xyz kintamasis išsaugo teksto pradžios tašką.
200 yra teksto aukštis. Pakeiskite šį numerį į kažką patogaus jūsų piešiniams.
0 yra teksto pasukimo kampas.
xyz reiškia, kad jums pasisekė: Tekstas komanda priima skaičius kaip tekstą.
) ir atsiminkite: po vieną uždarą skliaustą kiekvienam skliaustui.

Išbandykite tai raginime::

: (komanda „text“ xyz 200 0 xyz)
Tekstas: Stilius / sulygiuoti / pritaikyti / viduryje / viduryje / dešinėje / pagrįsti /:
Teksto aukštis: 200
Teksto sukimosi kampas: 0
Tekstas: 2958.348773815669,5740.821183398367
:

BricsCAD eina per Tekstas komandą, įterpdami atsakymus į jos raginimus, tada pateikdami koordinates kaip tekstą. Mes išsprendėme antrąją problemos dalį.

PADARYTI JĄ VISI

Sudarykime du jūsų problemos sprendimus:

(„setq xyz“ (taškas „Pasirinkimo taškas:“))
(komanda „tekstas“ xyz 200 0 xyz)

Ten tu tai turi: visavertė LISP programa. Na, ne visai. Kiekvieną kartą, kai norite pažymėti tašką, yra skaudu perrašyti tas dvi eilutes. Kitame skyriuje sužinosite, kaip išsaugoti kodą kaip .lsp failas diske. Jūs taip pat apsirengsite kodu.

Įrašymas į paprastą LISP programą

Tai, ką jūs dabar turite algoritmas - kiekvienos kompiuterinę programą, kuri atlieka realų darbą, esmė. Ko labiausiai trūksta vartotojo sąsaja - dalis, kuri palengvina bet kurio vartotojo naudojimąsi programa.

Viskas, ką turite vartotojo sąsajai, yra pirmoji eilutė, raginanti „Pasirinkite tašką, kad nustatytumėte koordinates“. Su šia maža programa kyla daug vartotojo sąsajos problemų. Kiek galite galvoti? Pateikiamas problemų, su kuriomis susidūriau, sąrašas:

  • Kiekvieną kartą, kai norite pažymėti tašką, perrašyti tas dvi eilutes yra skausmas - turite suteikti programai pavadinimą ...
  • ... ir turite jį išsaugoti diske, kad nereikėtų iš naujo įvesti kodo su kiekviena nauja BricsCAD sesija ...
  • ... ir jei jūs daug naudojatės šia LISP programa, turėtumėte turėti galimybę ją įkelti automatiškai.
  • X, y, z koordinatės atspausdintos po aštuonių skaičių po kablelio; daugumai vartotojų tai yra per daug.
  • Galbūt norėsite valdyti sluoksnį, ant kurio dedamas tekstas.
  • Galbūt norėsite konkretaus teksto stiliaus.
  • Be abejo, norėtumėte šiek tiek valdyti teksto dydį ir orientaciją.
  • Čia yra stačiakampė idėja: saugokite x, y, z koordinates faile diske - tik tuo atveju, jei kada nors norėsite pakartotinai naudoti duomenis.

ĮGYVENDINAMAS SAVYBĖS BŪDAS

„Gerai“, galbūt jūs galvojate, „Aš galiu sutikti, kad tai dažniausiai geidžiami patobulinimai. Pirmyn, ponas Grabowski: Parodykite, kaip juos pridėti. “

Bet palauk minutę! Kai nesate susipažinę su LISP, galite nesuvokti, kaip vartotojo sąsaja prideda didžiulį kodą, o tai reiškia daugiau klaidų ir daugiau derinimo. (Jei esate susipažinęs su programavimu, tada jūs žinote, kaip greitai paprasta programa užpildoma funkcijų išsipūtimu.) Nors visos šios papildomos funkcijos skamba pageidautina, jos gali padaryti programą mažiau pageidaujamą. Ar galite įsivaizduoti, kaip susierzinęs galėtumėte atsakyti į klausimus apie dešimtųjų tikslumą, teksto šriftą, teksto dydį, teksto orientaciją, sluoksnio pavadinimą, failo pavadinimą - kiekvieną kartą norėdami pažymėti vieną tašką?

Pažvelkite į aukščiau pateiktą norų sąrašą. Peržiūrėkite jums svarbias funkcijas, tada pašalinkite tas, kuriose galėtumėte gyventi.

Pageidavimų sąrašas punktas #1: Programos pavadinimas

Norėdami suteikti programai pavadinimą, apgaubkite kodą defun funkciją ir suteikite jai pavadinimą taip:

(defun c: etiketė (/ xyz)
(„setq xyz“ (taškas „Pasirinkimo taškas:“))
(komanda „tekstas“ xyz 200 0 xyz)
)

Pažvelkime į tai, kas buvo pridėta, po gabalą:

Funkcijos apibrėžimas - pasimetimas

(šmeižia nusako funkcijos pavadinimą. LISP sąvokos funkcija, programa ir rutina vartojamos pakaitomis (defun trumpas „apibrėžti funkciją“.)

Pavadinimas Funkcija - C:

c: etiketė yra funkcijos pavadinimas. Aš nusprendžiau šią programą pavadinti „Etikete“; jūs galite tai vadinti bet kuo, jei tik vardas neprieštarauja nė vienos įmontuotos LISP ar kitos vartotojo apibrėžtos funkcijos pavadinimui. c: priešdėlis, kad ši LISP rutina atrodytų kaip BricsCAD komanda.

Norėdami paleisti „Label“ programą, viskas, ką jums reikia padaryti, reikia parašyti „etiketę“ prie „:“ raginimo, pavyzdžiui:

: etiketė
Pasirinkite tašką, kad nustatytumėte koordinates: (Pasirinkite tašką.)

Kai c: trūksta prefikso, tada jūs turite paleisti programą kaip LISP funkciją, su skliaustais:

: (etiketė)
Pasirinkite tašką, kad nustatytumėte koordinates: (Pasirinkite tašką.)

Vietiniai ir globalūs kintamieji - /

(/ xyz) skelbia vardus įvestis ir vietiniai kintamieji; pasvirasis bruožas atskiria du:

Įvesties kintamieji - pateikti duomenis į LISP tvarką; įvesties kintamųjų pavadinimai rodomi prieš brūkšnį.
Vietiniai kintamieji - naudojamas tik programose; vietiniai kintamieji pavadinimai rodomi po brūkšnio

Šioje programoje xyz yra kintamojo vardas, kuris griežtai naudojamas programoje. Jei kintamieji nėra deklaruojami kaip vietiniai, jie tampa globalus. Visuotinio kintamojo reikšmę galima pasiekti bet kokia LISP funkcija įkelta į BricsCAD.

Kintamųjų paskelbimas vietiniais pranašumas yra tas, kad BricsCAD automatiškai atlaisvina atmintį, kurią naudoja kintamasis, kai baigiasi LISP programa; trūkumas yra tas, kad vertė prarandama, todėl derinimo darbai tampa sunkesni. Dėl šios priežasties vietiniai kintamieji bus laikomi globaliais, kol programa nebus suderinta.

Ir ) uždarant skliaustelius balansuojamas pradinis skliaustas programos pradžioje.

Pageidavimų sąrašo punktas #2: programos išsaugojimas

Išsaugodami programą diske esančiame faile išvengsite pakartotinio kodo įvedimo su kiekviena nauja BricsCAD sesija. Jūs darote tai taip:

  1. Paleiskite teksto rengyklę (gerai naudojama užrašų knygelė, tiekiama su „Windows“ arba „Teksto redagavimas“ su „Linux“ ir „Mac“). Įrašyk rodomą kodą:

    (defun c: etiketė (/ xyz)

    (setq xyz (getpoint “Pasirinkite tašką: “))
    (komanda „text“ xyz 200 0 xyz)

    )

    Aš įbrėžiau kodą viduryje, kad jis išsiskirtų iš defun linija ir uždarymo skliaustas. Tai yra įprasta tarp programuotojų; įtraukos palengvina kodo skaitymą. Galite naudoti tarpus arba tabuliatoriaus klavišą, nes LISP nerūpi.

  2. Įrašykite failą pavadinimu label.lsp BricsCAD aplanke.

Pageidavimų sąrašo punktas #3: Automatiškai įkeliama programa

Norėdami įkelti programą į BricsCAD, įveskite:

: (apkrova „Etiketė“)

Jei BricsCAD negali rasti LISP programos, turite nurodyti kelią. Darant prielaidą, kad išsaugojote etiketė.lsp \ cad \ palaikymas aplanką, įvestumėte: (įkelti „\\ cad \\ support \\ label“)

Dabar pabandykite naudoti taškų žymėjimo rutiną taip:

: etiketė
Pasirinkite tašką, kad nustatytumėte koordinates: (Pasirinkite tašką.)

PATARIMAS BricsCAD suteikia galimybę automatiškai įkelti LISP programas. Paleidus BricsCAD, jis ieško failo, pavadinto on_doc_load.lsp.lsp. BricsCAD automatiškai įkelia faile išvardytų LISP programų pavadinimus.
Pridėti label.lsp prie on_doc_load.lsp lengva. Atidarykite „on_doc_load.lsp“ failą naudodami teksto rengyklę (jei failo nėra, tada paleiskite naują failą pavadinimu on_doc_load.lsp ir išsaugokite aplanke \ BricsCAD). Pridėkite programos pavadinimą: (įkelkite „label.lsp“). Įrašykite failą on_doc_load.lsp. Paleiskite BricsCAD ir ji turėtų automatiškai įkelti etiketę .——–

Pridedant etiketė.lspon_doc_load.lsp yra lengva. Atidaryk on_doc_load.lsp failą su teksto rengykle (jei failo nėra, tada paleiskite naują failą, vadinamą acad.lsp ir laikykite \ BricsCAD aplankas). Pridėkite programos pavadinimą:

(įkelti „label.lsp“)

Išsaugokite on_doc_load.lsp byla. Paleiskite BricsCAD ir jis turėtų būti įkeltas etiketė automatiškai.

#4 norų sąrašas: Naudokite automobilį ir Cdr

X, y, z koordinatės atspausdintos iki aštuonių skaičių po kablelio - tai per daug. Yra du sprendimai.

Vienas yra paprašyti vartotojo dešimtųjų tikslumu, kaip parodyta šiame kodo fragmente:

: (setq uprec (getint „Etiketės tikslumas:“))
Etiketės tikslumas: 1
1

Arba pavogkite sistemos kintamajame saugomą vertę LUPrec - vartotojo nurodytas tikslumas per Units (Vienetai) komanda - remiantis (nebūtinai tiesa) prielaida, kad vartotojas nori nuoseklių vienetų. Kodas tai padaryti yra toks:

(setq uprec (getvar „LUPREC“))

Tai buvo lengva dalis. Kieta dalis taikydama tikslumą x, y, z koordinatėms, atliekama trimis etapais: (1) atskirti koordinačių trigubą; 2) taikyti tikslumo koeficientą; ir (3) sujungti koordinates. Štai taip:

  1. Atidarykite label.lsp „NotePad“ ar kitame teksto rengyklėje. Pašalinkite / xyz iš kodo. Tai daro kintamąjį „globaliu“, kad galėtumėte patikrinti jo reikšmę greitai pateikdami „BricsCAD“: '. Kodas turėtų atrodyti taip:

    (apgauti c: etiketė

    („setq xyz“ (taškas „Pasirinkimo taškas:“))
    (komanda „tekstas“ xyz 200 0 xyz)

    )

  2. Išsaugokite ir įkelkite label.lsp į BricsCAD.
  3. Paleiskite „label.lsp“, pasirinkdami bet kurį ekrano tašką. Jei nematote ekrane atspausdintų koordinačių, padidinkite mastelį.
  4. Prie „:“ raginimo įveskite:

    : ! xyz
    (6.10049 8.14595 10.0)

    Šauktukas verčia BricsCAD atspausdinti kintamojo xyz vertę, kurioje yra x, y, z koordinatės. Rezultatai skirsis, atsižvelgiant į tai, kur pasirinkote.

  5. LISP turi keletą funkcijų, kaip atskirti sąrašą. Čia jūs naudojate automobilio ir cdr funkcijas bei jų derinius. automobilis funkcija iš sąrašo ištraukia pirmąjį elementą (x koordinatę). Išbandykite dabar:

    : (automobilis xyz)
    6.10049

  6. cdr funkcija yra papildymas automobilis. Jis pašalina pirmąjį elementą iš sąrašo ir pateikia tai, kas liko:

    : (cdr xyz)
    (8.14595 10.0)

  7. Be to automobilis ir cdr, LISP leidžia man keliais būdais sujungti „a“ ir „d“, kad ištraukčiau kitus sąrašo elementus. Norėdami išgauti y koordinatę, naudokite kadr, taip:

    : (kadr xyz)
    8.14595

  8. Norėdami gauti z koordinatę, naudokite kaddr, taip:

    : (kaddr xyz)
    8.14595

  9. Aš dabar turiu būdą, kaip iš kintamojo xyz išgauti x, y ir x koordinates. Įrašysiu juos į savo kintamuosius taip:

    : (setq ptx (automobilis xyz)
    Trūksta: 1) > pty (kadr xyz)
    Trūksta: 1) > ptz (kaddr xyz)
    Trūksta: 1) >)

    Jūs naudojate kintamąjį PtX saugoti x koordinatę, PtY y koordinatę ir kt. Be to, aukščiau esančiame kode buvo naudojama LISP sutrumpinimo forma, leidžianti nustatyti setq funkciją keliems kintamiesiems. Prisiminkite priežastį, dėl kurios atsirado BricsCAD „Trūksta: 1) >“: ji primena, kad trūksta uždarymo skliausteliuose.

  10. Dabar, kai trys koordinatės yra atskirtos, galite pagaliau sumažinti dešimtųjų skaičių. Yra keletas būdų, kaip tai padaryti. Naudoti rtos funkcija, nes ji daro du dalykus vienu metu: (1) keičia skaičių po kablelio skaičių į bet kokį skaičių nuo 0 iki 8; ir (2) paverčia tikrąjį skaičių į eilutę.
    Kodėl stygos? Pamatysite vėliau. Dabar čia yra rtos funkcija darbe:

    : (rtos „ptx 2 uprec“)
    “6.1”

    rtos funkcija naudoja tris parametrus: ptx, 2 ir uprec.
    PtX Kintamojo, turinčio tikrąjį skaičių, pavadinimas.
    2 Konversijos tipas, šiuo atveju po kablelio. Skaičius 2 pagrįstas sistemos kintamuoju LUnits, kuris nusako penkis vienetų režimus:

    1. Mokslinis
    2. Dešimtainiai skaičiai
    3. Inžinerija
    4. Architektūrinis
    5. Dalinis

    „UPrec“ Tikslumą užtikrinančio kintamojo pavadinimas (šio skyriaus pradžioje esantis kodas). Tai skiriasi priklausomai nuo vienetų tipo. Pavyzdžiui, 2 vertė po kablelio reiškia dvi dešimtųjų tikslumu; a 2 - architektūrinis reiškia ketvirčio colio.
    Darant prielaidą, kad tikslumas yra „UPrec“ yra 1, rtos funkcija aukščiau esančiame kodo fragmente sumažina 6.10049 iki 6.1.

  11. Tris kartus nupjaukite ir išsaugokite x, y ir z reikšmes:

    : (setq ptx (rtos „ptx 2 uprec“)
    1> pty (rtos Pty 2 uprec)
    1> ptz (rtos ptz 2 uprec)
    1>)

    Atminkite, kad galite nustatyti kintamąjį, lygų sau: PtX išlaiko naują x koordinatės reikšmę po to, kai rtos baigs apdoroti ankstesnę vertę, saugomą PtX. Pakartotinis kintamojo pavadinimo panaudojimas padeda išsaugoti atmintį.

  12. Kai koordinatės yra apipjaustytos, dabar jas turėsite susieti (atleisti nuobaudos) kartu su strcat funkcija, sutrumpinta styginių sujungimas. Išbandykite dabar:

    : (strcat ptx pty ptz)
    “6.18.110.0”

    Tai labiau patinka!

  13. Grįžti į teksto rengyklę. Įrašykite kodą, kurį sukūrėte čia, paryškintą pusjuodžiu šriftu, o LISP funkcijas - purpurine spalva:

    (defun c: etiketė (/ xyz xyz1 uprec ptx pty ptz)

    (setq uprec (getint „Etiketės tikslumas:“))
    (setq xyz (gauti tašką „Pasirinkite tašką:“))
    (setq ptx (automobilis xyz)
    pty (kadr xyz)
    ptz (kaddr xyz)
    )
    (setq ptx (rtos „ptx 2 uprec“)
    pty (rtos Pty 2 uprec)
    ptz (rtos ptz 2 uprec)
    )
    (setq xyz1 (strcat „ptx“, „pty“, „ptz))
    (komandų „Tekstas“ xyz 200 0 xyz1)

    (

  14. Atminkite, kad visi kintamieji yra vietiniai. Atkreipkite dėmesį ir į kintamojo xyz pakeitimą paskutinėse keliose eilutėse: nenorite, kad tekstas būtų dedamas suapvalintomis koordinatėmis, todėl naudokite xyz1 kaip kintamąjį, turintį teksto eilutę.
  15. Galiausiai prie savo kodo turėtumėte pridėti komentarų, kad primintumėte, ką jis daro, kai žiūrite į kodą po kelių mėnesių. Kabliataškiai rodo komentarų pradžią:

    ; „Label.Lsp“ pažymi pažymėtą tašką jo x, y, z koordinatėmis.
    ; Ralph Grabowski, 1996 m. vasario 25 d.
    (nevykdyti c: etiketė (/ xyz xyz1 uprec ptx pty ptz)

    ; Klauskite vartotojo po kablelio skaičiaus:
    („setq uprec“ (getint „Etiketės tikslumas:“))
    ; Paprašykite vartotojo pasirinkti tašką piešinyje:
    („setq xyz“ (taškas „Pasirinkimo taškas:“))
    ; Padalinkite 3D tašką į atskiras x, y, z reikšmes:
    („setq ptx“ (automobilis xyz)
    pty („cadr xyz“)
    ptz („caddr xyz“)
    )
    ; Trumpinti vertes:
    („setq ptx“ (rtos ptx 2 aukštyn)
    pty (rtos pty 2 uprec)
    ptz („rtos“ ptz 2 aukščiau)
    )
    ; Sudėkite atskiras vertes į 3D tašką:
    („setq xyz1“ („strcat ptx“, „pty“, „ptz“))
    ; Vietos tekstas:
    (komanda „text“ xyz 200 0 xyz1)

    )

  16. Įrašykite failą kaip label.lsp, tada įkelkite LISP rutiną į BricsCAD naudodami:

    : (apkrovaetiketė“)
    „C: LABEL“

  17. Vykdykite rutiną ir reaguokite į raginimus: “

    : etiketė
    Etiketės tikslumas: 1
    Pasirinkite tašką: (Pasirinkite tašką.)
    tekstas Išteisinti… / :
    Teksto aukštis <200.0000>: 200
    Teksto sukimosi kampas <0>: 0
    Tekstas: 5012,3, 773,2, 0,0
    :

Duomenų išsaugojimas failuose

Ankstesniame vadove mes pradėjome nerimauti dėl vartotojo sąsajos patobulinimų. Tai, kas prasidėjo kaip dvi kodo eilutės, dabar išsiplėtė į 23. Šiame vadove mes sužinosime, kaip kovoti su funkcijų padidėjimu (plačiau vėliau) ir pridedame galimybę išsaugoti duomenis faile.

Skaitytojas man parašė šį norų sąrašo elementą: „LISP failas labai tinka kai kurioms mano naudojamoms programoms, tačiau norėčiau, kad būtų išsaugoti x, y, z koordinatėmis surinkti duomenys tekste. byla. “

Įrašyti duomenis į failą nesunku naudojant atvirus, rašymo eilutėir Uždaryti funkcijos. Pažvelkime, kaip tai padaryti. Failų tvarkymas LISP yra paprastesnis nei daugumos programavimo kalbų, nes LISP turi labai silpnas prieigos prie failų funkcijas. Viskas, ką jis gali padaryti, yra skaityti ir rašyti ASCII failus eilės tvarka; LISP negali tvarkyti dvejetainių failų ir negali naudotis duomenimis atsitiktine tvarka.

TRYS ŽINGSNIAI

Duomenys į failą įrašomi trimis etapais:

1 žingsnis. Atviras failas.
2 žingsnis. Rašyk duomenis į bylą.
3 žingsnis. Uždarykite failą.

1 veiksmas: atidarykite failą

LISP turi atvirus failų atidarymo funkcija. Ši funkcija leidžia atidaryti failus vienas iš trijų tikslų: (1) nuskaityti duomenis iš bylos; (2) įrašyti duomenis į bylą; arba 3) pridėti duomenis prie bylos. Vienu metu turite pasirinkti vieną iš jų; LISP negali padaryti visų trijų vienu metu.

Visais atvejais LISP rūpinasi failo kūrimu, jei jo dar nėra. Duomenis skaityti yra pakankamai lengva, kad juos suprastum, tačiau kuo skiriasi duomenų rašymas ir pridėjimas?

  • Kai paprašau BricsCAD atidaryti failą rašyti, visi esantys failo duomenys yra ištrinti, o tada pridedami nauji duomenys.
  • Kai paprašau BricsCAD atidaryti failą pridėti, nauji duomenys yra pridėta iki esamų duomenų pabaigos.

Savo tikslu norime ir toliau įtraukti duomenis į failą, todėl rinkitės pridėti režimas. LISP kodas atrodo taip:

(setq FIL (atvirus „Xyzdata.txt“ “a“))

Čia ką nors nustatote (per setq) lygus kintamajam vardu FIL. Kas tai? Beveik visomis programavimo kalbomis mes nenagrinėjame failo vardo tiesiogiai, o vietoj to kalbame su a bylos aprašymas. Tai vardas (tam tikra raidžių ir skaičių seka), kuriam operacinė sistema priskiria failo vardą. Dabar, kai failo aprašą esate išsaugoję kintamajame FIL, jūs dirbate su FIL, o ne failo vardą, kurį nusprendžiau pavadinti xyzdata.txt.

Galutinis „A“ liepia LISP, kurį nori atidaryti xyzdata.txt už duomenų pridėjimą. Galimybės atvirus funkcijos yra:

„A“ Duomenys pridedami prie failo pabaigos.

„W“ Įrašo duomenis į failą (ištrina esamus duomenis).

„R“ Nuskaito duomenis iš failo.

2 veiksmas: įrašykite duomenis į failą

Norėdami įrašyti duomenis į failus, naudokite rašymo eilutė funkcija. Ši funkcija vienu metu įrašo vieną duomenų eilutę.

(Kita funkcija, rašyti funkcija, rašo singlas personažai failams.) Kodas atrodo taip:

(rašymo eilutė xyz1 fil)

Tačiau jūs negalite tiesiog rašyti neapdorotų duomenų į failą, nes jis atrodytų kaip trys skaitmenys po kablelio ir daug skaitmenų, pavyzdžiui:

8.15483.27520.0000

Dauguma programinės įrangos gali nuskaityti duomenis kableliais, atskiriančiais skaičius:

8.1548, 3.2752, 0.0000

Tai apima skaičiuokles, duomenų bazių programas ir net kai kurias tekstų apdorojimo programas. Aš sakau šioms programoms, kad skaitydami duomenis jie turėtų laikyti kablelį a separatorius o ne kablelis. Tokiu būdu skaičiuoklės programa kiekvieną numerį įdeda į savo langelį. Turėdamas kiekvieną numerį savo langelyje, galiu manipuliuoti duomenimis. Dėl šios priežasties jums reikia kodo, kuris suformatuotų duomenis.

Laimei, jūs jau tai padarėte. Paskutinis mokymas, jūs naudojote strcat funkciją kartu su cdr, kadrir kaddr funkcijos, skirtos atskirti x, y ir z komponentus koordinatės tripletui. Taigi galite pakartotinai naudoti kodą, kuris atrodo taip:

(„setq ptx“ (automobilis xyz)
pty („cadr xyz“)
ptz („caddr xyz“)
)
(„setq xyz1“ („strcat ptx“, „pty“, „ptz“))

strcat funkcija nurodo kablelius tarp koordinačių verčių.

3 veiksmas: uždarykite failą

Galiausiai, jei norite tvarkyti namus, uždarykite bylą. BricsCAD automatiškai uždarys failą už jus, jei pamiršite, bet geri programuotojai išvalys save. Uždaryti failą taip paprasta:

(Uždaryti fil)

PADARYTI JĄ VISI

Pridėkite atidarymo, formavimo, rašymo ir uždarymo kodą lable.lsp programa:

(nevykdyti c: etiketė (/ xyz xyz1 uprec ptx pty ptz)

(„setq uprec“ (getint „Etiketės tikslumas:“))
(„setq xyz“ (taškas „Pasirinkimo taškas:“))
(„setq ptx“ (automobilis xyz) pty (kadris xyz)
ptz („caddr xyz“))
; Suformatuokite x, y, z koordinates:
(„setq ptx“ (rtos ptx 2 aukštyn)
pty (rtos pty 2 uprec)
ptz („rtos ptz 2 uprec“)
; Pridėkite kablelius tarp trijų koordinačių:
(„setq xyz1“ („strcat ptx“, „pty“, „ptz“))
; Parašykite brėžinio koordinates:
(komanda „text“ xyz 200 0 xyz1)
; Atidarykite duomenų failą, kad galėtumėte pridėti:
(„setq fil“ (atidaryti „xyzdata.txt“ „a“))
; Parašykite duomenų eilutę į failą:
(„xyz1 fil“ rašymo eilutė)
; Uždaryti failą:
(uždaryti fil)

)

Naudodami teksto rengyklę, pavyzdžiui, „Notepad“, papildykite savo kopiją lable.lsp. Įkelkite jį į BricsCAD naudodami apkrova funkciją:

: (įkelti „etiketę“)

Ir paleiskite programą įvesdami Etiketė raginime ':':

: etiketė
Etiketės tikslumas: 4
Pasirinkite tašką: (Pasirinkite tašką.)

Kai renkate taškus ekrane, rutina pažymi pažymėtus taškus, bet taip pat rašo 3D taškų duomenis į failą. Po kurio laiko duomenų failas atrodo maždaug taip:

8.1548, 3.2752, 0.0000
7.0856, 4.4883, 0.0000
6.4295, 5.6528, 0.0000
5.5303, 6.7688, 0.0000
5.4331, 8.3215, 0.0000

Pageidavimų sąrašas #5: Sluoksniai

Pabandykime dar kartą apsilankyti norų sąraše. Vienas pageidavimų sąrašas yra valdyti sluoksnį, ant kurio dedamas tekstas. Yra du būdai, kaip kreiptis į šį pageidavimų sąrašą:

  • Kodas be kodo yra sluoksnio nustatymas prieš pradedant LISP funkciją.
  • LISP-kodo versija yra ta, kad vartotojas paprašytų sluoksnio pavadinimo, tada naudokite „setvar“ funkciją, norėdami nustatyti sistemos kintamąjį „CLayer“ (daug lengviau nei naudojant „Layer“ komandą):

    (setq lname (gaunama eilutė „Etikečių sluoksnis:“))
    (setvar „CLAYER“ vardas)

    Pridėkite šias dvi eilutes prieš eilutę su raginimu „Pasirinkti tašką“.

Pageidavimų sąrašas #6: teksto stilius

Norėdami nurodyti teksto stilių, yra naudojami tie patys du būdai. Kodas be kodo yra paprasčiausias teksto stiliaus nustatymas prieš pradedant rutiną. Kitu atveju galite parašyti LISP kodą panašų, kad nustatytumėte stilių su setvar komanda, tokia:

(„setq tsname“ (gaunamas tekstas „Etiketės teksto stilius:“))
(setvar „TEXTSTYLE“ tsname)

Dar kartą pridėkite tas dvi eilutes prieš eilutę su raginimu „Pasirinkti tašką“.

Dabar galite pastebėti, kad jūsų programa pradeda atrodyti didelė. Tai vadinama „išsipūtimu“. Dėl daugiau funkcijų, ypač vartotojo sąsajos srityje, programinė įranga tampa kur kas didesnė nei jos pagrindinis algoritmas.

Kas toliau?

Baigdamas LISP skyriaus skyrių, pateiksiu 7 patarimus, kurie padės jums rašant LISP funkcijas.


Atsisiųskite BricsCAD 30 dienų nemokamai

Pradėkite naudoti „BricsCAD“ šiandien

Nuolatinės arba prenumeruojamos licencijos, veikiančios visomis kalbomis, visuose regionuose.


  1. Įvadas
  2. 55 patarimai BricsCAD vartotojams
  3. Nustatymai
  4. Aplinkos keitimas
  5. Individualizuota vartotojo sąsaja
  6. Įvadas į dialogo langą Tinkinti
  7. Tinkinkite meniu juostą ir kontekstinius meniu
  8. Įrankių juostos ir mygtukų piktogramos
  9. Makrokomandų ir diesel kodo rašymas
  10. Juostelės juostos ir skydai
  11. Klavišų paspaudimai, slapyvardžiai ir apvalkalo komandos
  12. Pelės, dukart spustelėkite ir planšetinio kompiuterio mygtukai
  13. Absoliučiai viskas, ką reikia žinoti apie keturkojį
  14. Apvirtimo savybės
  15. Darbo vietos ir vartotojo sąsaja
  16. Projektavimo įrankių ir konstrukcijų plokštės
  17. Sukurti paprasti ir sudėtingi linijiniai tipai
  18. Rašymo liukai
  19. Formų ir šriftų dekodavimas
  20. Kodavimas lauko tekstu
  21. Rašant scenarijus
  22. Programavimas naudojant LISP (įvadas)
  23. LISP funkcijos
  24. Paprastos LISP programos rašymas