FastFiber

Aanpassing van lisp (Opgelost)

Gestart door Atwist, wo 27 01 2010, 18:09:52

Vorige topic - Volgende topic

Atwist

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:
Atwist

AutoCad 2008.

roy_043

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 vind je i.i.g. wat voorbeelden die je op weg kunnen helpen.

Atwist

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
Atwist

AutoCad 2008.

roy_043

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.

Atwist

Roy,

Dank voor je antwoord ik ga dit gelijk eens uitproberen.
Atwist

AutoCad 2008.

Atwist

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
Atwist

AutoCad 2008.

roy_043

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).

Atwist

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.
Atwist

AutoCad 2008.

Atwist

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

Atwist

AutoCad 2008.

roy_043

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.

Atwist

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)
)


Atwist

AutoCad 2008.

roy_043

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:

  • Op regel 10 staat foutief 1x ( teveel
  • Boven regel 48 ontbreekt 1x )
  • Verder zijn diverse prompts anders

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.

Atwist

Beste Roy

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

Ik ga nu even de file bekijken.
Atwist

AutoCad 2008.

Atwist

Beste Roy

Ik ga hier morgenvroeg mee bezig, kan dan weer helder denken. :mrgreen:
Atwist

AutoCad 2008.

Atwist

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
Atwist

AutoCad 2008.

FastFiber