CADsite forum

AutoCAD => Autolisp => Topic gestart door: Manu op ma 19 10 2009, 09:35:33

Titel: lisp werkt niet altijd.. (nu wel.. merci HofCAD)
Bericht door: Manu op ma 19 10 2009, 09:35:33
Beste,

Onderstaande lisp tekent een bocht van een ventilatiekanaal a.d.v. wat ingegeven afmetingen.
Doch deze lisp werkt niet altijd... ik dien telkens (voor uitvoering van de lisp) al te gaan zoomen naar een 'lege' plek in de tekening..??

hierbij de lisp :

(defun c:BMB (/  pnt1 pnt2  pnt3  pnt4  pnt5 pnt6  pnt7  pnt8   pnt9  len1 pnt10 pnt11 a b c  d   e    f   )
 (setvar "cmdecho" 0)
 (setq pnt1 (getpoint "Geef het eerste punt: "))
 (terpri)
 (setq a (getreal "Geef de lengte A: "))
 (terpri)
 (setq b (getreal "Geef de lengte B: "))
 (terpri)
 (setq d (getreal "Geef nu de kraag D: "))
 (terpri)
 (setq e (getreal "Geef nu de kraag E: "))
 (terpri)
 (if (< a b)    (setq c a)   (setq c b)  )
 (if (< d e)    (setq f (- d 3))    (setq f (- e 3))  )

 (setq pnt2 (list (- (car pnt1) (/ a 2)) (cadr pnt1)))
 (setq pnt3 (list (+ (car pnt1) (/ a 2)) (cadr pnt1)))
 (setq pnt4 (list (+ (car pnt3) d) (+ (cadr pnt3) e)))
 (setq pnt5 (list (car pnt4) (+ (cadr pnt4) b)))
 (setq pnt6 (list (car pnt2) (cadr pnt5)))
 (setq pnt7 (list (car pnt3) (cadr pnt4)))
 (setq pnt8 (list (car pnt3) (+ (cadr pnt3) (- e f))))
 (setq pnt9 (list (+ (car pnt3) f) (cadr pnt4)))
 (setq len1 (distance pnt5 pnt6))
 (setq pnt10 (list (+ (car pnt6) c) (cadr pnt6)))
 (setq pnt11 (list (car pnt6) (- (cadr pnt6) c)))
 (command "pline" pnt2 pnt3  pnt8   "_a"    pnt9   "_l"   pnt4  pnt5  pnt10   "a"   pnt11     "_l"    pnt2   "_c"   ""  )

 (PRINC "\n groeten van Manu")
 (princ)
)

Hoe kan ik dit oplossen?

groeten,

Manu

Titel: Re:lisp werkt niet altijd..
Bericht door: H@rm op ma 19 10 2009, 10:04:35
Manu,

Ik heb een kleine aanpassing gemaakt in de regel die de Pline tekent.

(command "pline" pnt3  pnt8   "_a"    pnt9   "_l"   pnt4  pnt5  pnt10   "a"   pnt11     "_l"    pnt2   "_c"   )

Ik laat de pline bij pnt3 beginnen en sluit af met close.
Je had er een enter "" teveel in staan.
Verder werkte hij bij mij goed. Wellicht dat je de osmode uit moet zetten voordat je de pline gaat tekenen en later weer aanzetten.
(setq oldosmode (getvar "osmode"))
(setvar "osmode" 0)
en later
(setvar "osmode" oldosmode)

Suc7

Michel
Titel: Re:lisp werkt niet altijd..
Bericht door: Manu op ma 19 10 2009, 10:26:25
Michel,

dankjewel om er even naar te kijken, ik paste de lisp aan volgens jou aanwijzingen, maar het probleem met dat zoomen krijg ik niet opgelost..

hieronder de aangepaste lisp :

(defun c:BMB (/  pnt1 pnt2  pnt3  pnt4  pnt5 pnt6  pnt7  pnt8   pnt9  len1 pnt10 pnt11 a b c  d   e    f   )
  (setvar "cmdecho" 0)
  (setq oldosmode (getvar "osmode"))
  (setq pnt1 (getpoint "Geef het eerste punt: "))
  (terpri)
  (setq a (getreal "Geef de lengte A: "))
  (terpri)
  (setq b (getreal "Geef de lengte B: "))
  (terpri)
  (setq d (getreal "Geef nu de kraag D: "))
  (terpri)
  (setq e (getreal "Geef nu de kraag E: "))
  (terpri)
  (if (< a b)    (setq c a)   (setq c b)  )
  (if (< d e)    (setq f (- d 3))    (setq f (- e 3))  )

  (setq pnt2 (list (- (car pnt1) (/ a 2)) (cadr pnt1)))
  (setq pnt3 (list (+ (car pnt1) (/ a 2)) (cadr pnt1)))
  (setq pnt4 (list (+ (car pnt3) d) (+ (cadr pnt3) e)))
  (setq pnt5 (list (car pnt4) (+ (cadr pnt4) b)))
  (setq pnt6 (list (car pnt2) (cadr pnt5)))
  (setq pnt7 (list (car pnt3) (cadr pnt4)))
  (setq pnt8 (list (car pnt3) (+ (cadr pnt3) (- e f))))
  (setq pnt9 (list (+ (car pnt3) f) (cadr pnt4)))
  (setq len1 (distance pnt5 pnt6))
  (setq pnt10 (list (+ (car pnt6) c) (cadr pnt6)))
  (setq pnt11 (list (car pnt6) (- (cadr pnt6) c)))
  (command "pline" pnt3  pnt8   "_a"    pnt9   "_l"   pnt4  pnt5  pnt10   "a"   pnt11     "_l"    pnt2   "_c"   )
  (setvar "osmode" oldosmode)

  (PRINC "\n groeten van Manu")
  (princ)
)
Titel: Re:lisp werkt niet altijd..
Bericht door: HofCAD op ma 19 10 2009, 10:43:47
Beste Manu,

Ben je niet o.a. in het begin (setvar "OSMODE" 0) vergeten.
(defun c:BMB (/  pnt1 pnt2  pnt3  pnt4  pnt5 pnt6  pnt7  pnt8   pnt9  len1 pnt10 pnt11 a b c d  e f
oldcmdecho oldosmode)
 (setq oldcmdecho (getvar "CMDECHO"))
 (setq oldosmode (getvar "OSMODE"))
 (setvar "CMDECHO" 0)
 (setvar  "OSMODE" 0)

Ben je ook niet op het eind (setvar "CMDECHO" oldcmdecho)  vergeten.
 (setvar "OSMODE" oldosmode)
 (setvar "CMDECHO" oldcmdecho)
 (PRINC "\n groeten van Manu")
 (princ)
)


Met vriendelijke groet, HofCAD CSI.
Titel: Re:lisp werkt niet altijd..
Bericht door: Manu op ma 19 10 2009, 11:00:11
Ha die HofCAD,

Je had gelijk.. het zoomprobleem is opgelost!  :vreegoe: :vreegoe:
Ik kan er weer verder aan gaan sleutelen.. want ik wil de lisp nog gaan uitbreiden zodat ik op het einde kan kiezen of ik de pline wel/nietwil gaan verschalen met een factor 10x (van mm naar cm) en of ik nog wil gaan roteren (per 90°)..
Wellicht zal ik in die zoektocht nog eens beroep gaan doen op jullie kennis... maar alvast bedankt om me hier al mee te helpen!!

groten,

Manu
Titel: Re:lisp werkt niet altijd..
Bericht door: Manu op ma 19 10 2009, 12:56:17
De bovenstaande lisp werk nu wel maar ik wil er - na het commando PLINE - een 2-tal 'standaard-AutoCad' functie's aan toevoegen :
Mirror en Scale.. waarbij telkens gevraagd wordt of dit nodig is.. (in de commandoregel wordt dan Y of N ingegeven)
Maar als leek in Lisp begrijp ik de opbouw voor zo'n uitbreiding niet...
Kan iemand me op weg helpen (ik vraag echt geen kant-en-klare oplossing.. )

Groeten,

Manu
Titel: Re:lisp werkt niet altijd..
Bericht door: HofCAD op ma 19 10 2009, 13:11:52
Beste Manu,

Voor eventuele mogelijkheden voor Yes/No zie in http://www.cadsite.be/smf/index.php?topic=2914.msg15695#msg15695
mijn YesOrNo Lisp.

Met vriendelijke groet, HofCAD CSI.
Titel: Re:lisp werkt niet altijd..
Bericht door: roy_043 op ma 19 10 2009, 14:00:01
Citaat van: Manu op ma 19 10 2009, 11:00:11
verschalen met een factor 10x (van mm naar cm)

Je zou in plaats van het commando scale te gebruiken ook dit kunnen doen:
  ;; insunits=4: mm
  ;; insunits=5: cm
  (if (= (getvar "insunits") 5) (setq factor 0.1) (setq factor 1.0))
  ...
  (setq a (* (getreal "Geef de lengte A (mm): ") factor))
  ...
Titel: Re:lisp werkt niet altijd..
Bericht door: Manu op ma 19 10 2009, 14:51:38
Citaat van: HofCAD op ma 19 10 2009, 13:11:52
Beste Manu,

Voor eventuele mogelijkheden voor Yes/No zie in http://www.cadsite.be/smf/index.php?topic=2914.msg15695#msg15695
mijn YesOrNo Lisp.

Met vriendelijke groet, HofCAD CSI.

HofCad,

Ik las de topic in je verwijzing door maar eerlijk gezegd gaat het mijn petje te boven... :(
Ik had gehoopt dat ik via "(setq x (entlast))" zo de getekende pline kon opnemen als selectie en -indien met een 'Yes' op de commandoregel - eerst kon gebruiken in een bijkomende commando als bv Mirror of Rotate en daarna hetzelfde voor het verschalen.. Misschien laat ik het maar zoals het is en doe ik de nodige commando's wel apart..
Ik moet me maar echt eens gaan verdiepen in die hele LISP... als ik in pensioen ben of zo.... :roll:

toch bedankt voor de tips!

Manu
Titel: Re:lisp werkt niet altijd..
Bericht door: HofCAD op ma 19 10 2009, 16:05:56
Beste Manu,

Ik weet niet waaruit je wilt verschalen en met welke spiegelas je wilt spiegelen,
daarom dit ongetest programma.
(defun c:BMB (/ pnt1 pnt2 pnt3 pnt4 pnt5 pnt6 pnt7 pnt8 pnt9 len1 pnt10 pnt11 a b c d e f
 oldcmdecho oldosmode e1 Antwoord Antwoord2)
 (setq oldcmdecho (getvar "CMDECHO"))
 (setq oldosmode (getvar "OSMODE"))
 (setvar "CMDECHO" 0)
 (setvar "OSMODE" 0)
 (setq pnt1 (getpoint "\nGeef het eerste punt: "))
 (setq a (getreal "\nGeef de lengte A: "))
 (setq b (getreal "\nGeef de lengte B: "))
 (setq d (getreal "\nGeef nu de kraag D: "))
 (setq e (getreal "\nGeef nu de kraag E: "))
 (if (< a b) (setq c a) (setq c b))
 (if (< d e) (setq f (- d 3)) (setq f (- e 3)))
 (setq pnt2 (list (- (car pnt1) (/ a 2)) (cadr pnt1)))
 (setq pnt3 (list (+ (car pnt1) (/ a 2)) (cadr pnt1)))
 (setq pnt4 (list (+ (car pnt3) d) (+ (cadr pnt3) e)))
 (setq pnt5 (list (car pnt4) (+ (cadr pnt4) b)))
 (setq pnt6 (list (car pnt2) (cadr pnt5)))
 (setq pnt7 (list (car pnt3) (cadr pnt4)))
 (setq pnt8 (list (car pnt3) (+ (cadr pnt3) (- e f))))
 (setq pnt9 (list (+ (car pnt3) f) (cadr pnt4)))
 (setq len1 (distance pnt5 pnt6))
 (setq pnt10 (list (+ (car pnt6) c) (cadr pnt6)))
 (setq pnt11 (list (car pnt6) (- (cadr pnt6) c)))
 (command "_PLINE" pnt3 pnt8 "_A" pnt9 "_L" pnt4 pnt5 pnt10 "_A" pnt11 "_L" pnt2 "_C")
 (setq e1 (entlast))
 (initget "Yes No")
 (setq Antwoord (getkword "\nWilt U verschalen? [Yes/No] <N>: "))
 (if (= Antwoord "Yes")
 (progn
 (command "_SCALE" e1 "" pnt3 (getdist pnt1 "Verschalingsfactor:"))
 ))
 (initget "Horizontaal Verticaal No")
 (setq Antwoord (getkword "\nWilt U spiegelen? [Horizontaal/Verticaal/No] <N>: "))
 (if (or (= Antwoord "Horizontaal")(= Antwoord "Verticaal"))
 (progn
 (initget "Yes No")
 (setq Antwoord2 (getkword "\nOrigineel verwijderen? [Yes/No] <Y>: "))
 (if (= Antwoord2 nil)(setq Antwoord2 "Yes"))
 (if (= Antwoord "Horizontaal")
 (command "_MIRROR" e1 "" pnt3 "@1,0" antwoord2)
 (command "_MIRROR" e1 "" pnt3 "@0,1" antwoord2))
 ))
 (setvar "OSMODE" oldosmode)
 (setvar "CMDECHO" oldcmdecho)
 (princ "\nGroeten van Manu.")
 (princ)
)


Met vriendelijke groet, HofCAD CSI.
Titel: Re:lisp werkt niet altijd..
Bericht door: Manu op ma 19 10 2009, 16:37:37
.. ok.. ik zal aan de lisp nog 1 ding aanpassen.. namelijk de hoofding :

;;; Bocht.lsp
;;; Deze lisp werd in basis geschreven door Manu,
;;; doch kon zonder de hulp van HofCAD niet worden afgewerkt. :-)
;;; All Credits to HofCad.

merci merci merci !