| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| Eplan Forum, eine Veranstaltung am 25.09.2024
|
Autor
|
Thema: Blöcke neu definieren über Script (2003 mal gelesen)
|
Ex-Mitglied
|
erstellt am: 04. Nov. 2005 11:27 <-- editieren / zitieren -->
Hallo, ich weiß das schon vieles über das "neu definieren von Blöcken" geschrieben wurde. Aber da habe ich leider nicht das gefunden, was wir suchen. Sorry, wenn ich hier einen Roman schreibe, aber ich denke das dies zum Verständnis unseres Problems beiträgt. Unsere Blöcke haben Attribute, die in eine Oracle-Datenbank geschrieben und über Datenbankreports weiter verarbeitet werden. Das Aussehen der Blöcke ist Kundenspezifisch. Bei neuen Kunden liegt die Spezifikation für das Aussehen meistens nicht rechtzeitig vor. Wir verwenden dann vorerst vorhandene Darstellungen. Nach Erhalt der Spezifikation werden die neuen Blöcke erstellt (unter den gleichen Namen) und müssen in den bereits erstellten Plänen ausgetauscht werden. Manuell kann ich dies machen mit dem Befehl "einfüge", Block auswählen und das Häkchen bei "Einfügepunkt" entfernen. Damit wird kein neuer Block eingfügt, sondern nur die gleichnamigen ausgetauscht. Ich habe mal gehört, das man alles, was per Hand möglich ist, auch durch ein Script ausgeführt werden kann. Wie kann ich in einem Script das Häkchen beim Einfügepunkt löschen? Gruss Frederik |
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 System: F1 und Google
|
erstellt am: 04. Nov. 2005 11:42 <-- editieren / zitieren --> Unities abgeben:
Geh in die Hilfe und suche nach: Befehlszeile EINFÜGEDa stehen "alle" Infos zu Blockeinfügen über die Befehlszeile drin. wird dir aber SO nicht helfen, Skripte lassen keine Benutzereingaben zu ! EDIT: Frage: liegen die "neuen" Blockdefinitionen als DWG vor oder oder hast du die neuen alle in einer DWG eingefügt !?
Falls in einer Bibliothek-DWG: Nutze evtl den DesignCenter ! rechte Maustaste auf den jeweiligen Block und "Nur neudefinieren" Falls als DWG - nenne ich dir noch ein paar andere Wege.. (oben genannte Möglichkeit wäre aber auch hier anwendbar in ähnlicher Form) Frage: Wieviele Blöcke (nicht wieviele Blockreferenzen) sind es denn pro Datei ? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 04. Nov. 2005 12:37 <-- editieren / zitieren -->
Hallo cadffm, wir machen Eisenbahnsignaltechnik und haben verschiedene Anwendungen mit ca 180 bis 550 unterschiedlichen Blöcken je Anwendung und Kunde. Diese Blöcke sind jeweils eine einzelne DWG (z.B. eine Weiche, ein Rangiersignal, u.s.w.) die über selbst geschriebene Menüs und Programme in eine Zeichnung eingefügt und mit Koordinaten und Attributen in eine Datenbank geschrieben werden. Die Zeichnungen enthalten dann bis zu 4000 Blöcke. Die Blöcke erstelle ich in thematisch sortierten DWG's (etwa 50-100 je DWG) und extrahiere sie daraus zu einzelnen DWG's mit einem Script. -wblock <pfad & name> j <x,y Einfügepunkt> f <x,y untere linke Ecke> <x,y obere rechte Ecke> hoppla So ein Script wollte ich jetzt auch zum Neudefinieren machen. Dabei habe ich noch keinen Syntax für das Häkchen beim Einfügepunkt gefunden. Gruss Frederik
|
Caladia Ehrenmitglied V.I.P. h.c.
Beiträge: 2546 Registriert: 04.03.2002 ACAD2009 ACAD2010 SP2 ACAD2011 SP1 ABDS-S 2012 SP2 ABDS-S 2013 SP2 ABDS-S 2014 SP1 ABDS-S 2015 SP2 ABDS-S 2016 Expresstools A3-Makroboard 16-Tasten Lupe Impression 3 Win7 64bit IE11 Firefox Office2003 SP3
|
erstellt am: 04. Nov. 2005 12:56 <-- editieren / zitieren --> Unities abgeben:
Oh die Frage kenn ich! Einzige brauchbare Antwort war: (command "_-insert" "Blockeplatzhalter=Blockeplatzhalter.DWG" ) wobei "Blockeplatzhalter" der Name des entsprechenden Blockes ist. Eine Systemvariable wär mir auch lieber gewesen. ------------------ Gruss Caladia Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 System: F1 und Google
|
erstellt am: 04. Nov. 2005 12:57 <-- editieren / zitieren --> Unities abgeben:
Das Häckchen benötigst du nicht, in der angebenen Hilfe ist beschrieben das man mit der Eingabe: -EINFÜGE (Pfad+Dateiname)= J Also mal ein Beispiel: -EINFÜGE C:\BIBO\MEINBLOCK1.dwg= J so würde er den Block "Meinblock1 in der DWG in der man sich befindet neudefinieren (wenn ein solcher Block dort existiert) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 04. Nov. 2005 13:19 <-- editieren / zitieren -->
@Caladia, dabei bleibt aber der neue Block am Fadenkreuz. Da ich den aber nicht neu einfügen will, sondern nur alle als tabellarische Abarbeitung austauschen will, hilft dies leider nicht weiter. @cadffm, dabei erscheint eine Meldung "Warnung: Falls Sie den langen Dateinamen c:\xxx\yyy.dwg einfügen möchten, müssen Sie die Syntax <Block>=<Dateiname> verwenden." und die Funktion ist beendet. Gruss Frederik |
tunnelbauer Ehrenmitglied V.I.P. h.c. Bauingenieur
Beiträge: 7085 Registriert: 13.01.2004 Sie nannten ihn google.
|
erstellt am: 04. Nov. 2005 13:29 <-- editieren / zitieren --> Unities abgeben:
|
marc.scherer Ehrenmitglied V.I.P. h.c. CAD-Administrator
Beiträge: 2494 Registriert: 02.11.2001 Windows 10 64bit AutoCAD Architecture 2018/2019 (deu/eng) AEC-Collection 2019 (Revit und Zeugs) Wenn sich's nicht vermeiden läßt: D-A-CH Erweiterung (mies implementierter Schrott)
|
erstellt am: 04. Nov. 2005 15:45 <-- editieren / zitieren --> Unities abgeben:
Hi, ich benutze dafür immer so etwas in dieser Art hier: Code:
(vl-load-com)(defun MS:NO-XREF (/ BLIST BCOLL OBJ) (setq BCOLL (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object)) ) ) (if (> (vla-get-count BCOLL) 0) (progn (vlax-for FORITEM BCOLL (setq BLIST (cons FORITEM BLIST)) ) (vl-remove-if (function (lambda (X) (apply '(lambda (OBJ /) (if (= (vla-get-isxref OBJ) :vlax-true ) 't ) ) (list X) ) ) ) BLIST ) ) ) ) (defun UPDATE-INTERNAL-BLOCKS (/ ALT_ATTDIA ALT_ATTREQ BNAMES! LASTELEM X) (vl-load-com) (setq ALT_ATTREQ (getvar "attreq") ALT_ATTDIA (getvar "attdia") ) (setvar "attreq" 0) (setvar "attdia" 0)
(if (setq BNAMES! (vl-remove-if-not '(lambda (X) (findfile X) ) (mapcar '(lambda (X) (strcat X ".dwg") ) (vl-remove-if '(lambda (X) (wcmatch X "_*,`**") ) (mapcar 'strcase (mapcar '(lambda (X) (vla-get-name X)) (MS:NO-XREF)) ) ) ) ) ) (foreach ELEM BNAMES! (if (vl-cmdf "_.-insert" (strcat (vl-string-right-trim ".dwg" ELEM) "=") ;|"_y" |; "0,0" "" "" "" ) (progn (vlax-invoke-method (setq LASTELEM (vlax-ename->vla-object (entlast))) 'DELETE ) (if (not (vlax-object-released-p LASTELEM)) (vlax-release-object LASTELEM) ) ) ) ) ) (setvar "attreq" ALT_ATTREQ) (setvar "attdia" ALT_ATTDIA) BNAMES! ) (UPDATE-INTERNAL-BLOCKS)
Laden und vergessen ;-) Findet sich im Acad-Suchpfad ein Block mit dem gleichen Namen wie innerhalb der Zeichnung, wird das Ding upgedatet. Wenn nicht, dann nicht. Vorsicht ist danach aber mit ATTSYNC geboten, habt's Ihr die Attribut Positionen verschoben werden die nach Attsync auch resettet. Also genau überlegen was man tut! ------------------ Ciao, Marc Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 07. Nov. 2005 14:45 <-- editieren / zitieren -->
Vielen Dank für Eure Hilfe. Units sind unterwegs. Die Verwendung eines Scripts scheitert an dem Esc, das ich am Ende der Funktion "-einfüge" brauche, um den neuen Block nicht zu positionieren. Das Esc beendet sowohl die Funktion, als auch das Script. Die Attribute wären kein Problem gewesen. Die lassen sich über das Script neu positionieren. Nachdem es keine einfache Lösung gibt, haben wir uns jetzt entschlossen, eine neue Funktion in unsere ARX-Programmierung aufzunehmen. Gruss Frederik |
marc.scherer Ehrenmitglied V.I.P. h.c. CAD-Administrator
Beiträge: 2494 Registriert: 02.11.2001 Windows 10 64bit AutoCAD Architecture 2018/2019 (deu/eng) AEC-Collection 2019 (Revit und Zeugs) Wenn sich's nicht vermeiden läßt: D-A-CH Erweiterung (mies implementierter Schrott)
|
erstellt am: 07. Nov. 2005 16:07 <-- editieren / zitieren --> Unities abgeben:
|
Ex-Mitglied
|
erstellt am: 07. Nov. 2005 16:29 <-- editieren / zitieren -->
@Marc, dies ist richtig, aber passt leider nicht ganz zu der Aufgabe. Ich schicke Dir mal eine PM, weil das hier sonst zu viel wird. Gruss Frederik |