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

Den Namen eines Blocks ändern

  • Ersteller Ersteller MARCOC
  • Erstellt am Erstellt am

MARCOC

Guest
Guten Abend. .
Lassen Sie uns über Blöcke reden... einmal aus dem Gruppencode (2."") extrahiert... den Namen des Stopfens kann ich den Namen auf der Kommandozeile ersetzen....aber wenn ich den Befehl (entmod) zurückgibt nil....und dann ändere ich den Namen nicht.

Jemand kann mir helfen.
 
Guten Abend. .
Lassen Sie uns über Blöcke reden... einmal aus dem Gruppencode (2."") extrahiert... den Namen des Stopfens kann ich den Namen auf der Kommandozeile ersetzen....aber wenn ich den Befehl (entmod) zurückgibt nil....und dann ändere ich den Namen nicht.

Jemand kann mir helfen.
wenn Sie den Blocknamen ändern müssen, verwenden Sie den Befehl _rename (oder ohne Unterstrichnamen): Einen Moment!

Gute Arbeit..
 
Hi. Ich kann nicht umbenennen, weil das, was ich bekommen will, und eine Kopie desselben Blocks mit einem anderen Namen. ..ohne die ganze Zeit zu tun "refedit..ok...amrefclose...give neuen Namen...ok"..die viel Zeit wegnimmt
 
Es funktioniert!!!

um zu sehen, ob du mir helfen kannst

Ich schreibe diese Serie von Programmlinien

(setq block (car(entsel))))

(Setq nm "5")

(setq list (entget block)

(Setq-Name (assoc 2 list))

(Setq-Liste (Subst(cons 2 nm) Listenname))

bis hier es funktioniert

(Entfernungsliste)

Und dann kehrt etmod mich zurück, weil es nicht funktioniert, was fehlt??
 
weil es einfach nicht möglich ist, dies zu tun, indem man eine Einheit wählt, um den Block umzubenennen. Sie müssen auf der Blocktabelle handeln, auf der der Befehl umbenannt wird.
Code:
(setq Blöcke(vla-get-blöcke (vla-get-active document(vlax-get-acad object))))
(setq nomevecchio(vla-get-name (vlax-ename->vla-object)))))))
(setq nomuovo "Papierino")
(fla-put-name (fla-item block nomevecchio) nomuovo)
 
Aber "Vla-get-Blocks" und ein Lisp-Befehl... Ich frage Sie so, weil ich im Web einige lisp Anleitungen gesehen habe, aber ich finde das Sudetto nicht, um seine Funktion zu verstehen... Vielen Dank!
 
Es ist etwas schwer zu erklären, also auf zwei Füßen, diese Rede.
Zusammenfassend ist diese Funktion zusammen mit anderen Familien (vla und vlax) Teil der aktivenx-Technologie, die von microsoft entwickelt wird, die keine Programmiersprache ist, sondern eine Integration zu vordisponierten Anwendungen. in diesem Fall autolisp. so kann ich die gleichen Dinge tun, die ich vorher gemacht habe und sogar etwas Extras.

zum Beispiel eine Farbänderung einer Einheit in grüner Farbe:

traditionelle Methode:
(Setq Name(Auto(entsel))))
(setq list (entget name))
(Setq Name (assoc 62 Liste)
(Setq-Liste (Unterseite (cons 62 3) Listenname)
(Entfernungsliste)

activex Methode:
(setq name(vlax-ename->vla-object)))
(vla-put-color name 3)

Ich kann noch mehr angestrengt werden:
(Setq Name(Auto(entsel))))
(Setq-Liste (Substrate 62 3)(assoc 62 (Tentname)))
(Entfernungsliste)

aber auch mit activex:
(vla-put-color (vlax-ename->vla-object) 3)

im ersten Fall verwendete ich 2 lokale Variablen: Name und Liste, in der zweiten keine.
 
der activex integriert sich mit autolisp, ersetzt es nicht. Es sei denn, Sie verwenden den Befehl _rename, den ich kenne, können Sie den Blocknamen nur durch diese Methode oder durch eine Ad-hoc-Spule ändern.
 
Hi. Ich kann nicht umbenennen, weil ich will und eine Kopie desselben Blocks mit einem anderen Namen... ohne die ganze Zeit zu tun "refedit..ok...amrefclose...give new name...ok".
ein Block kann eingefügt werden, wenn er bereits definiert wurde, ergo kann ohne seine Definition "block" nicht "einfügen" existieren

muss eine Kopie von "Block" erstellen, aber mit wie unterschiedlich, Sie sollten alle Elemente des Blocks scrollen, um die Sequenz (Entget) zu entmake zu erstellen.

die schnellste Sache und "zu erreichen" sind die Befehle, die Sie nicht tun wollen, aber alles automatisieren:
Code:
(setq block (entsel "\nselect block "))))
(setq e_b (entget block))
(sollteq aktuelle Bezeichnung (cdr (assoc 2 e_b)))
(Setq neuer Name (getstring "\new name block "))

(while (tblsearch "block" new name)
(alert (Strkat "der Block "neu " ist bereits vorhanden"))
(Setq neuer Name (getstring "\new name block "))
)
[COLOR="Red"]; Erstellung einer Kopie des Blocks mit neuem Namen (Salvacome)
; nur die Definition wird erstellt, der Block wird nicht eingefügt[/COLOR](wenn (und (/= neuer Name") (/= neuer Name nil)
(Befehl "-bedit" aktueller Name "_bsaveas" neuer Name "_bclose")
(Auszug)
)
 [COLOR="Red"]; Cancellation des ursprünglichen Blocks (Insert)[/COLOR](entdel blocco)
[COLOR="red"]; Einfügen des neuen Blocks, der die Parameter aus dem alten[/COLOR](Einzel)
(Hören)
(cons 0 "Insert")
(cons 100 "acdbentity")
(assoc 67 e_b)
(assoc 410 e_b)
(assoc 8 e_b)
(cons 100 "acdbblockreference")
(cons 2 namenuovo)
(assoc 10 e_b)
(Verbindung 41 e_b)
(assoc 42 e_b)
(assoc 43 e_b)
(assoc 50 e_b)
(assoc 70 e_b)
(Verbindung 71 e_b)
(Verband 44 e_b)
(Verband 45 e_b)
(assoc 210 e_b)
)
)
 
@marcoc: Ich dachte, Ihr Problem war nur an die Programmleitungen gefesselt auch, weil das Block-Umbenennprogramm, das Sie bereits für die Ruhestandssignalisierung unterhändigt hatten

@gp: Komplimente für die elegante Lösung, hatte ich nicht an die Bedit-Befehl für die Verwaltung des neuen Blocks gedacht:finger:

eine viel rohe Lösung beinhaltet die momentane Speicherung des alten Blocks mit dem neuen Namen im aktuellen Zeichnungsordner.
Code:
(Defun c:rinb)
(vla-getentity (vla-get-utility(vla-get-activedocument(vlax-get-acad-object))))))))
(setq Blöcke(vla-get-blöcke(vla-get-activedocument(vlax-get-acad-object)))))
Pointins(vla-get-insertionpoint blockold)
Rotation(vla-get-rotation Schloss)
schicht(vla-get-layer lock)
Farbe(vla-get-color blockold)
typeline(vla-get-linetype lock)
scalax(vla-get-xscalefactor blockold)
scalay(vla-get-yscalefactor blockold)
scalaz(vla-get-zscalefactor blockold)
neuer Block (getstring "\nname des neuen Blocks: "
)
(while (tblsearch "block" new block)
(alert (Strkat "der Block " ist bereits vorhanden)
(setq block new (getstring "\nnome des neuen Blocks: ")
)
(Befehl "_wblock" (getvar "dwgprefix") Blocker ".dwg") (vla-get-name lock)
(setq block(vla-insertblock (vla-get-modelspace(vla-get-activedocument(vlax-get-acad-object)))))))) Zeiger (strcat (getvar "dwgprefix") block new ".dwg") scalax scalay scalaz Rotation)
(vla-delete blockold)
(vla-put-layer-Blockschicht)
(vla-put-color block color)
(vla-put-linetype block line)
(vl-file-delete)
)
 
hallo... sah, dass du die Lispe gut kennst... und wir reden über Blöcke

Wenn ich die Datenbank eines Blocks unterbreche, finde ich mich davor.

((-1). <nome 7ee819f8="" entità:="">) (0 . "Insert") (330. <nome 7ee7fcf8="" entità:="">)
(5 . "2af") (100 . "acdbentity") (67 . 0) (410 . "Modell") (8 . "0") (100).
"acdbblockreference" (2. "1") (10 1458.98 633.784 0.0) (41. 1.0) (42. 1.0)
(43. 1.0) (50. 0.0) (70. 0) (71. 0) (44. 0.0) (45. 0.0) (210 0.0 1.0)

Sie können die Bedeutung von 330 der 5 erklären, weil es 2 mal 100 schlägt

Vielen Dank im Voraus</nome></nome>
 
aus der Hilfe im Einklang mit dem Abschnitt "Referenzführer für dxf-Dateien" Entwicklerdokumentation:

100 Unterklassenzeichen
330 id/manager variabler Zeiger des proprietären Objekts.
Letzterer Code sollte sich auf die entsprechende Blocktabelle beziehen.

Ich gehe jedoch zurück, um zu wiederholen, ich neige dazu, den Weg der Injektion für die rationalsten, strengen und auch komplette aktivex Methoden zu verlassen, so dass ich die Sache nie so viel vertiefte.

in der zuerst erwähnten Anleitung finden Sie immer noch alle Informationen, die Sie benötigen.
 
Okay, danke. Ich habe noch eine Frage

in autocad mit dem weniger "-" Zeichen vor den Befehlen löschen Sie alle Dialoge, die von den Befehlen vorgeschlagen werden. .

es: refedit (öffne den Dialog)

-refedit (Auswahl wird Kommandozeile)

Es funktioniert nicht mit

"Amrefclose"

einen Weg zum Löschen des Dialogs dieses Befehls kennen
 
näherif.... Es ist nicht gut, wie es Ihnen macht, den Block loszuwerden und einfach...anstatt Amrefclose schlägt Ihnen den Namen ändern vor der Rettung... Ich versuchte auch mit Befehl

(Befehl "amrefclose"), aber nichts kehrt nil zurück
 
Tut mir leid, Amrefclose ist kein mechanischer Autocad-Befehl?
in der Tat habe ich nur _refclose oder näherif.
 

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