Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Layerstruktur bearbeiten

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte
Autor Thema:  Layerstruktur bearbeiten (5691 mal gelesen)
Musicus
Mitglied
Staatl. gepr. Techniker


Sehen Sie sich das Profil von Musicus an!   Senden Sie eine Private Message an Musicus  Schreiben Sie einen Gästebucheintrag für Musicus

Beiträge: 685
Registriert: 26.07.2005

AutoCAD 2018
Linear, CATS
Windows 10

erstellt am: 13. Mrz. 2008 17:29    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo Forum,

folgendes Problem: wir wollen hier endlich mal ein einheitliches Zeichnungssystem reinbekommen, so dass alle die gleichen Layer, Linientypen etc. benutzen. Für künftige Zeichnungen kann man das mit Vorlagendateien und ner Unterweisung in den Griff bekommen, Problem sind aber die vielen Bestandszeichnungen. Und ich hab zu laut hier geschrien, als es um eine Lösung dafür ging.

Ich hab jetzt mal mit meinen bescheidenen LISP-Kenntnissen angefangen, was zu schreiben, funktioniert soweit auch ganz ordentlich, aber eben nur bei „normalen“ Objekten, jetzt soll das ganze auch noch Blockelemente aufräumen können, und hier ist bei mir Ende.

Ich habe jetzt schon fleißig gesucht und gelesen, aber irgendwie verstehe ich nur Bahnhof. Wenn ihr mir also ein paar Hilfestellungen geben könntet, wäre das klasse.
Vorgehensweise soll später mal sein, dass jemand die Zeichnung öffnet, mittels appload das Lisp lädt, durchlaufen lässt, noch mal drüber guckt und speichert.

Mein bisheriger Code (im Prinzip ist es nur eine Aneinanderreihung von Filtern und Befehlen) sieht so aus:

Code:
(command "_layer" "_n" "LAYERNAME" "_L" "LINIENTYP" "LAYERNAME" "_C" "FARBNUMMER" "LAYERNAME" "")

Legt erstmal alle Layer an, die künftig verwendet werden sollen.

Code:
(if(ssget "_X" '((8 . "LAYER*,LAY*")))
(command "eigändr" "V" "" "LA" "LAYERNAME" "LTF" "1" "")
)

Sucht alle Elemente, die auf ähnlich geschriebenen Layern liegen (einer schreibt ACHSE, der nächste ACHSEN usw.), legt diese auf den richtigen Layer und ändert den Linientypfaktor auf 1.
Und das für alle Layer, die oben angelegt worden sind.

Code:
(if(ssget "_X" '((-4 . "<NOT") (6 . "VONLAYER") (-4 . "NOT>"))) (command "eigändr" "V" "" "LTY" "VONLAYER" "")
)
(if(ssget "_X" '((-4 . "<NOT") (62 . 256) (-4 . "NOT>"))) (command "eigändr" "V" "" "F" "VONLAYER" "")
)

Sucht alle Elemente, die bei Farbe und Linientyp nicht auf VonLayer stehen und ändert diese entsprechend.

Code:
(if(ssget "_X" '((0 . "DIMENSION") (-4 . "<NOT") (8 . "BEMASSUNG*") (-4 . "NOT>"))) (command "eigändr" "V" "" "LA" "BEMASSUNG" "")
)
(if(ssget "_X" '((0 . "*TEXT") (-4 . "<NOT") (8 . "TEXT*") (-4 . "NOT>"))) (command "eigändr" "V" "" "LA" "TEXT03" "")
)
(if(ssget "_X" '((0 . "HATCH") (-4 . "<NOT") (8 . "SCHRAFFUR") (-4 . "NOT>"))) (command "eigändr" "V" "" "LA" "SCHRAFFUR" "")
)

Findet alle Bemaßungen, Texte und Schraffuren, die nicht auf dem richtigen Layer liegen und schiebt diese dort hin.

Das läuft soweit auch anstandslos durch und funktioniert.

Für Blöcke könnte ich mir das ganze jetzt folgendermaßen vorstellen:

Zu Beginn müsste das LISP benennubl laufen mit der Auswahl U*, wir haben hier einen Aufsatz (AutoNorm), der lauter unbenannte Blöcke beginnend mit U erstellt, diese müssen aber unbedingt mit angepasst werden.

Jetzt müsste man alle definierten Blocknamen in eine Liste schreiben, aus dieser dann das erste Element auswählen und die übrigen in eine neue Liste schreiben. (mit car und cdr mein ich)

Der Block, der eben ausgewählt wurde, müsste jetzt geöffnet werden, dann müsste mein bisheriger Code durchlaufen und der Block anschließend mit Speichern geschlossen werden.

Und das ganze jetzt wiederholt solange, bis die Liste leer ist. Evtl. bräuchte man da noch eine Abfrage, wie viele Elemente in der Liste enthalten sind.

Wenn alle Blocknamen abgearbeitet werden, müsste das ja dann auch verschachtelte Blöcke mit erschlagen.

Soviel zur Theorie (ich hoffe, ich liege nicht ganz falsch damit), aber wie sieht das jetzt in LISP aus? 

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Geos
Mitglied
Vermessungstechniker i.R.


Sehen Sie sich das Profil von Geos an!   Senden Sie eine Private Message an Geos  Schreiben Sie einen Gästebucheintrag für Geos

Beiträge: 1017
Registriert: 21.09.2001

ACAD Map 2010, Win 7 Pro
eigene Lisp's<P>HW: Core i7 860, 2.8 GHz
3.3 GB, NVIDIA GeForce GTS 250

erstellt am: 13. Mrz. 2008 17:48    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Musicus 10 Unities + Antwort hilfreich

Wenn mich nicht alles täuscht, gibts ein Tool, das Objekte? Blöcke? bearbeitet und - ich glaub die Farbe - auf vonLayer legt - möglicherweise bei Cadwiesel?
Sollte es nicht genau passen, so bietet es zumindest Anschauungsunterricht.

------------------
Schöne Grüße
Ernst

www.geopaint.at

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

CADmium
Moderator
Maschinenbaukonstrukteur




Sehen Sie sich das Profil von CADmium an!   Senden Sie eine Private Message an CADmium  Schreiben Sie einen Gästebucheintrag für CADmium

Beiträge: 13508
Registriert: 30.11.2003

.

erstellt am: 13. Mrz. 2008 20:54    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Musicus 10 Unities + Antwort hilfreich

Die Lisplösung könnte so aussehen. Der interne Ausbau läßt auch weitere Filterkriterien, Mehrfachkombinationen Filtern->Zieleigenschaften in einem Durchlauf , Scripteinsatz usw. zu. (Die letzteren Sachen allerdings nur nach festen Vorgaben für den Hausgebrauch)

Mit deinen command-Sachen wirst du bei mehreren Layouts,Blockelementen usw. recht bald an Grenzen stoßen.

Aber ich will dir den Mut  nicht nehmen, guck dir
Code vom Wiesel an, der Blockelemente durchläuft oder Sachen von mir hier im Forum zu dem Thema (set _by_layer oder so) und arbeite dich ein, so wirst du zumindest in einiger Zeit zu Teillösungen kommen können. noch ein Tipp: Fang mit kleinen Funktionen an. Gestalte dies möglichst universal. Lies dir die  Stilblütenkapitel in Mapcars Tutorial durch.

------------------
      - Thomas -
"Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben."

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Wolfgang S
Mitglied
CADaver


Sehen Sie sich das Profil von Wolfgang S an!   Senden Sie eine Private Message an Wolfgang S  Schreiben Sie einen Gästebucheintrag für Wolfgang S

Beiträge: 270
Registriert: 06.03.2006

AC 2009, C3D 2009, AC 2010, C3D 2010, AC 2011, C3D 2011, RVT 2010, RVT 2011, ASD 2011 und alles darunter bis R14 +
Win XP, Win XP64, Win 7/64

erstellt am: 14. Mrz. 2008 09:55    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Musicus 10 Unities + Antwort hilfreich

Ich verwende für solche Zwecke gerne das "laytrans" aus den Expresstools

Schablone angeben -> Layername alt / Layername neu usw.

Schablonen können auch gespeichert werden.

Dies funktioniert allerdings natürlich nur, wenn die Layer sinngemäß gleich bleiben.

wenn aus einem "Ansicht dünn"  ein "Beton Ansicht" werden soll wird´s sehr fad.

Stichwort in der AutoCAD-Hilfe: "layer translator"
auf Deutsch weiß ich´s nicht.

lg
Wolfgang S

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Musicus
Mitglied
Staatl. gepr. Techniker


Sehen Sie sich das Profil von Musicus an!   Senden Sie eine Private Message an Musicus  Schreiben Sie einen Gästebucheintrag für Musicus

Beiträge: 685
Registriert: 26.07.2005

AutoCAD 2018
Linear, CATS
Windows 10

erstellt am: 14. Mrz. 2008 11:39    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Danke für die Antworten.

Nochmal zu den Layern, ich glaub, das ist falsch angekommen.
Beispiel Achslinien:
hier gibt es jede Menge Layer für Achslinien: ACHSE, ACHSEN, MITTE, MITTELLINIEN, M2 usw.
künftig sollen alle Elemente dieser Layer auf dem Layer ACHSEN liegen.
Und das geht so weiter durch alle Layer    (sowas kommt davon, wenn es keine exakten Vorgaben gibt)
Also mit einfach nur umbenennen ist es da nicht getan.

Laytrans kennt mein AutoCAD nicht, liegt aber wahrscheinlich an der Uralt-Version hier, habe auch nur die deutschen (abgespeckten) E-Tools.

@CADmium: Layouts sind kein Problem, sowas gibts hier nämlich nicht ... nur die Blockelemente eben, und von denen gibt's ganz viele!

Die Wiesel-Lisps mit Blockbearbeitung werde ich mal durchackern (in der Hoffnung was zu verstehen). Mal sehen, wann das wird, heute hab ich keine Zeit und am Wochenende Besuch. Werde aber wohl auf alle Fälle das ganze LISP-Zeug mitnehmen, wenn ich demnächst zur Reha fahr, da sollte Zeit für sowas sein. (Irgendwie fehlt mir hier jemand, den ich mal fragen kann, wenn ich was nicht verstehe, hier hat keiner Ahnung von LISP.)

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Wolfgang S
Mitglied
CADaver


Sehen Sie sich das Profil von Wolfgang S an!   Senden Sie eine Private Message an Wolfgang S  Schreiben Sie einen Gästebucheintrag für Wolfgang S

Beiträge: 270
Registriert: 06.03.2006

AC 2009, C3D 2009, AC 2010, C3D 2010, AC 2011, C3D 2011, RVT 2010, RVT 2011, ASD 2011 und alles darunter bis R14 +
Win XP, Win XP64, Win 7/64

erstellt am: 15. Mrz. 2008 07:36    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Musicus 10 Unities + Antwort hilfreich

Moin Moin!

ja, mit 2000 ist es jedenfalls mühsam, ich weiß aber auch nicht, ab welcher Version "_LAYTRANS" inkludiert wird. Habe aber nachgesehen und die Vorgaben werden als .dws, also Drawing Standard gespeichert.
da wird sich vor der 2004er nix abspielen befürchte ich.

zum vorigen Beitrag noch eine Idee:
das Einfügen eines Blocks per Lisp, der schon alle vordefinierten Layer enthält wäre IMHOIn my humble oppinion (Meiner Meinung nach) einfacher als die 100fache Wiederholung von (command "_layer" ...) zum Erstellen.
Allerdings, wenn die Layernamen in der Zeichnung schon vorkommen werden sie nicht überschrieben sondern bleiben. Dies betrifft ebenso die Linetypes und Farben dieser Layer.


ein Tip von mir:
Auf ACAD 06-08 die Drawing Standards auf Brauchbarkeit testen und wenns funktioniert die 2000erVersion updaten.
Wird vermutlich günstiger kommen als diese Funktionen für´s 2000er nochmal nachzuprogrammieren.
(Dies aber nur als private Meinung noch drangehängt)

lg und schöWoE
Wolfgang

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Musicus
Mitglied
Staatl. gepr. Techniker


Sehen Sie sich das Profil von Musicus an!   Senden Sie eine Private Message an Musicus  Schreiben Sie einen Gästebucheintrag für Musicus

Beiträge: 685
Registriert: 26.07.2005

AutoCAD 2018
Linear, CATS
Windows 10

erstellt am: 17. Mrz. 2008 14:15    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Zitat:
Original erstellt von Wolfgang S:

zum vorigen Beitrag noch eine Idee:
das Einfügen eines Blocks per Lisp, der schon alle vordefinierten Layer enthält wäre IMHOIn my humble oppinion (Meiner Meinung nach) einfacher als die 100fache Wiederholung von (command "_layer" ...) zum Erstellen.
Allerdings, wenn die Layernamen in der Zeichnung schon vorkommen werden sie nicht überschrieben sondern bleiben. Dies betrifft ebenso die Linetypes und Farben dieser Layer.

Genau das ist der Knackpunkt, die Layer haben natürlich auch alle willkürlich definierte Linientypen und Farben. Mit (command ...) erreiche ich ja auch eine Neudefinition eines bestehenden Layers.
Und es sind ja nur 16 Stück, also alles sehr übersichtlich.


Zitat:
ein Tip von mir:
Auf ACAD 06-08 die Drawing Standards auf Brauchbarkeit testen und wenns funktioniert die 2000erVersion updaten.
Wird vermutlich günstiger kommen als diese Funktionen für´s 2000er nochmal nachzuprogrammieren.
(Dies aber nur als private Meinung noch drangehängt)

lg und schöWoE
Wolfgang


Frage: funktioniert das denn, wenn ich mir das entsprechende Lisp aus dem 2006er in mein 2000er kopiere? Oder müssen da noch andere Umgebungsvoraussetzungen erfüllt sein, die mein 2000er nicht bietet? Ein allgemeines Softwareupdate wird hier wohl nicht passieren, es hieß zwar mal, wir bekämen 2008, aber mittlerweile stehen die Zeichen mehr auf Inventor für alle Abteilungen (bisher ACAD 2000/2006 und ME10).

Gruß,
Nadja

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Musicus
Mitglied
Staatl. gepr. Techniker


Sehen Sie sich das Profil von Musicus an!   Senden Sie eine Private Message an Musicus  Schreiben Sie einen Gästebucheintrag für Musicus

Beiträge: 685
Registriert: 26.07.2005

AutoCAD 2018
Linear, CATS
Windows 10

erstellt am: 19. Mrz. 2008 16:00    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Ich habe mich jetzt mal über nuke.lsp gemacht, das erscheint mir am praktischsten für mich.
Ich denke jetzt mal einfach laut und wäre dankbar, wenn man mir die paar Fragen beantworten könnte bzw. mich auf den richtigen Weg schubsen könnte, wenn ich davon abgekommen bin.

Erstmal der erste Teil des Codes, leicht gekürzt und mit Kommentaren von mir versehen:

Code:
(defun To-0( BLCK / BNAME BLIST E EDATA TMP )
   (if (=(type BLCK)(read "LIST"));prüft, ob BLCK eine Liste ist
   (setq TMP(car BLCK) BLIST(cdr BLCK) BLCK TMP TMP nil))
;weißt den Variablen Werte zu: TMP = erstes Listenelement, BLIST = Rest der Liste (als Liste)
;BLCK = TMP, TMP = nil
   (setq BLCK(tblsearch "BLOCK" BLCK));durchsucht die Blockliste nach dem Namen, den BLCK weiter oben erhalten hat und weist ihn BLCK zu
   (if
      (and
         (/=(logand(cdr(assoc 70 BLCK))1)1)  ;skips annomyous blocks
         (/= (logand(cdr(assoc 70 BLCK))4)4) ;skips xrefs
      );and
      (progn
         (setq E (cdr (assoc -2 BLCK)))
;durchsucht die Liste BLCK nach dem Element -2 (Name), gibt desen Wert zurück (Liste),
;diesem Rückgabewert wird das erste Element "entzogen", die restliche Liste (Elementname) wird der Variablen E zugewiesen
         (while E
            (if (=(cdr(assoc 0 (entget E))) "INSERT") ;If the object is a block
;ermittelt die Elementdefinitionen von E, ermittelt daraus den Wert des Objekttyps (0) und gibt diesen zurück
;Rückgabe wird auf Übereinstimmung mit INSERT geprüft
               (progn
                  (setq BNAME(cdr(assoc 2(entget E)))) ;save the name to a list
;ermittelt die Elementdefinition von E, ermittelt daraus den Wert des Namens (2) und gibt diesen zurück
;Rückgabewert wird der Variablen BNAME zugewiesen
                  (if (not (member BNAME BLIST)) ;prüft, ob BNAME bereits in BLIST enthalten ist, wenn nicht, dann:
                     (if (not BLIST)(setq BLIST (list BNAME)) ;wird eine Liste BLIST mit dem Atom BNAME erstellt, falls diese noch nicht existiert
                        (setq BLIST(append BLIST(list BNAME))) ;oder BNAME wird an die Liste BLIST angehangen
                     );if
                  );if
               );progn     
            );if
            (setq EDATA (entget E))
            (if(assoc 62 EDATA) ;Resets object color to BYLAYER if it isn't.
               (setq EDATA(subst(cons 62 256)(assoc 62 EDATA)EDATA))
            );if
            (if(assoc 6 EDATA) ;Resets object linetype to BYLAYER if it isn't.
               (setq EDATA(subst(cons 6 "BYLAYER")(assoc 6 EDATA)EDATA))
            );if
            (setq EDATA(subst (cons 8 "0")(assoc 8 EDATA)EDATA));changes layer to 0
            (entmod EDATA);updates entity
            (setq E (entnext E));get next enitiy, nil if end of block
         );end while E
      );progn
   );if
   BLIST; returns names of any nested blocks
);defun

Jetzt meine Fragen:

In welcher Reihenfolge arbeitet das Programm eigentlich? Instinktiv würde ich sagen, von oben nach unten. Aber woher bekommt BLCK dann überhaupt einen Inhalt? Im zweiten Programmteil, der den ersten aufruft, taucht BLCK auch nicht mehr auf.

Welche Aufgabe hat dieser Abschnitt eigentlich?

Code:
(setq BLCK(tblsearch "BLOCK" BLCK));

Soweit ich das verstehe, wird BLCK der Wert zugewiesen, den es vorher schon hatte.
Ist "BLOCK" eigentlich von Haus aus die Liste mit allen in der Zeichnung verwendeten Blöcken?

Der Teil ist mir zu hoch, habe ich jetzt einfach so hingenommen:

Code:
(and
         (/=(logand(cdr(assoc 70 BLCK))1)1)  ;skips annomyous blocks
         (/= (logand(cdr(assoc 70 BLCK))4)4) ;skips xrefs
      );and

Dieser Teil ist soweit klar:

Code:
(progn
         (setq E (cdr (assoc -2 BLCK)))
;durchsucht die Liste BLCK nach dem Element -2 (Name), gibt desen Wert zurück (Liste),
;diesem Rückgabewert wird das erste Element "entzogen", die restliche Liste (Elementname) wird der Variablen E zugewiesen
         (while E
            (if (=(cdr(assoc 0 (entget E))) "INSERT") ;If the object is a block
;ermittelt die Elementdefinitionen von E, ermittelt daraus den Wert des Objekttyps (0) und gibt diesen zurück
;Rückgabe wird auf Übereinstimmung mit INSERT geprüft
               (progn
                  (setq BNAME(cdr(assoc 2(entget E)))) ;save the name to a list
;ermittelt die Elementdefinition von E, ermittelt daraus den Wert des Namens (2) und gibt diesen zurück
;Rückgabewert wird der Variablen BNAME zugewiesen
                  (if (not (member BNAME BLIST)) ;prüft, ob BNAME bereits in BLIST enthalten ist, wenn nicht, dann:
                     (if (not BLIST)(setq BLIST (list BNAME)) ;wird eine Liste BLIST mit dem Atom BNAME erstellt, falls diese noch nicht existiert
                        (setq BLIST(append BLIST(list BNAME))) ;oder BNAME wird an die Liste BLIST angehangen
                     );if
                  );if
               );progn     
            );if

Aber: wieso kommt hier überhaupt eine Schleife (while-Anweisung) zum Einsatz, wenn BLCK eigentlich nur ein Element enthält, das bekommt es ja ganz oben zugewiesen, daher wieder die Frage, in welcher Reihenfolge das eigentlich abgearbeitet wird (also von links nach rechts bzw. von innen nach außen ist soweit klar).

Den Teil:

Code:
(setq EDATA (entget E))
            (if(assoc 62 EDATA) ;Resets object color to BYLAYER if it isn't.
               (setq EDATA(subst(cons 62 256)(assoc 62 EDATA)EDATA))
            );if
            (if(assoc 6 EDATA) ;Resets object linetype to BYLAYER if it isn't.
               (setq EDATA(subst(cons 6 "BYLAYER")(assoc 6 EDATA)EDATA))
            );if
            (setq EDATA(subst (cons 8 "0")(assoc 8 EDATA)EDATA));changes layer to 0
            (entmod EDATA);updates entity
            (setq E (entnext E));get next enitiy, nil if end of block
         );end while E
      );progn
   );if
   BLIST; returns names of any nested blocks
);defun

habe ich jetzt erstmal weggelassen, weil der ja die Objekteigenschaften anpasst, da müsste dann mein Schwanz von oben irgendwie rein.

So, ich hoffe jetzt mal, nicht ganz auf dem Holzweg zu sein.
Und wenn ich nicht ganz daneben liege, müsste der von mir kommentierte Teil doch eine Liste mit allen Blöcken in der Zeichnung erstellen, die nicht anonym oder Xrefs sind.

[Diese Nachricht wurde von Musicus am 19. Mrz. 2008 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Geos
Mitglied
Vermessungstechniker i.R.


Sehen Sie sich das Profil von Geos an!   Senden Sie eine Private Message an Geos  Schreiben Sie einen Gästebucheintrag für Geos

Beiträge: 1017
Registriert: 21.09.2001

ACAD Map 2010, Win 7 Pro
eigene Lisp's<P>HW: Core i7 860, 2.8 GHz
3.3 GB, NVIDIA GeForce GTS 250

erstellt am: 19. Mrz. 2008 19:02    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Musicus 10 Unities + Antwort hilfreich

Zitat:
In welcher Reihenfolge arbeitet das Programm eigentlich? Instinktiv würde ich sagen, von oben nach unten

Stimmt, bzw. von innen nach aussen, was die Klammern betrifft.
Zitat:
(defun To-0( BLCK / BNAME BLIST E EDATA TMP )

BLCK muß der Funktion übergeben werden

Hab leider jetzt nicht die Zeit, alles durch zu arbeiten, aber ich hoffe das hilft erstmal.

------------------
Schöne Grüße
Ernst

www.geopaint.at

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Musicus
Mitglied
Staatl. gepr. Techniker


Sehen Sie sich das Profil von Musicus an!   Senden Sie eine Private Message an Musicus  Schreiben Sie einen Gästebucheintrag für Musicus

Beiträge: 685
Registriert: 26.07.2005

AutoCAD 2018
Linear, CATS
Windows 10

erstellt am: 10. Apr. 2008 17:26    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities


KONVERT.zip

 
Bin immernoch an der Sache dran, war nur in letzter Zeit nicht so sehr viel Zeit für.

@Geos

Nachdem ich in der Zwischenzeit das Kapitel über die Schleifenanweisungen durchgearbeitet hatte, war mir einiges auch viel klarer.

Muss man ja erstmal drauf kommen, dass die if-Anweisung in LISP ohne else auskommt! Wieder was gelernt.

Ich habe noch ein LISP gefunden, was dem, was ich suche, schon recht nahe kommt. Hab ich mal angehangen. Keine Ahnung mehr, wo ich das gefunden hatte (bei cad.de auf jeden Fall) und von wem das stammt, aber dem Ersteller gehört hier ein großes Dankeschön. Der Code ist so klasse kommentiert, dass ich den auf Anhieb verstanden hab!

Hab aber daraus resultierend gleich wieder ne Frage 

Auszug aus UPDATE_BLOCK

Code:
; wenn Blockelement kein Unterblock ist..................................................
                (setq OBJEKTDATEN (entget BLOCKELEMENT))                          ; Elementdaten auslesen
                (if(assoc 62 OBJEKTDATEN)                            ; Objektfarbe auf "VONLAYER" setzen
                  (setq OBJEKTDATEN(subst(cons 62 256)(assoc 62 OBJEKTDATEN)OBJEKTDATEN))
                )
                (if(assoc 6 OBJEKTDATEN)                        ; Objekt-Linientyp auf "VONLAYER" setzen
                  (setq OBJEKTDATEN(subst(cons 6 "BYLAYER")(assoc 6 OBJEKTDATEN)OBJEKTDATEN))
                )
                (if(assoc 370 OBJEKTDATEN)                                  ; Objekt-Linienstärke setzen
                  ;(setq OBJEKTDATEN(subst(cons 370 -2)(assoc 370 OBJEKTDATEN)OBJEKTDATEN)) ;  "vonBLOCK"
                  ;(setq OBJEKTDATEN(subst(cons 370 -2)(assoc 370 OBJEKTDATEN)OBJEKTDATEN)) ;  "Vorgabe"
                  (setq OBJEKTDATEN                                                    ; auf "von LAYER"
                    (list  (reverse(cdr(member(assoc 370 OBJEKTDATEN) (reverse OBJEKTDATEN))))
                                  (cdr(member(assoc 370 OBJEKTDATEN)OBJEKTDATEN)))
                  )     
                )

In dem Teil werden ja die Eigenschaften geändert. Könnte ich jetzt nach
(setq OBJEKTDATEN (entget BLOCKELEMENT))
auch meinen Schwanz (siehe 1. Beitrag) bringen, oder funktioniert das nicht? Ich denke ja, eher nicht, daher gleich die nächste Frage:
Wie kann ich innerhalb der Auswahl (assoc x OBJEKTDATEN) so filtern, dass das gleiche rauskommt wie bei

Code:
(if(ssget "_X" '((8 . "LAYER*,LAY*")))
(command "eigändr" "V" "" "LA" "LAYERNAME" "LTF" "1" "")
)

und
Code:
(if(ssget "_X" '((0 . "DIMENSION") (-4 . "<NOT") (8 . "BEMASSUNG*") (-4 . "NOT>"))) (command "eigändr" "V" "" "LA" "BEMASSUNG" "")
)
(if(ssget "_X" '((0 . "*TEXT") (-4 . "<NOT") (8 . "TEXT*") (-4 . "NOT>"))) (command "eigändr" "V" "" "LA" "TEXT03" "")
)
(if(ssget "_X" '((0 . "HATCH") (-4 . "<NOT") (8 . "SCHRAFFUR") (-4 . "NOT>"))) (command "eigändr" "V" "" "LA" "SCHRAFFUR" "")
)

Gibts eigentlich irgendwo ne Liste, welche Zahl welche Eigenschaft steuert? Also 62 Farbe, 6 Layer, 370 Linienstärke usw.
Der DXF-Gruppencode, den ich mir aus der Hilfe ausgedruckt hab, ist da irgendwie sehr sparsam, bei den von-bis-Angaben beispielsweise habe ich immer keine Ahnung, was das eigentlich sein soll.

Jetzt noch paar allgemeine Fragen:
Mal angenommen, ich krieg den obigen Code nach meinen Wünschen geändert, wie verbinde ich das dann mit meinem bisherigen Code? Kann ich das einfach hintereinanderweg in die selbe Datei schreiben? Oder muss ich meinen bisherigen Teil erst noch irgendwie umbiegen?
Ich denke mal, einfacher wäre es, die beiden Codes als zwei Dateien stehen zu lassen, da es sicher auch möglich ist, eine LISP aus einer anderen heraus aufzurufen (dabei vorausgesetzt, dass die aufzurufende LISP bereits geladen ist, ich denke da an die Startgruppe), aber wie?

Gibt es eigentlich ein Programm, also eine Art Entwicklungsumgebung, in der ich meinen Code auch testen und auf Fehler (Syntax) kontrollieren kann? Bisher lade ich das LISP immer in meine Testzeichnung und gucke, ob und was passiert.
Ich fahre am Montag zur Reha, in der Zeit wollte ich das Programm eigentlich fertig bekommen (da hab ich ja meine Ruhe), ich hab aber auf meinem Laptop kein AutoCAD drauf. Und falls ich keinen Internetzugang dort habe, wird das eh nix, mir fehlt ja dann die cad.de-Recherchequelle  . Alles, was ich in Papierform habe, nehme ich auf jeden Fall erstmal mit, muss es ja nicht tragen! Und bis Sonntag kann ich ja definitiv noch Forum gucken.

So, ich hoffe jetzt mal, das war nicht zu wirr zum Feierabend. Wäre klasse, wenn mir jemand Licht ins Dunkel bringen könnte!
Auf jeden Fall macht dieses LISP mehr Spaß als C (deswegen hab ich mein Studium geschmissen), irgendwie lern ich das schon noch  (und dann steig ich demnächst auf Pro/E um und brauch das nie wieder ... aber es macht immerhin nicht dümmer).

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

CADmium
Moderator
Maschinenbaukonstrukteur




Sehen Sie sich das Profil von CADmium an!   Senden Sie eine Private Message an CADmium  Schreiben Sie einen Gästebucheintrag für CADmium

Beiträge: 13508
Registriert: 30.11.2003

.

erstellt am: 10. Apr. 2008 21:07    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Musicus 10 Unities + Antwort hilfreich

1.Danke für das "Danke"
2.DXF-Doku (eine von vielen) oder die
3. gib mal in der ACAD-Befehlszeile VLIDE ein
4. mehrere Lispprogramme können in einer Lispdatei stehen

------------------
      - Thomas -
"Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben."

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Musicus
Mitglied
Staatl. gepr. Techniker


Sehen Sie sich das Profil von Musicus an!   Senden Sie eine Private Message an Musicus  Schreiben Sie einen Gästebucheintrag für Musicus

Beiträge: 685
Registriert: 26.07.2005

AutoCAD 2018
Linear, CATS
Windows 10

erstellt am: 10. Apr. 2008 21:28    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Dein Code?

Ne im Ernst, mit solchen Kommentierungen macht das richtig Spaß! Daumen hoch dafür!

Mehrere LISP-Programme in einer Zeichnung? Cool. Auch einfachso als Befehlsaneinanderreihungen, so ohne defun?

DXF guck ich mir an, fürchte, ich muss doch ma ne neue Druckerpatrone für daheim besorgen!

VLIDE sagt mir was, ich meine, das hatte ich mir schon mal angeguckt, aber bin nicht dahinter gestiegen, wie das funktioniert.
Ist ja aber wahrscheinlich auch wieder an AutoCAD gebunden, also nix für meine Reha. Hier aufm Laptop hab ich keins drauf.

Danke schon mal für die Antworten.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Geos
Mitglied
Vermessungstechniker i.R.


Sehen Sie sich das Profil von Geos an!   Senden Sie eine Private Message an Geos  Schreiben Sie einen Gästebucheintrag für Geos

Beiträge: 1017
Registriert: 21.09.2001

ACAD Map 2010, Win 7 Pro
eigene Lisp's<P>HW: Core i7 860, 2.8 GHz
3.3 GB, NVIDIA GeForce GTS 250

erstellt am: 11. Apr. 2008 07:20    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Musicus 10 Unities + Antwort hilfreich

Zitat:
Mehrere LISP-Programme in einer Zeichnung?

Das sowieso!
Aber auch mehrere Programme in einer LSP-Datei:
(defun c:befehl (/...)
code
)

(defun funktion (parameter / )
code
)

Du kannst auch andere LSP-Dateien laden:
(load "abc.lsp" "Meldung im Fehlerfall")

Aufruf:
(c:befehl) oder
(funktion parameter)

Du könntest sogar per Lisp andere LSP-Dateien (Programme) schreiben (print > file),
die Du dann laden und aufrufen kannst.

------------------
Schöne Grüße
Ernst

www.geopaint.at

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Musicus
Mitglied
Staatl. gepr. Techniker


Sehen Sie sich das Profil von Musicus an!   Senden Sie eine Private Message an Musicus  Schreiben Sie einen Gästebucheintrag für Musicus

Beiträge: 685
Registriert: 26.07.2005

AutoCAD 2018
Linear, CATS
Windows 10

erstellt am: 23. Jun. 2008 12:19    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hab mal wieder bissel weiter gebastelt, der block_konvert-Code ist ne sehr gute Ausgangsbasis, weil der schon einen Teil von dem macht, was ich will.

Jetzt hängts aber wieder mal. Es geht darum, Objekte auf einen anderen Layer zu schieben in Abhängigkeit vom bisherigen Layer.

Code:

(setq OBJEKTDATEN(subst (cons 8 "0")(assoc 8 OBJEKTDATEN)OBJEKTDATEN))

macht ja eigentlich nix anderes, schiebt aber alles pauschal auf 0. Kann ich den Ziellayer irgendwie in Abhängigkeit definieren?

Außerhalb von Blöcken mach ich das so:

Code:
(if(ssget "_X" '((8 . "LAYER*,LAY*")))
(command "eigändr" "V" "" "LA" "LAYERNAME" "LTF" "1" "")
)

das funktioniert aber mit den Elementdaten nicht, ich würde dem jetzt halt gerne irgendwie mitteilen wollen, dass alle Elementdaten Layer (8) mit Wortlaut *MITT* und *ACHS* überschrieben werden sollen mit "ACHSEN" und Elementdaten Layer (8) mit Wortlaut *050*, *UMRISS05* und *AUSGEZOGEN* überschrieben werden sollen mit "UMRISS05" usw.

Was mir auch noch nicht klar ist, ob das überhaupt geht:

Mit

Code:

(if(ssget "_X" '((0 . "DIMENSION") (-4 . "<NOT") (8 . "BEMASSUNG*") (-4 . "NOT>"))) (command "eigändr" "V" "" "LA" "BEMASSUNG" "")
)
(if(ssget "_X" '((0 . "*TEXT") (-4 . "<NOT") (8 . "TEXT*") (-4 . "NOT>"))) (command "eigändr" "V" "" "LA" "TEXT03" "")
)
(if(ssget "_X" '((0 . "HATCH") (-4 . "<NOT") (8 . "SCHRAFFUR") (-4 . "NOT>"))) (command "eigändr" "V" "" "LA" "SCHRAFFUR" "")
)

prüfe ich außerhalb von Blöcken, ob Bemaßungen nicht auf dem Bemaßungslayer liegen und dann entsprechend verschoben werden, das gleiche für Texte und Schraffuren.

Texte denke ich sind nicht das Problem, aber Bemaßungen und Schraffuren sind ja unbenannte Blöcke, und die werden in dem BLOCK-KONVERT-Code ja von vornherein ausgeschlossen.
Wie bekomm ich solch eine Abfrage für Blockelemente hin?

Vielen Dank schon mal,
Nadja

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

CADwiesel
Moderator
CAD4FM UG




Sehen Sie sich das Profil von CADwiesel an!   Senden Sie eine Private Message an CADwiesel  Schreiben Sie einen Gästebucheintrag für CADwiesel

Beiträge: 1968
Registriert: 05.09.2000

AutoCAD, Bricscad
Wir machen das Mögliche unmöglich

erstellt am: 23. Jun. 2008 15:47    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Musicus 10 Unities + Antwort hilfreich

wenn es dir nur um das Ändern von Layern geht, warum nimmst du dann nicht das Tool konvlay? da kannst du eine Konvertierungsliste anlegen und es ändert dir dann die Layer.

------------------
Gruß
CADwiesel
Besucht uns im CHAT

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Musicus
Mitglied
Staatl. gepr. Techniker


Sehen Sie sich das Profil von Musicus an!   Senden Sie eine Private Message an Musicus  Schreiben Sie einen Gästebucheintrag für Musicus

Beiträge: 685
Registriert: 26.07.2005

AutoCAD 2018
Linear, CATS
Windows 10

erstellt am: 23. Jun. 2008 15:56    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities


test.lsp.txt

 
Ich guck's mir mal an.

Kann ich damit auch die Objekteigenschaften ändern? Ich will ja aus mehreren Layern einen machen und die Objekte auf Vonlayer bei Farbe und Linientyp setzen und den Linientypfaktor auf 1. Und das möglichst automatisch auf Knopfdruck.

Ich hab mal das angehangen, was ich schon habe, das funktioniert auch wie es soll bei Elementen, die nicht in Blöcken sind. Genau das gleiche will ich jetzt halt irgendwie für die Blöcke umsetzen. Außer dem ersten Teil mit den Layerdefinitionen, einmal anlegen reicht ja.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Musicus
Mitglied
Staatl. gepr. Techniker


Sehen Sie sich das Profil von Musicus an!   Senden Sie eine Private Message an Musicus  Schreiben Sie einen Gästebucheintrag für Musicus

Beiträge: 685
Registriert: 26.07.2005

AutoCAD 2018
Linear, CATS
Windows 10

erstellt am: 23. Jun. 2008 16:02    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hab's jetzt nicht ausprobiert, aber laut Beschreibung benennt es ja nur Layer um.
Ich will ja den Inhalt von mehreren Layern auf einen anderen legen, den es schon gibt, Sozusagen den Inhalt verschieben.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

CADmium
Moderator
Maschinenbaukonstrukteur




Sehen Sie sich das Profil von CADmium an!   Senden Sie eine Private Message an CADmium  Schreiben Sie einen Gästebucheintrag für CADmium

Beiträge: 13508
Registriert: 30.11.2003

.

erstellt am: 23. Jun. 2008 16:06    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Musicus 10 Unities + Antwort hilfreich

 
Zitat:
Original erstellt von Musicus:

Ich hab mal das angehangen, was ich schon habe, das funktioniert auch wie es soll bei Elementen, die nicht in Blöcken sind. Genau das gleiche will ich jetzt halt irgendwie für die Blöcke umsetzen. Außer dem ersten Teil mit den Layerdefinitionen, einmal anlegen reicht ja.

Jo, und wie es geht, hab ich dir
hier schon mal aufgezeigt ... aber das sind eben nicht nur 20 Zeilen ...  und wie das prinzipiell in Blöcken funktioniert, kannst du aus dem anderen Lisp entnehmen .. da hab ich nicht mit Kommentaren gespart ..

------------------
      - Thomas -
"Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben."

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Musicus
Mitglied
Staatl. gepr. Techniker


Sehen Sie sich das Profil von Musicus an!   Senden Sie eine Private Message an Musicus  Schreiben Sie einen Gästebucheintrag für Musicus

Beiträge: 685
Registriert: 26.07.2005

AutoCAD 2018
Linear, CATS
Windows 10

erstellt am: 23. Jun. 2008 16:28    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Korrigier mich bitte, wenn ich falsch liege.
Sieht für mich so aus, als ob ich den Filter dann für jeden Layer per Hand einstellen muss.

Mir geht es hier nicht darum, mal eine Zeichnung zu bearbeiten, hier liegen mehrere 10.000 Zeichnungen, die angepasst werden sollen.
Mein Ziel ist folgender Arbeitsablauf: Zeichnung öffnen, LISP ausführen, evtl. per Hand was nachkorrigieren (Zeichnungsfehler kann ein Programm nicht erfassen), bereinigen, speichern, nächste Zeichnung.

Und dann wollte ich halt nix kaufen, sondern selber machen und dabei was lernen.


Mit dem anderen Code arbeite ich bereits, deshalb hatte ich ja auch diese Frage:

Zitat:
Original erstellt von Musicus:
Hab mal wieder bissel weiter gebastelt, der block_konvert-Code ist ne sehr gute Ausgangsbasis, weil der schon einen Teil von dem macht, was ich will.

Jetzt hängts aber wieder mal. Es geht darum, Objekte auf einen anderen Layer zu schieben in Abhängigkeit vom bisherigen Layer.

Code:

(setq OBJEKTDATEN(subst (cons 8 "0")(assoc 8 OBJEKTDATEN)OBJEKTDATEN))

macht ja eigentlich nix anderes, schiebt aber alles pauschal auf 0. Kann ich den Ziellayer irgendwie in Abhängigkeit definieren?

Außerhalb von Blöcken mach ich das so:

Code:
(if(ssget "_X" '((8 . "LAYER*,LAY*")))
(command "eigändr" "V" "" "LA" "LAYERNAME" "LTF" "1" "")
)

das funktioniert aber mit den Elementdaten nicht, ich würde dem jetzt halt gerne irgendwie mitteilen wollen, dass alle Elementdaten Layer (8) mit Wortlaut *MITT* und *ACHS* überschrieben werden sollen mit "ACHSEN" und Elementdaten Layer (8) mit Wortlaut *050*, *UMRISS05* und *AUSGEZOGEN* überschrieben werden sollen mit "UMRISS05" usw.


[Diese Nachricht wurde von Musicus am 23. Jun. 2008 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

CAD-Huebner
Ehrenmitglied V.I.P. h.c.
Verm.- Ing., ATC-Trainer



Sehen Sie sich das Profil von CAD-Huebner an!   Senden Sie eine Private Message an CAD-Huebner  Schreiben Sie einen Gästebucheintrag für CAD-Huebner

Beiträge: 9732
Registriert: 01.12.2003

One AutoCAD 2.5 - 2023, Civil 3D, Win10/win11

erstellt am: 23. Jun. 2008 16:56    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Musicus 10 Unities + Antwort hilfreich

Hier war ich etwas unhöflich - ich habs wieder gelöscht.

-----------------
Mit freundlichem Gruß

Udo Hübner
www.CAD-Huebner.de

[Diese Nachricht wurde von CAD-Huebner am 23. Jun. 2008 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Musicus
Mitglied
Staatl. gepr. Techniker


Sehen Sie sich das Profil von Musicus an!   Senden Sie eine Private Message an Musicus  Schreiben Sie einen Gästebucheintrag für Musicus

Beiträge: 685
Registriert: 26.07.2005

AutoCAD 2018
Linear, CATS
Windows 10

erstellt am: 23. Jun. 2008 17:09    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Zitat:
Original erstellt von Musicus:
Hab mal wieder bissel weiter gebastelt, der block_konvert-Code ist ne sehr gute Ausgangsbasis, weil der schon einen Teil von dem macht, was ich will.

...

Vielen Dank schon mal,
Nadja


Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

CADmium
Moderator
Maschinenbaukonstrukteur




Sehen Sie sich das Profil von CADmium an!   Senden Sie eine Private Message an CADmium  Schreiben Sie einen Gästebucheintrag für CADmium

Beiträge: 13508
Registriert: 30.11.2003

.

erstellt am: 23. Jun. 2008 20:24    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Musicus 10 Unities + Antwort hilfreich

ok..dann mal weiter ..
Zitat:
Jetzt hängts aber wieder mal. Es geht darum, Objekte auf einen anderen Layer zu schieben in Abhängigkeit vom bisherigen Layer.

    Code:
    (setq OBJEKTDATEN(subst (cons 8 "0")(assoc 8 OBJEKTDATEN)OBJEKTDATEN))

macht ja eigentlich nix anderes, schiebt aber alles pauschal auf 0. Kann ich den Ziellayer irgendwie in Abhängigkeit definieren?


mach doch
(if (=(strcase(cdr(assoc 8  OBJEKTDATEN)))"URSPRUNG")
  (setq OBJEKTDATEN(subst (cons 8 "NEUERLAYER")(assoc 8 OBJEKTDATEN)OBJEKTDATEN))
)

bei mehreren Layern  kann man dann cond verwenden oder statt = beim Vergleich wcmatch ...

aber das sind Grundlagen .. und du willst scheinbar ziemlich weit oben einsteigen .. mit zusammenkopierten Code wird man da aber bald an die Grenzen stoßen.
Deshalb lieber klein anfangen und wirklich das Basisverständnis verinnerlichen oder wenn die Zeit drängt, oder die Sache wirtschaftlich betrachtet wird : beauftragen. Ich will hier niemanden was aufdrängeln, sorry, wenn der Eindruck entstand, aber manchmal erscheint mir das für den Fragenden halt der sinnvollere Weg.

------------------
  - Thomas -
"Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben."

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Musicus
Mitglied
Staatl. gepr. Techniker


Sehen Sie sich das Profil von Musicus an!   Senden Sie eine Private Message an Musicus  Schreiben Sie einen Gästebucheintrag für Musicus

Beiträge: 685
Registriert: 26.07.2005

AutoCAD 2018
Linear, CATS
Windows 10

erstellt am: 02. Jul. 2008 18:31    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Ich hab's geschafft 

aus dem Teil

(if (=(strcase(cdr(assoc 8  OBJEKTDATEN)))"URSPRUNG")
  (setq OBJEKTDATEN(subst (cons 8 "NEUERLAYER")(assoc 8 OBJEKTDATEN)OBJEKTDATEN))
)

habe ich jetzt das hier gemacht

(cond
  ((wcmatch(strcase(cdr(assoc 8 OBJEKTDATEN))) "*ISTNAME1*")
    (setq OBJEKTDATEN(subst (cons 8 "SOLLNAME1")(assoc 8 OBJEKTDATEN)OBJEKTDATEN))
  )
  ((wcmatch(strcase(cdr(assoc 8 OBJEKTDATEN))) "*ISTNAME2*")
    (setq OBJEKTDATEN(subst (cons 8 "SOLLNAME2")(assoc 8 OBJEKTDATEN)OBJEKTDATEN))
  )
; usw
  ('T "Unbekannter Layer")
) ; Ende cond


und es funktioniert 


was jetzt noch nicht erschlagen ist damit, ist dieser Part innerhalb von Blöcken:

(if(ssget OBJEKTDATEN '((0 . "DIMENSION") (-4 . "<NOT") (8 . "BEMASSUNG*") (-4 . "NOT>")))
(command "eigändr" "V" "" "LA" "BEMASSUNG" "")
)
(if(ssget OBJEKTDATEN '((0 . "*TEXT") (-4 . "<NOT") (8 . "TEXT*") (-4 . "NOT>")))
(command "eigändr" "V" "" "LA" "TEXT03" "")
)
(if(ssget OBJEKTDATEN '((0 . "HATCH") (-4 . "<NOT") (8 . "SCHRAFFUR") (-4 . "NOT>")))
(command "eigändr" "V" "" "LA" "SCHRAFFUR" "")
)

aber das ist nicht weiter tragisch, kann ich mit leben.

Jetzt muss ich nur noch diese neue Datei aus meiner alten heraus aufrufen, und dann kann ich damit an die "Öffentlichkeit" gehen.

Jetzt bin ich zufrieden mit der Welt 
Und jetzt Feierabend!

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Dorfy
Mitglied
Double-Dipl.-Ing. Bleistiftanspitzer


Sehen Sie sich das Profil von Dorfy an!   Senden Sie eine Private Message an Dorfy  Schreiben Sie einen Gästebucheintrag für Dorfy

Beiträge: 900
Registriert: 21.07.2006

AutoCad2007, ProE, HiCad

erstellt am: 03. Jul. 2008 06:57    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Musicus 10 Unities + Antwort hilfreich

Morgen,
... schön schön 
zu Blöcken bzw Elementen in Blöcken
schau dir mal http://www.jtbworld.com/lisp/axblock.htm
an...
Mfg Heiko

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Musicus
Mitglied
Staatl. gepr. Techniker


Sehen Sie sich das Profil von Musicus an!   Senden Sie eine Private Message an Musicus  Schreiben Sie einen Gästebucheintrag für Musicus

Beiträge: 685
Registriert: 26.07.2005

AutoCAD 2018
Linear, CATS
Windows 10

erstellt am: 03. Jul. 2008 11:38    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Okay ...

Aber was hat das mit meiner Aufgabenstellung zu tun 

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Dorfy
Mitglied
Double-Dipl.-Ing. Bleistiftanspitzer


Sehen Sie sich das Profil von Dorfy an!   Senden Sie eine Private Message an Dorfy  Schreiben Sie einen Gästebucheintrag für Dorfy

Beiträge: 900
Registriert: 21.07.2006

AutoCad2007, ProE, HiCad

erstellt am: 03. Jul. 2008 12:01    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Musicus 10 Unities + Antwort hilfreich

Hallo,
habe da evtl. noch was...

;; Layerliste Block
(defun NL (/ blocks vobj name blk layname laylst)
  (setq ename (car (entsel "Block: ")))

  (and
    (setq blocks (vla-get-Blocks
  (vla-get-ActiveDocument (vlax-get-acad-object))
)
    )
    (setq vobj (vlax-ename->vla-object ename))
    (setq name (vlax-get vobj 'Name))
    (setq blk (vla-item blocks name))
    (vlax-for item blk
      (setq layname (vlax-get item 'Layer))
      (if (not (member layname laylst))
(setq laylst (cons layname laylst))
      )
    )
  )
  laylst
) ;end


;; layer ändern
(defun NLayer (/ blocks vobj name blk layname laylst)
  (setq ename (car (entsel "Block: ")))

  (and
    (setq blocks (vla-get-Blocks
  (vla-get-ActiveDocument (vlax-get-acad-object))
)
    )
    (setq vobj (vlax-ename->vla-object ename))
    (setq name (vlax-get vobj 'Name))
    (setq blk (vla-item blocks name))
    (vlax-for item blk
      (if (equal (vlax-get item 'Layer) "Layer1")
(vla-Put-Layer item "Layer2")
      )

    )
  )
) ;end


...
mfg heiko

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Dorfy
Mitglied
Double-Dipl.-Ing. Bleistiftanspitzer


Sehen Sie sich das Profil von Dorfy an!   Senden Sie eine Private Message an Dorfy  Schreiben Sie einen Gästebucheintrag für Dorfy

Beiträge: 900
Registriert: 21.07.2006

AutoCad2007, ProE, HiCad

erstellt am: 04. Jul. 2008 07:41    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Musicus 10 Unities + Antwort hilfreich

Morgen,
...habe da nochwas...

(defun block_lay (/ blks doc blk ent)
  (setq blks (vla-get-blocks
      (setq doc (vla-get-activedocument
  (vlax-get-acad-object)
)
      )
    )
  )
  (vlax-for blk blks
    (if (not (wcmatch (vla-get-name blk) "*Model*,*Paper*"))
      (progn
(vlax-for ent blk
  (setq xxx (vlax-get ent 'Layer))
  (cond
    ((wcmatch (vlax-get ent 'Layer) "*Mline*")
    (vla-Put-Layer ent "Achsen")
    ((wcmatch (vlax-get ent 'Layer) "*Achse*")
    (vla-Put-Layer ent "Achsen")
    ((wcmatch (vlax-get ent 'Layer) "*Mitte*")
    (vla-Put-Layer ent "Achsen")
    )
    (T nil)
  )
)
      )
    )
  )
  (vla-regen doc acActiveViewport)
  (vla-endundomark doc)
)

mfg heiko

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

CADmium
Moderator
Maschinenbaukonstrukteur




Sehen Sie sich das Profil von CADmium an!   Senden Sie eine Private Message an CADmium  Schreiben Sie einen Gästebucheintrag für CADmium

Beiträge: 13508
Registriert: 30.11.2003

.

erstellt am: 04. Jul. 2008 08:00    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Musicus 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von Dorfy:
Morgen,
...habe da nochwas... ;)

    (if (not (wcmatch (vla-get-name blk) "*Model*,*Paper*"))
      (progn


ist doch K... : warum soll ein Block nicht z.b. "KranModell* heißen dürfen ?

Teste doch mit vla-get-ISlayout ..... aber damit schließt du die Toplevelobjecte im LAyout mit aus? warum eigentlich ? du willst doch alle Objekte der Zeichnung auf ihre Layer überprüfen?! Und warum soo eine spezielle Funktion mit vorgegebenen Layernamen? Ist es nicht besser , die Layernamen als dottet-Pair-Liste ("Alt" "NEU") als Funktionsparameter zu übergeben?

------------------
  - Thomas -
"Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben."

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Dorfy
Mitglied
Double-Dipl.-Ing. Bleistiftanspitzer


Sehen Sie sich das Profil von Dorfy an!   Senden Sie eine Private Message an Dorfy  Schreiben Sie einen Gästebucheintrag für Dorfy

Beiträge: 900
Registriert: 21.07.2006

AutoCad2007, ProE, HiCad

erstellt am: 04. Jul. 2008 08:45    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Musicus 10 Unities + Antwort hilfreich

@CADmium
Mit "...*Modell*..." hast du natürlich recht...
(hab es mir halt auf die schnelle zusammengebaut (kopiert) )
Ja, Listen bzw dottet-Pair-Listen sind natürlich der bessere Weg
aber Musicus soll ja auch noch was machen...
...vla-get-ISlayout - mal schauen schauen was passiert...
mfg heiko

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

CADmium
Moderator
Maschinenbaukonstrukteur




Sehen Sie sich das Profil von CADmium an!   Senden Sie eine Private Message an CADmium  Schreiben Sie einen Gästebucheintrag für CADmium

Beiträge: 13508
Registriert: 30.11.2003

.

erstellt am: 04. Jul. 2008 08:51    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Musicus 10 Unities + Antwort hilfreich

Tipp:Copy&paste ist kein guter Programmierstil und führt nur selten zum Ziel (und wenn, meist nur über Umwege).

Zuerst steht immer die Überlegung, was man hat, wohin man will und dann wird über die Mittel zum Zweck entschieden!

------------------
  - Thomas -
"Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben."

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Musicus
Mitglied
Staatl. gepr. Techniker


Sehen Sie sich das Profil von Musicus an!   Senden Sie eine Private Message an Musicus  Schreiben Sie einen Gästebucheintrag für Musicus

Beiträge: 685
Registriert: 26.07.2005

AutoCAD 2018
Linear, CATS
Windows 10

erstellt am: 04. Jul. 2008 09:22    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Zitat:
Original erstellt von Dorfy:
aber Musicus soll ja auch noch was machen... :D

ähm ... das ganze mit Active X begreif ich jetzt beim besten Willen nicht, obwohl ich meine zu begreifen, was da passiert
... aber eigentlich funktioniert doch mein Code von oben, ich wollte da jetzt eigentlich nicht noch weiteres Hirnschmalz reinstecken ... bissel arbeiten muss ich auch ab und an 

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Dorfy
Mitglied
Double-Dipl.-Ing. Bleistiftanspitzer


Sehen Sie sich das Profil von Dorfy an!   Senden Sie eine Private Message an Dorfy  Schreiben Sie einen Gästebucheintrag für Dorfy

Beiträge: 900
Registriert: 21.07.2006

AutoCad2007, ProE, HiCad

erstellt am: 04. Jul. 2008 10:04    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Musicus 10 Unities + Antwort hilfreich

@Musicus ...schade 

So der letzte dann hier:
;;; (gotolayer "Achsen"(list "Achse" "Mitte" "Mid"))
(defun gotolayer (newlay oldlay / doc blocks layers)
  (setq doc    (vlax-get (vlax-get-acad-object) "activedocument")
blocks (vlax-get doc "blocks")
layers (vlax-get doc "layers")
  )
  (vlax-for
    blk
      blocks
    (vlax-for
      ent
blk
      (if (vlax-property-available-p ent "layer")
(if (and (not (= (vlax-get ent "layer") newlay))
(member (vlax-get ent "layer") oldlay)
    )
  (progn
    (vlax-put
      ent
      "linetype"
      "Bylayer"
    )
    (vlax-put ent "layer" newlay)
  )
)
      )
    )
  )
  (vla-regen doc acActiveViewport)
)

mfg heiko

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

CADmium
Moderator
Maschinenbaukonstrukteur




Sehen Sie sich das Profil von CADmium an!   Senden Sie eine Private Message an CADmium  Schreiben Sie einen Gästebucheintrag für CADmium

Beiträge: 13508
Registriert: 30.11.2003

.

erstellt am: 04. Jul. 2008 10:24    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Musicus 10 Unities + Antwort hilfreich

na so langsam wirds ..

aber für jeden Layer extra immer die ganze Zeichnung scannen? Das ist zeitaufwendig,
also einen Aufruf wie folgt ermöglichen:
(gotolayer
  ("Achsen"(list "Achse" "Mitte*" "Mid"))
  ("Kanten"(list "Koerper "Körper" "sichtbar")
  ...
)

da mußt du dann
(member (vlax-get ent "layer") oldlay)
durch ein cond ersetzen innerhalb dessen  ich auf wcmatch der GROSSGESCHRIEBENEN Layernamen zurückgreifen würde

Achja .. bei nicht existieren Layern schmiert das Prog noch ab ... -> nicht schön 

------------------
  - Thomas -
"Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben."

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Dorfy
Mitglied
Double-Dipl.-Ing. Bleistiftanspitzer


Sehen Sie sich das Profil von Dorfy an!   Senden Sie eine Private Message an Dorfy  Schreiben Sie einen Gästebucheintrag für Dorfy

Beiträge: 900
Registriert: 21.07.2006

AutoCad2007, ProE, HiCad

erstellt am: 04. Jul. 2008 10:48    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Musicus 10 Unities + Antwort hilfreich

Zitat:

Achja .. bei nicht existieren Layern schmiert das Prog noch ab ... -> nicht schön  ;)

... ja , ist mir bewußt... der gewünschte Layer sollte vorhanden sein
bzw entsprechend erstellt werden

Zitat:
...
durch ein cond ersetzen innerhalb dessen  ich auf wcmatch der GROSSGESCHRIEBENEN Layernamen zurückgreifen würde

... cond versteh ich noch aber warum der Rest (Gorß- Kleinschreibung der Layernamen???)

(setq blocks (vlax-get doc "blocks")) ... greift ja gleich alle Elemente ab ... war mir so net bewußt

mfg heiko

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

CADmium
Moderator
Maschinenbaukonstrukteur




Sehen Sie sich das Profil von CADmium an!   Senden Sie eine Private Message an CADmium  Schreiben Sie einen Gästebucheintrag für CADmium

Beiträge: 13508
Registriert: 30.11.2003

.

erstellt am: 04. Jul. 2008 10:58    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Musicus 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von Dorfy:
... cond versteh ich noch aber warum der Rest (Gorß- Kleinschreibung der Layernamen???)

na mach mal

(member "layer1" '("LAYER1" "Layer1"))

und weißt du , wie der Anwender den an sich eindeutigen Layernamen übergibt, und wie ActveX den zurückgibt ( bei letztern wäre es schön, wenn Adesk da die Linie fahren würde : IMMER Groß)?

------------------
  - Thomas -
"Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben."

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Musicus
Mitglied
Staatl. gepr. Techniker


Sehen Sie sich das Profil von Musicus an!   Senden Sie eine Private Message an Musicus  Schreiben Sie einen Gästebucheintrag für Musicus

Beiträge: 685
Registriert: 26.07.2005

AutoCAD 2018
Linear, CATS
Windows 10

erstellt am: 04. Jul. 2008 11:43    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

 
Zitat:
Original erstellt von Dorfy:
@Musicus ...schade  

 

Zitat:
Original erstellt von Musicus:
Ich hab's geschafft  :D

und es funktioniert  :) :) :)

Jetzt bin ich zufrieden mit der Welt  :D
Und jetzt Feierabend!


Deine Mühe in Ehren, aber ich hab nach wochenlanger Bastelei mit viel nachlesen, ausprobieren und hier nachfragen einen Code auf die Reihe bekommen, der das tut, was ich möchte.
Warum soll ich jetzt wieder von vorne anfangen? Noch dazu mit "hingeworfenem" Code, der weder ne Beschreibung, was er tun soll, noch irgendeinem Kommentar enthält.
Ich bin absoluter Anfänger in Sachen LISP und bin schon mächtig stolz, dass ich den Code, den ich hier habe, auch verstanden habe, da motiviert mich so ein Code mit ActiveX ohne irgendwelche Kommentare nicht gerade dazu, mich da reinzudenken.

Mir würde viel mehr helfen, den Code, den ich hier habe, zu optimieren und eventuelle Fehler zu beseitigen. Irgendwas stimmt nämlich nicht, denn bei größeren Zeichnungen stürzt mir dabei AutoCAD nach einer Zugriffsverletzung ab. (Könnte das daran liegen, dass ich noch nicht alle Ist-Layer im Filter habe?)

Gruß,
Nadja

[Diese Nachricht wurde von Musicus am 04. Jul. 2008 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Dorfy
Mitglied
Double-Dipl.-Ing. Bleistiftanspitzer


Sehen Sie sich das Profil von Dorfy an!   Senden Sie eine Private Message an Dorfy  Schreiben Sie einen Gästebucheintrag für Dorfy

Beiträge: 900
Registriert: 21.07.2006

AutoCad2007, ProE, HiCad

erstellt am: 04. Jul. 2008 11:45    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Musicus 10 Unities + Antwort hilfreich

@CADmium
...und...
(member (strcase "lAyEr1") '("LAYER1" "LAYER"" "Layer3"))
-->("LAYER1" "LAYER"" "Layer3")

alle neuen Layer groß schreiben...
so sollte es dann gehen oder was sagt der Fachmann?

[Diese Nachricht wurde von Dorfy am 04. Jul. 2008 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Dorfy
Mitglied
Double-Dipl.-Ing. Bleistiftanspitzer


Sehen Sie sich das Profil von Dorfy an!   Senden Sie eine Private Message an Dorfy  Schreiben Sie einen Gästebucheintrag für Dorfy

Beiträge: 900
Registriert: 21.07.2006

AutoCad2007, ProE, HiCad

erstellt am: 04. Jul. 2008 11:54    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Musicus 10 Unities + Antwort hilfreich

@musicus ...mmh

(setq name "dein layer") ;dein layer
  (if (not (tblsearch "layer" (strcat name))) ;wenn layer nichtvorhanden
    (promt ...));dann meldung oder neuerstellen oder mach was...

vorher bereinigen...
ohne code ist eine Aussage immer schlecht

[Diese Nachricht wurde von Dorfy am 04. Jul. 2008 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Musicus
Mitglied
Staatl. gepr. Techniker


Sehen Sie sich das Profil von Musicus an!   Senden Sie eine Private Message an Musicus  Schreiben Sie einen Gästebucheintrag für Musicus

Beiträge: 685
Registriert: 26.07.2005

AutoCAD 2018
Linear, CATS
Windows 10

erstellt am: 04. Jul. 2008 12:05    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Die Soll-Layer sind alle angelegt, das macht der erste Teil des Codes schon. Mir geht es um die Ist-Layer, also die, die jetzt in der Zeichnung sind, und da raus sollen.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Musicus
Mitglied
Staatl. gepr. Techniker


Sehen Sie sich das Profil von Musicus an!   Senden Sie eine Private Message an Musicus  Schreiben Sie einen Gästebucheintrag für Musicus

Beiträge: 685
Registriert: 26.07.2005

AutoCAD 2018
Linear, CATS
Windows 10

erstellt am: 07. Jul. 2008 14:16    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities


Fehler.JPG


test_neu.lsp.txt

 
Bin ratlos 

Habe den Code gerade über eine Zeichnung laufen lassen, dabei steigt AutoCAD dann aber aus.
Die Zeichnung hat 97 Layer, ein Großteil davon sollte vom LISP berücksichtigt werden. Soll-Layer sind auch angelegt.
152 Blöcke sind in der Zeichnung mit insgesamt 312 Inserts, unbenannte Blöcke nicht berücksichtigt.

Was soll mir die Fehlermeldung sagen? Woran kann es liegen?

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

CADmium
Moderator
Maschinenbaukonstrukteur




Sehen Sie sich das Profil von CADmium an!   Senden Sie eine Private Message an CADmium  Schreiben Sie einen Gästebucheintrag für CADmium

Beiträge: 13508
Registriert: 30.11.2003

.

erstellt am: 07. Jul. 2008 14:36    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Musicus 10 Unities + Antwort hilfreich

Vielleicht versuchst du Objekte zu entmoden, die sich das  nicht gefallen lassen .. z.B: Ansichtsfenster o.ä.

um die genaue Fehlerursache herauszufinden , solltest du dein Programm in deiner Zeichnung debuggen( d.h. Schritt für Schritt ausführen lassen).

------------------
  - Thomas -
"Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben."

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Musicus
Mitglied
Staatl. gepr. Techniker


Sehen Sie sich das Profil von Musicus an!   Senden Sie eine Private Message an Musicus  Schreiben Sie einen Gästebucheintrag für Musicus

Beiträge: 685
Registriert: 26.07.2005

AutoCAD 2018
Linear, CATS
Windows 10

erstellt am: 07. Jul. 2008 14:49    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Und das mach ich wie? (Jetzt kommt bestimmt VLIDE, aber ich kann nicht behaupten, dass ich da dahinter steige ... gibts dafür irgendwo ne Kurzanleitung?)

Ansichtsfenster sinds jedenfalls nicht, sind keine drin.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

CADmium
Moderator
Maschinenbaukonstrukteur




Sehen Sie sich das Profil von CADmium an!   Senden Sie eine Private Message an CADmium  Schreiben Sie einen Gästebucheintrag für CADmium

Beiträge: 13508
Registriert: 30.11.2003

.

erstellt am: 07. Jul. 2008 14:57    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Musicus 10 Unities + Antwort hilfreich

jo .. Vlide .. Haltepunkte setzen usw. ... das kann und will ich aber nicht per Forum erklären... Kurzanleitung ist mir außer der Hilfe nix bekannt. Kann sein, das Marc Scherer da mal was für's ACM  gemacht hatte...

------------------
  - Thomas -
"Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben."

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Dorfy
Mitglied
Double-Dipl.-Ing. Bleistiftanspitzer


Sehen Sie sich das Profil von Dorfy an!   Senden Sie eine Private Message an Dorfy  Schreiben Sie einen Gästebucheintrag für Dorfy

Beiträge: 900
Registriert: 21.07.2006

AutoCad2007, ProE, HiCad

erstellt am: 07. Jul. 2008 16:07    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Musicus 10 Unities + Antwort hilfreich

zur Kurzanleitung
Google mal "AutoCAD 2000 Visual Lisp Tutorial.pdf"
(kommt als pdf recht weit oben)
Ist zwar englisch, entspricht IMHOIn my humble oppinion (Meiner Meinung nach) auch der Hilfe aber immerhin was
kompaktes zum drucken und lesen und für die runde ablage 
mfg heiko

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Musicus
Mitglied
Staatl. gepr. Techniker


Sehen Sie sich das Profil von Musicus an!   Senden Sie eine Private Message an Musicus  Schreiben Sie einen Gästebucheintrag für Musicus

Beiträge: 685
Registriert: 26.07.2005

AutoCAD 2018
Linear, CATS
Windows 10

erstellt am: 07. Jul. 2008 16:17    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Zitat:
Original erstellt von CADmium:
Vielleicht versuchst du Objekte zu entmoden, die sich das  nicht gefallen lassen .. z.B: Ansichtsfenster o.ä.

um die genaue Fehlerursache herauszufinden , solltest du dein Programm in deiner Zeichnung debuggen( d.h. Schritt für Schritt ausführen lassen).


Ich hab jetzt mal alles, was ich dazu geschrieben habe, auskommentiert (immerhin das hab ich schon mal gefunden bei Vlide, brauch ich die ; nicht alle mit Hand schreiben  ), jetzt ist also nur noch dein Code übrig mit geändertem Befehlsaufruf und eine Abfrage hatte ich gelöscht (Linienstärke). Programm stürzt trotzdem ab, mit der gleichen Meldung.

Ich such mal weiter ...

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

CADmium
Moderator
Maschinenbaukonstrukteur




Sehen Sie sich das Profil von CADmium an!   Senden Sie eine Private Message an CADmium  Schreiben Sie einen Gästebucheintrag für CADmium

Beiträge: 13508
Registriert: 30.11.2003

.

erstellt am: 07. Jul. 2008 16:22    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Musicus 10 Unities + Antwort hilfreich

Mag sein .. keine Ahnung, was du da vielleicht für Objekte drin hast und so .. ich verwende mittlerweile anderen ( aber nicht mehr so gut kommentierten und deshalb fürs Lernen nicht so geeigneten ) Code für sowas.. das waren Sachen aus meiner Anfangszeit und da hab ich vielleicht was übersehen..

------------------
  - Thomas -
"Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben."

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

joern bosse
Ehrenmitglied
Dipl.-Ing. Vermessung


Sehen Sie sich das Profil von joern bosse an!   Senden Sie eine Private Message an joern bosse  Schreiben Sie einen Gästebucheintrag für joern bosse

Beiträge: 1734
Registriert: 11.10.2004

Window 10
ACAD 2021
CIVIL 2021
BricsCAD V14-V22
Intel(R) Core(TM)i5-8250U CPU @ 1.60GHz 1.80 GHz
16.0GB RAM
NVIDIA GeForce GTX 1050<P>

erstellt am: 07. Jul. 2008 16:48    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Musicus 10 Unities + Antwort hilfreich


050516_VisualLISP-Editor.pdf

 
Hallo,
ich hatte da mal was zusammengeschrieben, für den Umgang mit VLIDE und dem Debuggen. Ist zwar schon ein wenig angestaubt, aber für die grundsätzlichen Arbeitsschritte sollte es reichen.

------------------
viele Grüße

Jörn

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Musicus
Mitglied
Staatl. gepr. Techniker


Sehen Sie sich das Profil von Musicus an!   Senden Sie eine Private Message an Musicus  Schreiben Sie einen Gästebucheintrag für Musicus

Beiträge: 685
Registriert: 26.07.2005

AutoCAD 2018
Linear, CATS
Windows 10

erstellt am: 07. Jul. 2008 17:00    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Zitat:
Original erstellt von joern bosse:
Hallo,
ich hatte da mal was zusammengeschrieben, für den Umgang mit VLIDE und dem Debuggen. Ist zwar schon ein wenig angestaubt, aber für die grundsätzlichen Arbeitsschritte sollte es reichen.



Klasse, an sowas hatte ich gedacht! Guck ich mir gleich als nächstes genauer an.

Momentan hab ich mich mal am "Learning by example" aus der Hilfe versucht ... aber entweder funktioniert das nicht, oder ich bin zu blöd 

1 Move the cursor in front of the open parenthesis in the line of code that reads:

(setq half-r (/ radius 2))

>> gemacht

2 Click the Toggle Breakpoint button in the Debug toolbar, or choose Debug  Toggle Breakpoint from the VLISP menu. 

Toggle Breakpoint switches breakpoints on and off. When no breakpoint exists, Toggle Breakpoint adds a break; if a breakpoint already exists at the cursor position, Toggle Breakpoint removes it.

>> verstanden, gemacht (F9)

3 Load the yinyang function, if you have not done so already, then run it from the VLISP Console prompt by entering the following command:

(yinyang)

After you reply to the prompts the program displays at the AutoCAD command line, VLISP halts yinyang execution at the breakpoint you set

>> (yinyang) getippt, dann im AutoCAD klick 20 (Enter) 5 (Enter)
>> YinYang ist fertig, angehalten hat da nix

Note how the statement following the cursor is highlighted.

>> öhm, nö, nix markiert

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Musicus
Mitglied
Staatl. gepr. Techniker


Sehen Sie sich das Profil von Musicus an!   Senden Sie eine Private Message an Musicus  Schreiben Sie einen Gästebucheintrag für Musicus

Beiträge: 685
Registriert: 26.07.2005

AutoCAD 2018
Linear, CATS
Windows 10

erstellt am: 07. Jul. 2008 17:52    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hab's hinbekommen, mit Hilfe der Anleitung von Jörn, die ist echt Gold wert für jemanden, der gar keine Ahnung hat, danke dafür!

Im Vlide sieht man ja richtig, was das Programm macht, in welcher Reihenfolge was abgearbeitet wird usw., das macht die Sache ja richtig komfortabel! Ich glaub, mein Editor hat ausgedient 

[Diese Nachricht wurde von Musicus am 07. Jul. 2008 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz