CADsite forum

AutoCAD => Autolisp => Topic gestart door: Reimer op wo 26 10 2005, 12:49:00

Titel: Eerst selecteren dan commando geven
Bericht door: Reimer op wo 26 10 2005, 12:49:00
Hallo,

ik probeer mijzelf te leren hoe ik lisp routines moet maken.
Ik ben begonnen met het maken van verkorte opdrachten. Bijvoorbeeld:

(defun C:pc ()
   (setq pline (entsel "PLINECLOSE    Selecteer polyline:   "))
   (command "pedit" pline "c" "")
 (princ)
)

Echter: wanneer ik eerst een pline selecteer en dan de opdracht PC geef dan werkt dit niet. Maar wat moet ik doen om dit wel te laten werken?

Reimer
Titel: Eerst selecteren dan commando geven
Bericht door: WebRacer op wo 26 10 2005, 12:59:00
na setq mag nooit een autocad command of -type komen, dat is een eerste zaak, en je moet dan eerst je commando geven PC en dan pas je lijn selekteren
Titel: Eerst selecteren dan commando geven
Bericht door: Reimer op wo 26 10 2005, 13:07:55
Misschien wat verwarrend maar in dit geval heb ik het object dat wordt geselecteerd de naam PLINE gegeven. Dit had ook b.v. OBJECT1 kunnen zijn.
Titel: Eerst selecteren dan commando geven
Bericht door: bart op wo 26 10 2005, 14:00:19
Citaat van: ReimerMisschien wat verwarrend maar in dit geval heb ik het object dat wordt geselecteerd de naam PLINE gegeven. Dit had ook b.v. OBJECT1 kunnen zijn.


het verwonderd me zeer maar op de commandline wordt dat geaccepteerd
Ik wil het je echter wel afraden
met dit zoort dingen maak je je lisp moeilijk te begrijpen
(ook voor jezelf als je hem later een keer aan moet passen)
Titel: Re: Eerst selecteren dan commando geven
Bericht door: HofCAD op wo 26 10 2005, 16:37:09
Citaat van: ReimerHallo,

ik probeer mijzelf te leren hoe ik lisp routines moet maken.
Ik ben begonnen met het maken van verkorte opdrachten. Bijvoorbeeld:

(defun C:pc ()
   (setq pline (entsel "PLINECLOSE    Selecteer polyline:   "))
   (command "pedit" pline "c" "")
 (princ)
)


Echter: wanneer ik eerst een pline selecteer en dan de opdracht PC geef dan werkt dit niet. Maar wat moet ik doen om dit wel te laten werken?

Reimer


----------- ~\\|//~ ------------
------------
  • -
  • -------------
    -------ooO---(_)---Ooo-------- [/color]

    Beste Reimer,

    Ik heb snel iets gemaakt, wat misschien slechts gedeeltelijk goed werkt?
    Het programma PC1 is namelijk niet goed uitgetest.
    Verder ben ik ook met mijn blonde haren, geen held in programmeren. :oops:
    Alleen met veel geluk, lukt mij wat.

    Verder verbaas ik me erover :oops:  :oops: , dat als ik het onderstaande gebruik in
    mijn programma PC1fout :nigoe:

    (if (/= e nil)(command "_PEDIT" (ssget (cdr (assoc 10 (entget e)))) "Close" ""))

    of bijv. dit

    (if (/= e nil)(command "_PEDIT" e "Close" ""))

    Ik de onderstaande foutmelding krijg:

    Invalid option keyword.
    ; error: An error has occurred inside the *error* functionFunction cancelled

    Enter an option [Close/Join/Width/Edit vertex/Fit/Spline/Decurve/Ltype
    gen/Undo]: *Cancel*


    Daarom heb ik maar, als blondje :oops:  :oops: , de polylijn bij voorselectie via de
    database gesloten. 8)
    Hopelijk heb je wat aan mijn gepruts :oops:  :oops:  :oops:,
    want ik snap bijna nooit wat mensen willen of vertellen :oops:  :oops:  :oops: .
    Hopelijk spui je veel kritiek, want dan steek ik daar weer iets van op. :engel:

    Groetjes HofCAD CSI

    ;Onderstaande gaat voorlopig goed,
    ;zowel bij voorselectie als bij naselectie.


    (defun C:pc1 (/ ~cmd e ss1)
    (setq ~cmd (getvar "CMDECHO"))(setvar "CMDECHO" 0)
    (setq e nil ss1 nil ss1 (ssget "_I"
    '((-4 . "<OR") (0 . "LWPOLYLINE") (0 . "POLYLINE") (-4 . "OR>"))))
    (if (/= ss1 nil)(setq e (ssname ss1 0)))
    (if (/= e nil)(progn (setq e (entget e))
    (if (not (assoc 70 e))
    (setq e (append e (list (cons 70 code))))
    (setq e (subst (cons 70 1) (assoc 70 e) e))
    )
    (entmod e)
    ))
    (if (= e nil)
    (progn
    (setq e (entsel "PLINECLOSE Selecteer polyline: "))
    (if (/= e nil)(command "_PEDIT" e "Close" ""))
    ))
    (princ)
    (setvar "CMDECHO" ~CMD)
    )

    ;Onderstaande gaat niet goed,
    ;Het programma pc1fout geeft een foutmelding bij voorselectie


    (defun C:pc1fout (/  ~cmd e ss1)
    (setq ~cmd (getvar "CMDECHO"))(setvar "CMDECHO" 0)
    (setq e nil ss1 nil ss1 (ssget "_I"
    '((-4 . "<OR") (0 . "LWPOLYLINE") (0 . "POLYLINE") (-4 . "OR>"))))
    (if (/= ss1 nil)(setq e (ssname ss1 0)))
    (if (/= e nil)(command "_PEDIT" (ssget (cdr (assoc 10 (entget e)))) "Close" ""))
    (if (= e nil)
    (progn
    (setq e (entsel "PLINECLOSE Selecteer polyline: "))
    (if (/= e nil)(command "_PEDIT" e "Close" ""))
    ))
    (princ)
    (setvar "CMDECHO" ~CMD)
    )