• Dieses Forum ist die maschinengenerierte Übersetzung von www.cad3d.it/forum1 - der italienischen Design-Community. Einige Begriffe sind nicht korrekt übersetzt.

Fehler bei der Verwendung von Befehlsanweisung

  • Ersteller Ersteller tizianost
  • Erstellt am Erstellt am

tizianost

Guest
hallo an alle, ich habe mein erstes lisp-programm für ein paar tage geschrieben, um monotone verfahren zu automatisieren. ich denke, es ist nutzlos zu sagen, dass ich viele schwierigkeiten hatte, aber mit so viel geduld gelang es mir, sie zu überwinden... außer zwei:

1) das erste problem betrifft die verwendung von "befehl"-anweisung, als ob ich versuche, einige nicht-interne autocad-befehle (wie die des express-menüs) zu führen ich erhalten eine fehlermeldung, da der befehl nicht existiert. für die präzision ist der ausdruck, der von mir in der lispe verwendet wird, wie folgt:

(befehl "txtexp" (sssadd ent) 0)


ich sage sofort nichts ändert, wenn ich "_" zum befehl hinzufügen ("_txtexp")

2) das zweite problem entsteht, wenn ich versuche zu explodieren

(befehl "_explode" (sssadd ent) 0)

folgendes unternehmen

((-1). <nome 7e30f788="" entità:="">) (0 . "hatch") (330. <nome 7ebfcc10="" entità:="">(d) (d) (d) (b) (d) (b)) (d) (b)) (b) (b) (b) (b))) (b) (b)) (b)) (b) (b) (b)) (d) (d)) (d) (b))) (d) (d) (d)) (d) (d)) (d)


ich verstehe immer:

_explodieren
objekt auswählen:
das objekt ist nicht im aktuellen raum.
suche ohne ergebnis.
objekt auswählen:
"explodierte luke"
1831 _explodieren
*keine gültige auswahl*
erfordert einen punkt oder eine letzte/alle/gruppe
; fehler: funktion abgebrochen

vielen dank im voraus
hi.
titten</nome></nome>
 
ich drücke die von lisp sind nicht ein experte, sondern versuchen zu sehen, ob prioma eine variable

(setq-auswahl (ssadd ent) 0)

(befehl "_explode" auswahl)
 
danke für die antwort. das ergebnis ändert sich nicht. ich beginne mit der annahme, dass der fehler auf einen fehler in der dwg-datei zurückzuführen ist (erstellt 1997 und aktualisiert), obwohl die verifikationsfunktion keine fehler erkennt.

hi.
titten
 
der fehler ist auf, wenn sie die einheit definiert.
sie haben wahrscheinlich verwendet:
(setq ent (entget))
anstatt
(setq en1 (auto))
nur den namen des unternehmens en1, der in ihren code eingefügt werden soll:
(befehl "_explode" (sssadd en1) 0)

aber genug
(befehl "_explode" en1)
 
danke für die antwort.
ich habe nicht die funktion verwendet, die (setq ent (entget (car (entsel)))), da die auswahl auf alle zeichnung ausgedehnt wird
ich habe einen auszug des codes, um die situation zu klären

(prozentual)
(setq explosion 1)
(while (/= explodiert 0)
(sevenq explodiert)
(setq group (ssget "x")); wählen sie alle elemente des designs
(setq nent (1- (sslength group));
(setq i 1); verhindert endlose zyklen
(alert "zyklus während")
(> i 100000)
(setq ent)
(seq element (entget ent) ; extrahiert das element "ent" aus der datenbank
(setq tipoent (cdr (assoc 0 element)))
(kond.)
(= typeent "hatch")
(falls (/= (cdr (assoc 2 element) "solid")
(progn)
(setq explosion 1)
;(setq selez (name (ssadd ent) 0)
(befehl "_explode" ent)
(print "explodierte luke")
)
)
)
(oder (= tipoent "acad_table")
(=typische "dimension")
(= typ "insert")
(= typeent "mline")
) skalierung ohne probleme

(wenn (und (/= (strcase (cdr)))
(/= (strcase (cdr) (assoc 2 element)) "proto")
(/= (substrcase (cdr) (assoc 2 element) 1 3 )"ac_")
(/= (substrcase (cdr) (assoc 2 element) 1 4 )"acq_")
;(/= (cdr) (assoc 0 element)) (insert))
)
(progn)
(setq selez (ssadd ent) 0)
(befehl "_explode" selez)
(setq explosion 1)
(print "exploded table-size insert mline")
)
)
)
(oder (= tipoent "image")
(= schreibpunkt)
(=typischer strahl)
"region"
(xline)
(= typeent "breite")
(= typischer "viewport")
)
(print tipoent)
)

(oder (=typischer "text")
(=typischer "mtext")
)
; nicht txtexp
(befehl "txtexp" (name (ssadd ent) 0))
(setq explosion 1)
(print "exploded text mtext")
)

)
(setq nent (1- nent)
(seq i (1+i)); erhöhung der anzahl der zyklen

(druck nent)
) ende der
) ende der
)



das, was mich verwirrt lässt, ist, dass im allgemeinen die anwendung funktioniert... nur in bestimmten fällen es friert.

danke.
hi.
titten
 
ich glaube, die beschriftete linie ist dies:
(setq ent)
um zu explodieren, müssen sie den namen der entity-istanza (das assoc a -1), die einfach mit: (setq en1 (car (entsel)))) extrahiert wird, und nicht den namen des objekts (das assoc zu code 0), das z.b. mit: (setq en (cdr (assoc 0 (entget en1))) extrahiert wird.

in bezug auf die erste frage muss der txtexp-befehl, der kein interner, sondern vom benutzer gebauter befehl ist, in der ursprünglichen form eingeführt werden, d.h.
(befehl (c:txtexp)); auch keine argumente.
so es funktioniert, obwohl es mir am ende einen fehler gibt, werde ich versuchen, es herauszufinden.

in der zwischenzeit, wenn sie studieren möchten, lesen sie diesen teil der autolisp-hilfe.
wenn eine autolisp-funktion mit einem namen des formulars c:xxx definiert ist, kann diese auf der autocad-befehlsaufforderung in gleicher weise wie ein eingebauter autocad-befehl ausgegeben werden. dies gilt unabhängig davon, ob sie die funktion in vlisp oder in der autocad befehlsaufforderung definieren und laden. sie können diese funktion verwenden, um neue befehle zu autocad hinzufügen oder bestehende befehle neu definieren.

funktionen als autocad-befehle zu verwenden, stellen sie sicher, dass sie die folgenden regeln einhalten:

der funktionsname muss das formular c:xxx (ober- oder kleinbuchstaben) verwenden. c: teil des namens muss immer vorhanden sein; der xxx teil ist ein befehlsname ihrer wahl. c:xxx funktionen können verwendet werden, um eingebaute autocad-befehle zu überschreiben. (siehe autocad-befehle neu definieren.)
die funktion muss ohne argumente definiert werden. allerdings sind lokale variablen erlaubt und es ist eine gute programmierpraxis, sie zu verwenden.
eine auf diese weise definierte funktion kann innerhalb einer beliebigen aufforderung eines eingebauten autocad-befehls transparent ausgegeben werden, sofern die transparent ausgegebene funktion die befehlsfunktion nicht anruft. (dies ist die autolisp-funktion, die sie verwenden, um autocad-befehle auszugeben; siehe den eintrag auf befehl in der autolisp-referenz.) wenn sie einen c:xxx definierten befehl transparent ausgeben, müssen sie dem xxx-anteil mit einem einzigen anführungszeichen vorangehen (').
 
eine elternzeit fehlt: (setq elemento (entget ent))wie bei txtexp ist rechter joseph, sie können argumente nicht bestehen, da es ein externer lisp ist, der einst die auswahl von texten erfordert, das ist, was passiert, indem txtexp in seinem namen starten.

ich will wählen die texte zu explodieren können sie einfügen (c:txtexp) auch ohne befehl, auf diese weise werfen sie die lippe, wenn bereits geladen, aus innerhalb ihrer lispe.


wenn sie alles automatisch ausfüllen möchten, können sie dies tun:

- eine kopie von txtexp.lsp erstellen und in txtexp1.lsp umbenennen

- die umbenannte lisp macht diese änderungen:;ss (ssget fltr)ss(sget "_x"(0. "mtext, text")- eliminiert von ihrem lisp den codeteil in text und mtext, die unter anderem eine überschüssige klammer (befehl "txtexp" (ssadd ent) 0))- einsatz (c:txtexp1) zwischen den letzten zwei fine_while, d.h. der letzten zeile des codes


jetzt sollte es funktionieren, auch wenn sie die aufforderung nicht mit der meldung der "änderung von texten" zurückgeben.



anmerkungen:

- txtexp1.lsp muss bereits beim start ihrer lispe geladen werden, ansonsten am anfang eingeben (last "d:\\\\\\\\\\\\txtexp1"), klar mit dem richtigen pfad.

- ihre lippe wird geladen, da die klammern im defekt den überschuss kompensieren, obwohl ich nicht verstehe, wie es funktionieren kann und blockieren "nur in bestimmten fällen".
 
ich danke ihnen für die antworten und entschuldige mich für meine "absence" aber putroppo nur jetzt hatte ich zeit, die posts zu lesen... heute abend entscheide ich, die bewerbung nach ihrem rat einzurichten.
danke.
hi.
titten
 
es ist schön zu sehen, dass es immer noch benutzer interesse an autolisp und vlisp programmierung.
leute!
denken sie daran, dass, wo nicht gut autolisp kommen sie mit vlisp...
einen gruß an die ganze gemeinschaft.

(vl-load-com)(vl-cmdf "_quit")
 

Statistik des Forums

Themen
58.521
Beiträge
499.056
Mitglieder
104.110
Neuestes Mitglied
ChristianR

Zurzeit aktive Besucher

Keine Mitglieder online.
Zurück
Oben