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

Lisp-Funktion auf ausgewählte Blöcke anwenden

psluca91

Guest
Guten Tag.

Ich entschuldige mich vorab, wenn das Thema bereits in anderen Themen und für die Banalität der Angelegenheit behandelt wurde, aber ich habe nicht in der Lage, einen Leitfaden oder Diskussionen zu finden, die mir durch die Suchfunktion helfen.

Ich schrieb die folgende Lisp, indem ich Code von anderen Lisp gefunden auf dem Netz:
Code:
Farbe durch Schicht in der jeweiligen Farbe und Schicht "0" ändern
(defun c:ccb (/ b_name col)
(setq b_name (cdr (assoc 2 (entget (car))))))
(Befehl "-bedit" b_name)
(setq listobj (ssget "x"))

(setq nobj (sslength listobj)

(setq control 0)

(wenig)




(setq obj (entget (ssname listobj control)))
(setq color (assoc '62 obj))

(wenn (= Farbe nil)
(Progn)
(setq objlay (assoc '8 obj))
(setq laycol (cdr (assoc '62 (tblsearch "layer"))))
(Befehl "_change" (cdar obj) "_prop" "_color" Lauch ")
;
;

(setq control (+ control 1))

) ; während des Regelschlusses
(Befehl "_chprop" "_all" "_layer" 0 "_bclose"")
); defunct Verschluss
der Deckel funktioniert aber ich muss die Blöcke eins nach dem anderen auswählen. Wie kann ich die Lispe auf mehreren Blöcken gleichzeitig ausführen?

Danke im Voraus!
 
Sie nennen den Block zur Änderung der Variablen b_name(setq b_name (cdr (assoc 2 (entget (car))))))Wenn Sie mehr als einen Block auswählen möchten, müssen Sie zuerst auswählen (mittels einer Sache wie ssget)
eine Liste von Blöcken und sie einer Variablen zuweisen, sagen wir blklist.
um die Lispe nicht schief gehen, empfehle ich eine Filterung auf dem Ssget, die nur die Blöcke nehmen (ssget(0. "Block"dann zählen, wie viele Blöcke Sie ausgewählt haben (Länge blklist) und eine variable Überprüfung - sagen eineeinen Zähler setzen, den wir rufen Anzahl a 0 (S. Anzahl 0)

und dann packen Sie alle Ihre lisp in eine Wiederholung, wie viele Artikel Sie auf der Liste haben blklist

Farbe durch Schicht in der jeweiligen Farbe und Schicht "0" ändern
(defun c:ccb (/ b_name col)

Mehrfachauswahl und Berechnungsnummer der Objekte(
Wiederholung eine(S. Name Name blklist count)
(
S. Anzahl 1)
.... Ihre Lispe

) ;; Schließung der Wiederholung

); defunct Verschluss
 
Crystal, während ich Ihnen für die schnelle Antwort danke!

Ich habe versucht, den Code wie von Ihrem Vorschlag zu erstellen, aber ich habe Fehler gefunden:

- falls auferlegt (setq blklist (ssget '(0 . "block"))))))))))))))), schließt es mich von der Auswahl aus (einschließlich Blöcken) und ich kann daher nicht die Lispe starten, die mir den folgenden Fehler gibt: "Wählen Sie Objekte: ; Fehler: schlechte Argumentart: lselsetp nil".

- wenn ich den "Block"-Filter entfernen und die Blöcke manuell auswählen, gibt es mir immer den gleichen Fehler... .

Ich hole den Code zurück.
Code:
;;;cambia color blocco e layer 0
(defun c:ccb4 (/ b_name col)
(setq blklist (ssget ))

(setq num (sslength listaobj))

(setq count 0)

(Repeatnum)
(setq b_name ssname blklist count)
(Zentralzählung (+ Zählung 1))
(Befehl "-bedit" b_name)
(setq listaobj (ssget "x"))

(setq nobj (sslength listaobj))

(setq controllo 0)

(abzüglich Kontrolllo nobj)




(setq obj (entget (ssname listaobj controllo))
(setq color (assoc '62 obj))

(wenn (= Farbe nil)
(Prog.)
(setq objlay (assoc '8 obj))
(setq laycol (cdr (assoc '62 (tblsearch "layer"))))
(Befehl "_change" (cdar obj) "" "_prop" "_color" laycol "")
; chiusura progn
; Chiusura, wenn Farbe nil

(setq controllo (+ controllo 1))

;;chiusura während controllo
(Befehl "_chprop" "_all" "" "_layer" 0 "" "_bclose" "")
;;
;chiusura defun
Wo bin ich falsch?
 
Ich habe hier einen Fehler gefunden:

setq blklist (ssget )

(setq num (sslength listobj)

korrekt in:

setq blklist (ssget )

(setq num (sslength blklist)

Nun beginnt der Befehl, aber er hört auf an der Eröffnung des Blocks, wo es mir als den Namen des Blocks "-change" erscheint und innerhalb des Blockes gibt es nichts. In der Kommandoleiste erscheint mir dieses Wort:
"Befehl: ccb4
Objekt auswählen: gegenüberliegende Ecke: 2 gefunden
Objekte auswählen: - Was?
Blockname eingeben oder [?]:
Ungültiger Blockname.
Blockname eingeben oder [?]: _change regenerating model.
Befehl: <bad entity="" ffa818b0="" name:="">"</bad>
 
(0) „Block“ werden. (0. "Insert") - das zum Filtern

(setq num) Liste) - Zählen Sie die Anzahl der Einheiten auf eine Liste, die nicht existiert. Test durch Ersatz (setq num (ssslength) blklist)
 
ho apportato le modifiche come da te suggerito, ma continua a bloccarsi all'interno del editor blocchi di un blocco inesistente....

queste le righe di comando che mi escono...

Befehl: _appload ccb5.lsp erfolgreich geladen.
Befehl: ; fehler: fehlerhafte Liste auf Eingabe
Befehl:
Befehl: ccb5
Objekt auswählen: gegenüberliegende Ecke angeben: 2 gefunden
Objekte auswählen: - Bettit
Blockname eingeben oder [?]:
Ungültiger Blockname.
Blockname eingeben oder [?]: _change regenerating model.
Befehl: <bad a468a920="" entity="" name:=""></bad>
 
das Problem liegt in der Verwendung des Bedit-Befehls.

den Namen der Einheit, die Sie in der Variable halten Name ist der innere Name davon und nur das Unternehmen.
wenn Sie 5 Fälle des Blocks haben Pappel, Sie haben 5 Werte Name Ich weiß nicht, ob ich klar war

an den Betit-Befehl müssen Sie den Namen des Blocks übergeben, nicht die seiner Instanz, sonst glaubt Bedit, dass Sie einen Block bearbeiten möchten, der aufgerufen wird <entity 7ff75520dc10="" name:=""></entity> e nicht il Pappel dass Sie bearbeiten möchten

Wie zu lösen? schnell den Blocknamen (nicht seine Instanz) einer neuen Variablen zuordnen, sagen wir Namekommen si fa?
(setq) Name (cdr.) Name)

Sie sagen, den verbleibenden Teil (cdr) der Gruppe 2 (assoc '2) zu benennen, der ihn aus der vollständigen Liste (entget) der Einheit b_name erhält.

an diesem Punkt am Bettit müssen Sie nicht mehr b_name passieren, aber name_bl
(Befehl "-bedit) Name)

Da Sie jedoch eine Reihe von verschiedenen Blöcken auswählen, in denen es mehr Instanzen des gleichen Blocks geben wird, finden Sie sich die Bearbeitung des gleichen Blocks, der bereits mehrfach bearbeitet wurde, und ich weiß nicht, ob dies weitere Programmabstürzen erzeugen kann.
Sie können auch Probleme auf dynamischen Blöcken haben, da diese letzten, wenn sie im Vergleich zur "Basis" variieren, einen neuen Namen, anonyme Art (start for asterisk)

um mehr Geschwindigkeit der Ausführung zu haben, sollten Sie den tblsearch Befehl vertiefen und versuchen, die Namen der vorhandenen Blöcke im Design zu erhalten, um einmal den Quellblock zu bearbeiten, nicht seine Instanzen
 

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