CADsite forum

AutoCAD => Autolisp => Topic gestart door: Atwist op wo 27 01 2010, 18:09:52

Titel: Aanpassing van lisp (Opgelost)
Bericht door: Atwist op wo 27 01 2010, 18:09:52
Hallo forumleden,

Heb hier op het forum een lisp gevonden die ik graag wil gebruiken heb deze al naar mijn wens aangepast maar ik wil graag iets meer, namelijk een popup scherm waar ik de omschijving in kan zetten net als bij een normaal blok(atributten) is dit mogeliijk.
Zoja hoe zou ik dit kunnen maken liefst simpel omdat mijn kennis met lisp niet erg groot is.

Alvast bedank voor het kijken en mee denken. :vreegoe:
Titel: Re:Aanpassing van lisp
Bericht door: roy_043 op wo 27 01 2010, 20:19:22
Het is vanzelfsprekend mogelijk om hiervoor een popup scherm, ofwel een dialog box, te gebruiken. Je moet je wel realiseren dat voor zo'n dialog box wat meer programmeerwerk nodig is. Ik vraag me af of dat voor het invullen van slechts twee getallen zinvol is. Maar goed: als oefening is het zeker interessant. Hier (http://web2.airmail.net/terrycad/Tutorials/MyDialogs.htm) vind je i.i.g. wat voorbeelden die je op weg kunnen helpen.
Titel: Re:Aanpassing van lisp
Bericht door: Atwist op wo 27 01 2010, 20:30:56
Hallo Roy_043,

Dank voor je antwoord, het is niet voor de 2 getalen dat werk wel ik gebruik deze lisp voor mijn pos nummers en wil hieraan graag naam van leverancier materiaal en artikelcode.
Dan kan ik namelijk Attribute extraction gebruiken om een stuklijst te maken.
Ik ga mij eens verdiepen in de site die jij hebt gelinkt
Titel: Re:Aanpassing van lisp
Bericht door: roy_043 op wo 27 01 2010, 21:48:40
Aha, nu begrijp ik het. Dan zou ik het zo aanpakken:
(defun subbor_insert ( / pnt1 bor vak bori)
...
...
...
(command "insert" naambor2 pnt1 blsc blang bori)
;; ***** Begin wijziging *****
(while (> (getvar "cmdactive") 0)
(command "")
)
(setvar "attdia" 1)
(command "_eattedit" "_last")
(while (> (getvar "cmdactive") 0)
(command pause)
)
(setvar "cmdecho" 1)
;; ***** Einde wijziging *****
(princ)
)

Uitgangspunt is dat het nummer wordt ingevuld bij het eerste attribuut.
Titel: Re:Aanpassing van lisp
Bericht door: Atwist op do 28 01 2010, 05:26:51
Roy,

Dank voor je antwoord ik ga dit gelijk eens uitproberen.
Titel: Re:Aanpassing van lisp
Bericht door: Atwist op do 28 01 2010, 05:44:49
Roy

Ik heb het uit geprobeerd maar mijn pos nummer wordt overschreven door de laatste tekst.
Heb jou code onder de bestaande code geplakt wist ook niet waar ik deze moest plaasten, dus dan maar onderaan.setq
bu:num 1
bu:off 1
vaknr ""
blsc 1
blang 0
)

(defun c:pos ()  (subbor "Postnummers" "e17") (princ))


(defun subbor (naambor1 naambor2)
(if (or (chk_blk naambor2) (findfile (strcat naambor2 ".dwg")))
(subbor_insert naambor1 naambor2)
(alert (strcat "Kan blok " naambor2 " niet vinden!"))
)
)

(defun subbor_insert (naambor1 naambor2 / pnt1 bor vak bori)
(graphscr)
(setvar "attdia" 0)
(setvar "cmdecho" 0)
(setq pnt1 (getpoint (strcat "\nWaar wil je je Postnummerblok hebben?\n")))

;; Nummer boring vragen en verwerken:
(setq bor (getstring (strcat "\nPost nummer <" (itoa bu:num) ">: ")))
(if (= bor "")
(setq bor (itoa bu:num))
(setq bu:num (atoi bor))
)
(setq bu:num (+ bu:num bu:off))

;; Su vragen en verwerken:
(if (= vaknr "")
(setq vak (getstring "\nGeef SUB postnummer "))
(setq vak (getstring (strcat "\nGeef SUB postnummer <" vaknr ">: ")))
)
(if (/= vak "")
(setq vaknr vak)
)

;; Inhoud van het attribuut bepalen:
(if (= naambor1 "boring")
(setq bori (strcat "%%U" vaknr "-" bor))
(if (= naambor1 "peilfilter")
(setq bori (strcat vaknr "-" bor "A"))
(setq bori (strcat vaknr "-" bor))
)
)
(command "insert" naambor2 pnt1 blsc blang bori)
(setvar "cmdecho" 1)
(setvar "attdia" 1)
(princ)
)

(defun chk_blk (blk / start blok result)
(setq start T)
(while (and (setq blok (tblnext "BLOCK" start)) (= result nil))
(setq start nil)
(if (= (cdr (assoc 2 blok)) blk)
(setq result T)
)
)
result
)

(defun c:ins ( / tmp)
(if (setq tmp (getreal (strcat "\nInsert schaal <" (rtos blsc 2 2) ">: ")))
(setq blsc tmp)
)
(princ)
)

(defun c:ina ( / tmp)
(if (setq tmp (getreal (strcat "\nInsert angle <" (rtos blang 2 2) ">: ")))
(setq blang tmp)
)
(princ)
)

(defun c:off ()
(initget 1)
(setq bu:num (getint "\nAutonummer begin waarde: "))
(initget 3)
(setq bu:off (getint "\nAutonummer offset: "))

defun subbor_insert ( / pnt1 bor vak bori)
...
...
...
(command "insert" naambor2 pnt1 blsc blang bori)
;; ***** Begin wijziging *****
(while (> (getvar "cmdactive") 0)
(command "")
)
(setvar "attdia" 1)
(command "_eattedit" "_last")
(while (> (getvar "cmdactive") 0)
(command pause)
)
(setvar "cmdecho" 1)
;; ***** Einde wijziging *****
(princ)
)

)


ik hoop dat jij weet waar het fout is gegaan.

Met vriendelijke groet,

Atwist
Titel: Re:Aanpassing van lisp
Bericht door: roy_043 op do 28 01 2010, 09:47:30
In mijn vorige post gaf ik in verkorte vorm de gewijzigde functie subbor_insert weer.
Ga terug naar jouw vorige versie en pas alleen de bestaande functie subbor_insert aan.
Onderstaande regels:

(command "insert" naambor2 pnt1 blsc blang bori)
(setvar "cmdecho" 1)
(setvar "attdia" 1)
(princ)
)

moet je vervangen door:
(command "insert" naambor2 pnt1 blsc blang bori)
;; ***** Begin wijziging *****
(while (> (getvar "cmdactive") 0)
(command "")
)
(setvar "attdia" 1)
(command "_eattedit" "_last")
(while (> (getvar "cmdactive") 0)
(command pause)
)
(setvar "cmdecho" 1)
;; ***** Einde wijziging *****
(princ)
)


P.S. Je bent er wel erg vroeg bij vandaag (5:26 uur).
Titel: Re:Aanpassing van lisp
Bericht door: Atwist op do 28 01 2010, 10:03:11
Roy,

Ik ga dit straks even aanpassen.

Ps: dan heb ik er al een uur op zitten ik kan tot 9 uur veel meer doen dan van 8 tot 5.
Titel: Re:Aanpassing van lisp
Bericht door: Atwist op do 28 01 2010, 18:48:09
Roy

Heb het bestand gewijzigt zoals jij aan gaf, maar ik krijg deze niet aan de loop heb nu fout:

Command: pos
; error: no function definition: CHK_BLK

Titel: Re:Aanpassing van lisp
Bericht door: roy_043 op do 28 01 2010, 20:05:31
Citaat van: Atwist op do 28 01 2010, 18:48:09; error: no function definition: CHK_BLK
Dan heb je teveel veranderd. In jouw eerste lisp is een functie chk_blk gedefinieerd. Zoals ik in mijn vorige bericht al aangaf: ga terug naar de vorige versie (die werkte immers volgens jou) en pas alleen de bestaande functie subbor_insert aan.
Titel: Re:Aanpassing van lisp
Bericht door: Atwist op do 28 01 2010, 20:47:09
Roy

Ik heb het orginele bestand gepakt waarmee ik ben begonnen een dat stuk wat vervangen moest worden heb ik dus vervangen.

Maar ik heb toch weer:
Command: pos
; error: no function definition: CHK_BLK


(setq
bu:num 1
bu:off 1
vaknr ""
blsc 1
blang 0
)

(defun c:pos ()  (subbor "boring gestaakt" "e17") (princ))
(
(defun subbor (naambor1 naambor2)
(if (or (chk_blk naambor2) (findfile (strcat naambor2 ".dwg")))
(subbor_insert naambor1 naambor2)
(alert (strcat "Kan blok " naambor2 " niet vinden!"))
)
)

(defun subbor_insert (naambor1 naambor2 / pnt1 bor vak bori)
(graphscr)
(setvar "attdia" 0)
(setvar "cmdecho" 0)
(setq pnt1 (getpoint (strcat "\nWaar wil je je " naambor1 "-blokje hebben?\n")))

;; Nummer boring vragen en verwerken:
(setq bor (getstring (strcat "\nNummer boring <" (itoa bu:num) ">: ")))
(if (= bor "")
(setq bor (itoa bu:num))
(setq bu:num (atoi bor))
)
(setq bu:num (+ bu:num bu:off))

;; Vaknummer vragen en verwerken:
(if (= vaknr "")
(setq vak (getstring "\nVaknummer: "))
(setq vak (getstring (strcat "\nVaknummer <" vaknr ">: ")))
)
(if (/= vak "")
(setq vaknr vak)
)

;; Inhoud van het attribuut bepalen:
(if (= naambor1 "boring")
(setq bori (strcat "%%U" vaknr "-" bor))
(if (= naambor1 "peilfilter")
(setq bori (strcat vaknr "-" bor "A"))
(setq bori (strcat vaknr "-" bor))
)
(command "insert" naambor2 pnt1 blsc blang bori)
;; ***** Begin wijziging *****
(while (> (getvar "cmdactive") 0)
(command "")
)
(setvar "attdia" 1)
(command "_eattedit" "_last")
(while (> (getvar "cmdactive") 0)
(command pause)
)
(setvar "cmdecho" 1)
;; ***** Einde wijziging *****
(princ)
)

(defun chk_blk (blk / start blok result)
(setq start T)
(while (and (setq blok (tblnext "BLOCK" start)) (= result nil))
(setq start nil)
(if (= (cdr (assoc 2 blok)) blk)
(setq result T)
)
)
result
)

(defun c:ins ( / tmp)
(if (setq tmp (getreal (strcat "\nInsert schaal <" (rtos blsc 2 2) ">: ")))
(setq blsc tmp)
)
(princ)
)

(defun c:ina ( / tmp)
(if (setq tmp (getreal (strcat "\nInsert angle <" (rtos blang 2 2) ">: ")))
(setq blang tmp)
)
(princ)
)

(defun c:off ()
(initget 1)
(setq bu:num (getint "\nAutonummer begin waarde: "))
(initget 3)
(setq bu:off (getint "\nAutonummer offset: "))
(princ)
)


Titel: Re:Aanpassing van lisp
Bericht door: roy_043 op do 28 01 2010, 21:23:38
Citaat van: Atwist op do 28 01 2010, 20:47:09Ik heb het orginele bestand gepakt waarmee ik ben begonnen een dat stuk wat vervangen moest worden heb ik dus vervangen.
Dat klopt niet:

In de bijlage de combinatie van de lisp zoals jij deze aan het begin van dit onderwerp hebt gepost en de door mij voorgestelde wijziging.
Titel: Re:Aanpassing van lisp
Bericht door: Atwist op do 28 01 2010, 21:28:17
Beste Roy

Het klopt dat deze iets anders is dan de geposte maar hiermee ben ik begonnen.

Ik ga nu even de file bekijken.
Titel: Re:Aanpassing van lisp
Bericht door: Atwist op do 28 01 2010, 21:32:46
Beste Roy

Ik ga hier morgenvroeg mee bezig, kan dan weer helder denken. :mrgreen:
Titel: Re:Aanpassing van lisp
Bericht door: Atwist op vr 29 01 2010, 04:55:55
Beste Roy,

Heb de boel aan de gang, maar mijn pos  nummer wordt overschreven wat niet de bedoeling is  :?

Citeergebruik deze lisp voor mijn pos nummers en wil hieraan graag naam van leverancier materiaal en artikelcode.
Dan kan ik namelijk Attribute extraction gebruiken om een stuklijst te maken.

Ik zal eens kijken of ik iets met een andere lisp kan combineren.

Met vriendelijke groet,
Atwist
Titel: Re:Aanpassing van lisp
Bericht door: roy_043 op vr 29 01 2010, 09:12:04
Probeer deze eens. Regel 50 is aangepast.

Oud:
(command "insert" naambor2 pnt1 blsc blang bori)
Nieuw:
(command "insert" naambor2 pnt1 blsc blsc blang bori)

Toelichting:
De regel "Oud" is zoals in de lisp uit jouw eerste post. Omdat jij schreef dat de lisp werkte heb ik deze ongewijzigd gelaten. Feit is wel dat de lisp in Bricscad zo niet werkt. Hiervoor is de aanpassing van de regel "Nieuw" nodig.


Titel: Re:Aanpassing van lisp
Bericht door: Atwist op vr 29 01 2010, 09:49:57
Heb jou aangepaste lisp geladen , voer pos nummer in en SUB pos nummer.
krijg dan een foutmelding :

Waar wil je je Postnummerblok hebben?
Post nummer <1>:
Geef SUB postnummer 1 Unknown command "1-1".  Press F1 for help.

En krijg ook het scherm Enhanced Attribute Editor maar als ik deze ik vul overschrijft deze mijn pos nummering.
Titel: Re:Aanpassing van lisp
Bericht door: roy_043 op vr 29 01 2010, 11:24:26
Het lijkt er op dit moment op:

Post jouw block a.u.b. (niet dwg versie 2010) dan kan ik beter testen.
Titel: Re:Aanpassing van lisp
Bericht door: Atwist op vr 29 01 2010, 11:44:59
Beste Roy,

Ik hebt het draaiende wat de oorzaak is weet ik niet maar heb autocad opnieuw gestart en nu krijg ik netjes de vragen in mijn commando balk. :mrgreen: :vreegoe: :vreegoe:

Dus is mijn dank voor het meedenken erg groot.

Ps het is wel mooier als er een invoerscherm wordt gestart je kijkt niet gauw naar de commando balk altans ik niet, maar ben allang blij dat het werkt.