yoin

marcelmaas

Hi,

Ik ben net begonnen met lispen en zou graag via een lisproutine mijn ucsfollow aan willen zetten.
Dan laden zodat hij bij elke nieuwe tekening standaard op 1 blijft staan.
Want nu moet ik iedere keer als ik een tekening open, deze commando zelf uitvoeren in het menu tools/ucs.
Ik weet niet of ik goed begonnen ben, maar kom niet verder als dit, en hier werkt het niet mee.!!
Ik snap wel dat de ik c: weg moet laten als ik dingen automatisch wil laten starten, maar helemaal snap ik dat ook nog niet.
Wie wil mij dit even uitleggen.?

(defun c:volg (/ucsfollow)
  (command "ucsfollow" "1" "")
  )


HofCAD

#1
Citaat van: marcelmaas op di 17 03 2009, 23:14:49
Hi,

Ik ben net begonnen met lispen en zou graag via een lisproutine mijn ucsfollow aan willen zetten.
Dan laden zodat hij bij elke nieuwe tekening standaard op 1 blijft staan.
Want nu moet ik iedere keer als ik een tekening open, deze commando zelf uitvoeren in het menu tools/ucs.
Ik weet niet of ik goed begonnen ben, maar kom niet verder als dit, en hier werkt het niet mee.!!
Ik snap wel dat de ik c: weg moet laten als ik dingen automatisch wil laten starten, maar helemaal snap ik dat ook nog niet.
Wie wil mij dit even uitleggen.?

(defun c:volg (/ucsfollow)
  (command "ucsfollow" "1" "")
  )


Beste Marcel,

Je programma moet worden:
(defun c:volg()
(setvar "UCSFOLLOW" 1)
)


of
(defun c:volg()
(command "ucsfollow" "1" "")
)

De eerste versie is daarbij sneller dan de tweede.
De regel '(defun c:volg (/ucsfollow)' is fout omdat /ucsfollow geen lokale variabele is.
De syntax bij defun is: (defun sym ([arguments] [/ variables...]) expr...)
Als ucsfollow wel een parameter zou zijn moet de regel als volgt zijn
(defun c:(/ ucsfollow) met een spatie.
Voor automatisch starten kan je bijv.:
(defun c:volg()
(setvar "UCSFOLLOW" 1)
)
(c:volg)

of
(defun volg()
(setvar "UCSFOLLOW" 1)
)
(volg)

aan je acaddoc.lsp bestand toe te voegen.

Met vriendelijke groet, HofCAD CSI.

PS Zie in de AutoCAD help bij Index de onderwerpen 'acad.lsp file' en 'acaddoc.lsp file',
of bijv. http://forums.augi.com/showthread.php?t=61352&highlight=startup
ACADcadabra

marcelmaas

Hi Hofcad,

Bedankt voor de snelle hulp.
Okay blijkbaar kun je dingen op meerdere manieren oplossen.
Kun je mij nog uitleggen wat die "c: volg" of "volg"aan het eind precies doet, start je hem daar automatisch mee op.?
En waarom kan dit ook zonder die "c:" ?

Groeten, Marcel..

HofCAD

#3
Citaat van: marcelmaas op wo 18 03 2009, 09:30:16
Hi Hofcad,

Bedankt voor de snelle hulp.
Okay blijkbaar kun je dingen op meerdere manieren oplossen.
Kun je mij nog uitleggen wat die "c: volg" of "volg"aan het eind precies doet, start je hem daar automatisch mee op.?
En waarom kan dit ook zonder die "c:" ?

Groeten, Marcel..


Beste Marcel,

De syntax bij defun is (defun sym1 ([arguments] [/ variables...]) expressions)
of (defun C:sym2 ([/ variables...]) expressions).
Zie AutoCAD Help:
Help->Inhoud->AutoLisp Reference->AutoLISP Functions->D Functions->defun
De arguments zijn de globale variabelen, de variables zijn de lokale variabelen
en de expressions zijn de bewerkingen.
Je ziet dus dat je bij C: geen globale variabelen kan meegeven.
De aanroep van het lisp programma sym1 is (sym1 [arguments]) dus met de
globale variabelen en bij het lisp programma sym2 (C:sym2) of door
sym2 op de commandoregel te typen.

Met vriendelijke groet, HofCAD CSI.
ACADcadabra

marcelmaas

Beste Hofcad,

Dit is wel weer gelijk een hele technische uitleg, voor iemand die net begint met lisp, is dat allemaal nog niet echt te begrijpen.
Je uitleg is vast heel compleet, alleen sorry dat ik het nog niet helemaal kan volgen.  :roll:  :vreegoe:

Termen als syntax, arguments, variables, expressions, globale variabelen en ga zo maar door, zijn voor mij nog abracadabra.
Ik ben net een paar dagen aan het lezen over lisp, en moet ergens beginnen.
Om bij het begin te beginnen dacht ik dat het wel leuk zou zijn als ik zou weten hoe zo'n eerste regel er uit zou moeten zien, ook al is dat natuurlijk niet altijd hetzelfde.

Groeten, Marcel..



HofCAD

#5
Citaat van: marcelmaas op wo 18 03 2009, 10:27:20
Beste Hofcad,

Dit is wel weer gelijk een hele technische uitleg, voor iemand die net begint met lisp, is dat allemaal nog niet echt te begrijpen.
Je uitleg is vast heel compleet, alleen sorry dat ik het nog niet helemaal kan volgen.  :roll:  :vreegoe:

Termen als syntax, arguments, variables, expressions, globale variabelen en ga zo maar door, zijn voor mij nog abracadabra.
Ik ben net een paar dagen aan het lezen over lisp, en moet ergens beginnen.
Om bij het begin te beginnen dacht ik dat het wel leuk zou zijn als ik zou weten hoe zo'n eerste regel er uit zou moeten zien, ook al is dat natuurlijk niet altijd hetzelfde.

Groeten, Marcel..

Beste Marcel,

Voorbeelden:
(defun sym1(a b / c)
; programma sym1 met globale variabelen a en b en lokale variabele c
(setq c 3)
;geef de lokale variabele c de waarde 3
(textpage)
;ga naar het tekstscherm
(princ "\nDe waarde uit sym1 is\n")
;print de tekst 'De waarde uit sym1 is'
(princ (+ a b c))
;print de waarde van de som a+b+c
(princ)
;print niks, anders krijg je de waarde nog een keer op het scherm
)
(setq a 1)
;zet de globale variabele a op 1
(setq b 2)
;zet de globale variabele b op 2
(sym1 a b); Of (sym1 1 2)
;voer sym1 uit


(defun C:sym2( / c)
; programma sym2 met lokale variabele c
(setq c 3)
;geef de lokale variabele c de waarde 3
(textpage)
;ga naar het tekstscherm
(princ "\nDe waarde uit sym2 is\n")
;print de tekst 'De waarde uit sym1 is'
(princ c)
;print de waarde van c
(princ)
;print niks, anders krijg je de waarde nog een keer op het scherm
)
(C:sym2)
;voer sym2 uit


(defun C:sym3( / c)
; programma sym2 met lokale variabele c
(setq c 30)
;geef de lokale variabele c de waarde 30
(textpage)
;ga naar het tekstscherm
(princ "\nDe waarde uit sym3 is\n")
;print de tekst 'De waarde uit sym1 is'
(princ (+ a b c))
;print de waarde van de som a+b+c waarbij a en b globale variabelen zijn
(princ)
;print niks, anders krijg je de waarde nog een keer op het scherm
)
(setq a 10)
;zet de globale variabele a op 10
(setq b 20)
;zet de globale variabele b op 20
(C:sym3)
;voer sym3 uit

Merk op dat in sym3 de globale variabele a en b niet expliciet zijn meegenomen.

Met vriendelijke groet, HofCAD CSI.

PS Zie ook 'AutoLISP les 3- Vormen van data in AutoLISP' op http://www.cadsite.be/lisp/lisp.php
ACADcadabra

marcelmaas

Beste Hofcad,

Zou je voor mij bij je laatste voorbeelden in het "Nederlands" erbij kunnen zetten waar de functie's of variabelen voor staan en wat ze doen..?

Dit is voor mij anders nog een paar stappen te moeilijk.
Wat is bijvoorbeeld "sym1" en wat doet of zegt het.?

Alvast bedankt.

Groeten, Marcel..

HofCAD

Citaat van: marcelmaas op wo 18 03 2009, 11:22:29
Beste Hofcad,

Zou je voor mij bij je laatste voorbeelden in het "Nederlands" erbij kunnen zetten waar de functie's of variabelen voor staan en wat ze doen..?

Dit is voor mij anders nog een paar stappen te moeilijk.
Wat is bijvoorbeeld "sym1" en wat doet of zegt het.?

Alvast bedankt.

Groeten, Marcel..

Beste Marcel,

Zie boven.
Bij de syntax bij defun is (defun sym1 ([arguments] [/ variables...]) expressions)
en (defun C:sym2 ([/ variables...]) expressions) geldt dat, wat tussen vierkante
teksthaken staat niet verplicht is.
Je kan dus een programma schrijven met of zonder variables, en voor arguments
is het afhankelijk van het voorvoegsel C:.

Met vriendelijke groet, HofCAD CSI.
ACADcadabra

marcelmaas

Beste Hofcad,

Ik denk dat ik maar gewoon wat verder moet gaan met lezen in mijn boek, dan zal het me beetje bij beetje wel duidelijk worden.

In ieder geval bedankt voor de hulp.

Groeten, Marcel..

roy_043


Citaat van: HofCADDe arguments zijn de globale variabelen

Beste HofCAD,

Argumenten en globale variabelen zijn verschillende dingen.

In jouw code:

...
(setq a 1)
;zet de globale variabele a op 1
(setq b 2)
;zet de globale variabele b op 2
(sym1 a b); Of (sym1 1 2)
;voer sym1 uit
...

stel je de globale variabelen a en b in, en deze geef je als argumenten mee aan de functie sym1. Maar, zoals jijzelf al in het commentaar aangeeft, argumenten hoeven geen globale variabelen te zijn:

...; Of (sym1 1 2)

Je gebruikt hier namelijk niet de globale variabelen a en b maar de getallen 1 en 2 als argumenten. Deze getallen hebben niets met de ingestelde globale variabelen van doen. Want dit werkt bijvoorbeeld ook:

(sym1 6 9)


En als je een argument meegeeft aan een functie dan wordt het evenmin vanzelf een globale variabele.

Groet, Roy.