DRAWING DATABASE

 

 

Een van de interessantste mogelijkheden van AutoLISP is het veranderen van de database van een getekend element. De zgn. drawing database kun je beschouwen als het DNA van een LINE, ARC of ander element dat in je tekening staat.

Het werkt als volgt:

 

Zorg dat er een cirkel op je tekening staat met straal van 2 en typ op de command-line:

 

(setq enp (entsel))

 

Je selecteert de cirkel en de command-line reageert met:

 

(<Entity name: 7ffff723ae0> (6.54474 3.67101 0.0))

      

(6.54474 3.67101 0.0) is het selectiepunt. De database zit verborgen achter de Entity name.

 

We halen eerst de entity name uit de list die we aan enp hebben toegewezen:

 

(setq en (car enp))

 

De database krijg je te pakken met entget:

 

(setq ed (entget en))

 

op de command-line verschijnt:

 

((-1 . <Entity name: 7ffff723ae0>) (0 . "CIRCLE") (330 . <Entity

name: 7ffff7059f0>) (5 . "1A6") (100 . "AcDbEntity") (67 . 0) (410 . "Model")

(8 . "0") (100 . "AcDbCircle") (10 5.0 5.0 0.0) (40 . 2.0) (210 0.0 0.0 1.0))

 

Je ziet een samengestelde list. We kijken nu alleen even naar de een-na-laatste sublist:

 

(40 . 2.0)

 

Hier vind je de straal die je hebt opgegeven toen je de cirkel tekende.

Je kunt die waarde als volgt uit de datalist pakken:

 

(setq rad (cdr (assoc 40 ed)))

 

Stel, je wilt die straal veranderen van 2 naar 4. Typ dan de volgende code:

 

(entmod (subst (cons 40 4)(cons 40 rad) ed))

 

Je zult zien dat de straal van de cirkel verandert.

 

Met cons maak je een sublist

(cons 40 4) geeft als resultaat: (40 . 4.0)

Met subst heb je de nieuwe sublist in de plaats gezet van de oude.

Met entmod geef je een update aan de datalist.

 

Van dit hele verhaal kun je een AutoLISP-routine maken die er als volgt uitziet:

 

(defun c:straal (/ enp ed ed rad newrad)

  (setq enp (entsel "\nSelecteer een cirkel: ")

          en (car enp)

          ed (entget en)

          rad (dxf 40 ed)

          newrad (getreal "\nNieuwe straal: ")

  )

  (entmod (subst (cons 40 newrad)(cons 40 rad) ed))

  (princ)

)

 

Je ziet bovenaan achter de slash de variabelen staan die in deze routine gebruikt worden. Variabelen achter de slash zijn zogenaamde local variabelen. Ze gelden alleen binnen de routine. Wanneer je ze niet achter de slash zet, worden het global variabelen. Ze behouden hun waarde na het beëindigen van de routine, zolang de tekening open blijft staan.

Je kunt de waarde van een global opvragen door hem in te typen op de command-line, vooraf gegaan door een ‘!’.

Dus bijvoorbeeld: !enp

 

Je ziet dat je met één setq een hele reeks variabelen kunt toewijzen.

 

Met getreal kun je een getal met decimalen invoeren.

Er is ook nog getint. Daarmee kan alleen een integer, een getal zonder decimalen, worden ingevoerd.