| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| PNY präsentiert die neue NVIDIA RTX A400 und die A1000 Grafikkarte, eine Pressemitteilung
|
Autor
|
Thema: Attribute von AutoCAD Blöcken (4428 mal gelesen)
|
KAME Mitglied techn. Angestellter
Beiträge: 152 Registriert: 21.06.2006
|
erstellt am: 16. Jun. 2011 09:23 <-- editieren / zitieren --> Unities abgeben:
Hallo VBA-Gemeinde, Problem: Schriftkopf ist ein AutoCAD-Block vom Kunden! Jetzt würd ich gerne ein VBA-Button Programieren der auf Druck die Parameter vom eingefügten 3D-Teil und von der aktiven Zeichnung(dwg) abruft und den ACad-Block damit ausfüllt. Leider hab ich hier keinen Plan wie ich an die Attribute vom 3D-Teil gelange und wie alle Parameter in den Schriftkopfblock geschrieben bekomm! Für die Aktuallisierung, falls erforderlich, sollte alles neu aus den Parametern eingefügt werden (quasi er soll alles neu überschreiben können) kann mir dabei jemand weiterhelfen ------------------ mfg Ronald Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
SEHER Mitglied Systemanalytiker
Beiträge: 1203 Registriert: 13.03.2001 Inventor 2 bis 2022 häufig wechselnder Rechnerverkehr
|
erstellt am: 22. Jun. 2011 12:17 <-- editieren / zitieren --> Unities abgeben: Nur für KAME
|
KAME Mitglied techn. Angestellter
Beiträge: 152 Registriert: 21.06.2006
|
erstellt am: 22. Jun. 2011 16:54 <-- editieren / zitieren --> Unities abgeben:
Ja das ist so richtig bekomm jedesmal vom kunden einen anderen autocad schriftkopf die zeit diesen im inventor nachzumodeln fehlt immer und wenn dann noch ne änderung hinzukommt kann man wieder von vorne anfangen und sich das zu sparen hätt ich mir gedacht die benutzerdefinierten bzw iprops auszulesen und in den autocad block einzufügen (per makro) -dies müsste ja irgendwie gehen da ich den block ja im inventor auch ausfüllen kann nur halt alles einzeln -was ich jetzt dazu brauch ist wie ich vernünftig meine benutzerdefinerten und die iprops auslese und anschliessend in den block einfüge (attribute sind ja vorhanden) leider hab ich keinen plan wie ich in den block per vba einfügen kann und mit der hilfe komm ich überhaupt nicht zurecht ------------------ mfg Ronald Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
SEHER Mitglied Systemanalytiker
Beiträge: 1203 Registriert: 13.03.2001 Inventor 2 bis 2022 häufig wechselnder Rechnerverkehr
|
erstellt am: 23. Jun. 2011 14:18 <-- editieren / zitieren --> Unities abgeben: Nur für KAME
Hallo Ronald, konnte auf die Schnelle nichts in der API zum Ausfüllen der Attribute von AutoCAD Blöcken in den Zeichnungsressourcen finden. Vorschlag: Schreibe die iProperties des Modells der Erstansicht in eine Textdatei und öffne anschließend die DWG in AutoCAD und bestück die Attribute mittels Lisp aus dieser Datei. /Edit/ Dies wäre eine Möglichkeit wenn Du in Acad auch noch die Blockattribute haben möchtest d.h. dein Kunde will die Acad Zeichnung für sich weiter verwenden. Eine weitere Möglichkeit besteht darin den Acad Block in ein InventorSchriftfeld zu kopieren. Da werden die Attribute sofort in angeforderte Eingaben umgewandelt. Programmtechnisch müsstest Du nur noch die Properties auslesen und an die angeforderte Eingaben übergeben. Wie diese Einzelschritte programmiert werden, wurde glaub ich schon des öfteren hier im Forum beschrieben. Dann kann aber das Schriftfeld in Acad nicht mehr als Block mit Attribute gehandhabt werden. /EndEdit/ /Edit2/ Wenn Dir das Schriftfeld des letzten Vorschlag reicht, kommst Du auch ohne Programmierung hin. Die angeforderten Eingaben müsste man eigentlich auf die Modelleigenschaften umstellen können. /EndEdit2/ /Edit3/ Zitat: Die angeforderten Eingaben müsste man eigentlich auf die Modelleigenschaften umstellen können.
Funktioniert! Hab es gerade ausprobiert. /EndEdit3/ ------------------ Gruß SEHER www.inventor-tools.de Inventor-Tools und Inventor-Anpassungsprogrammierung [Diese Nachricht wurde von SEHER am 23. Jun. 2011 editiert.] [Diese Nachricht wurde von SEHER am 23. Jun. 2011 editiert.] [Diese Nachricht wurde von SEHER am 23. Jun. 2011 editiert.] [Diese Nachricht wurde von SEHER am 23. Jun. 2011 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KAME Mitglied techn. Angestellter
Beiträge: 152 Registriert: 21.06.2006
|
erstellt am: 27. Jun. 2011 07:29 <-- editieren / zitieren --> Unities abgeben:
Hallo SEHER, danke für deine Antwort Leider konnte ich auch nichts in den ressourcen finden. Leider kommt es mit beim Schriftkopf immer noch zu problemen mit der Schrift (da der acad block ISOCP verwendet und Inv. ISOCPEUR) da stimmen die Schriftlängen nicht mehr zusammen (leider) darum kann ich diese variante nicht verwenden die zweite variante ist leider auch nicht gerade einladend da ich ja schon alle infos im inv. sehen will und muss da man ansonst den überblick verliert ------------------ mfg Ronald Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
SEHER Mitglied Systemanalytiker
Beiträge: 1203 Registriert: 13.03.2001 Inventor 2 bis 2022 häufig wechselnder Rechnerverkehr
|
erstellt am: 27. Jun. 2011 08:29 <-- editieren / zitieren --> Unities abgeben: Nur für KAME
Hallo Ronald, Zitat: die zweite variante ist leider auch nicht gerade einladend da ich ja schon alle infos im inv. sehen will und muss da man ansonst den überblick verliert
gerade bei dieser Variante behälst du die Modellproperties. - kopiere den Acad Block in ein neues Schriftfeld und speichere dies als SFeldKundeX ab -bearbeite die Schriftfelddefinition -markiere jede angeforderte Eingabe und stelle diese auf Modelleigenschaften z.B. Bauteilnummer um. Hier kannst du auch einen anderen Textstil wählen. -wenn Du das durchgeführt hast, kannst Du dieses Schriftfeld in jede folgende Zeichnung reinkopieren und verwenden. -für jeden Kunden mußt Du dir einmal die Arbeit machen Gruß Seher
------------------ Gruß SEHER www.inventor-tools.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KAME Mitglied techn. Angestellter
Beiträge: 152 Registriert: 21.06.2006
|
erstellt am: 27. Jun. 2011 10:16 <-- editieren / zitieren --> Unities abgeben:
Hallo SEHER, Ja diese Variante hatte ich schon mal Problem ist das der gleiche Kunde für jedes Projekt einen neuen ACAD-Schriftkopf hat und meist am ende noch ne Revision des Blocks nachkommt (das schlimme ist das man nicht genau sagen kann was geändert wurde) und dann kann ich den ganzen wieder neu machen dies ist zuviel aufwand da ich auch nie sagen kann ob sich die attributnamen ändern ist das etwas doof darum wollte ich ja mit vba die probs in die attribute schreiben lassen (aussehen wär dann egal) da hätte ich nur mehr eine änderung im vba vorzunehmen -> vba neu an alle mitarbeiter vergeben dies wär mein ziel gewesen da dies nicht geht müssen alle acad attribute eingegeben werden (manche kann man schon voreinstellen -> leider schleichen sich hier viele flüchtigkeitsfehler ein)
------------------ mfg Ronald Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
SEHER Mitglied Systemanalytiker
Beiträge: 1203 Registriert: 13.03.2001 Inventor 2 bis 2022 häufig wechselnder Rechnerverkehr
|
erstellt am: 27. Jun. 2011 11:09 <-- editieren / zitieren --> Unities abgeben: Nur für KAME
Hallo Ronald, dazu sehe ich nur folgende Möglichkeit: -AcadBlock muss ein Inventor-Schriftfeld mit properties sein (wie zuvor beschrieben). -Nach Erstellen der letzten Revision des Schriftfeldes mit den iproperies des Modells kann Du folgendes machen -Übertragungsassistent für Zeichnungsressourcen (in allen gewünschten Zeichnungen die letzte Revision aktivieren) oder per Makro manuell (siehe Programmierhilfe TitleBlock...) das Schriftfeld austauschen und noch vom User zu überprüfen lassen. Dafür müssen aber alle Zeichnungen nochmal geöffnet werden. Ich würde dieses Vorgehen bevorzugen. Zitat: da ich auch nie sagen kann ob sich die attributnamen ändern ist das etwas doof
Hierbei würde erst zum Schluß die Arbeit eines Schriftfeldes machen. ------------------ Gruß SEHER www.inventor-tools.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
SEHER Mitglied Systemanalytiker
Beiträge: 1203 Registriert: 13.03.2001
|
erstellt am: 30. Jun. 2011 15:07 <-- editieren / zitieren --> Unities abgeben: Nur für KAME
Hallo Ronald, hier das VBA Beispiel aus den API Samples um ein aktuelles Schriftfeld einzufügen. Public Sub TitleBlockCopy() Dim oSourceDocument As DrawingDocument Set oSourceDocument = ThisApplication.ActiveDocument ' Open the new drawing to copy the title block into. Dim oNewDocument As DrawingDocument Set oNewDocument = ThisApplication.Documents.Open("C:\temp\TitleBlockChange.idw") ' Get the new source title block definition. Dim oSourceTitleBlockDef As TitleBlockDefinition Set oSourceTitleBlockDef = oSourceDocument.ActiveSheet.TitleBlock.Definition ' Get the new title block definition. Dim oNewTitleBlockDef As TitleBlockDefinition Set oNewTitleBlockDef = oSourceTitleBlockDef.CopyTo(oNewDocument) ' Iterate through the sheets. Dim oSheet As Sheet For Each oSheet In oNewDocument.Sheets oSheet.Activate oSheet.TitleBlock.Delete Call oSheet.AddTitleBlock(oNewTitleBlockDef) Next End Sub ------------------ Gruß SEHER www.inventor-tools.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KAME Mitglied techn. Angestellter
Beiträge: 152 Registriert: 21.06.2006
|
erstellt am: 22. Sep. 2014 09:43 <-- editieren / zitieren --> Unities abgeben:
Hallo VBA Gemeinde, hab gehört das es anscheinend für Acad-Blöcke jetzt einen zugriff über die API gibt! Da dieses Thema für mich gerade wieder Aktuell wird, da wir auf den 2015ener umsteigen, wollte ich mal nachfragen ob sich in der API bei INV2015 schon etwas verändert hat?
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KAME Mitglied techn. Angestellter
Beiträge: 152 Registriert: 21.06.2006
|
erstellt am: 01. Okt. 2014 13:56 <-- editieren / zitieren --> Unities abgeben:
Hallo VBA Gemeinde, hab dem Thema entsprechend etwas gefunden. Das auslesen und Anzeigen der Attributnamen und Werten funktioniert hier sehr gut. Temporäres überscheiben wird im VBA auch angezeigt. Jedoch mit dem zurückschreiben in den Block, das will nicht funktionieren! Code: Public Sub SetAttributes() Dim oDrawDoc As DrawingDocument Set oDrawDoc = ThisApplication.ActiveDocument ' Obtain a reference to the desired AutoCAD block definition. Dim oBlockDef As AutoCADBlockDefinition Set oBlockDef = oDrawDoc.AutoCADBlockDefinitions.item("TITLE_BLOCK") Dim oSheet As Sheet Set oSheet = oDrawDoc.ActiveSheet Dim acadblks As AutoCADBlocks Dim acadblk As AutoCADBlock Set acadblks = oSheet.AutoCADBlocks For Each acadblk In acadblks Dim protags() As String Dim protagsval() As String
acadblk.GetPromptTextValues protags, protagsval Next protagsval(0) = "hallo" <--- hier will ich die Werte überschreiben For Each acadblk In acadblks acadblk.SetPromptTextValues protags, protagsval <---hier liegt der fehle Next End Sub
Vielleicht kann mir jemand weiterhelfen. Würd mich über jegliche Tips und Denkanstöße freuen.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
daywa1k3r Ehrenmitglied V.I.P. h.c. Softwareentwickler
Beiträge: 3497 Registriert: 01.08.2002 Alienware m17x, Win7, Inventor2012
|
erstellt am: 01. Okt. 2014 14:55 <-- editieren / zitieren --> Unities abgeben: Nur für KAME
Hallo, dein Code beinhaltet logische Fehler, jetzt ohne ihn getestet zu haben. Die Initialisierung von protags und protagvals passiert innerhalb der ersten ForEach schleife die durch alle Blöcke durchläuft. Die protags und protagsval werden beim jedem neuen Block überschrieben, so gilt die Änderung die du nach der ForEach Schleife machst nur für den letzten Block oder gar nicht. In der zweiten ForEach Schleife versuchst du die protagsval und protags in den ersten Block zu schreiben, und da sind die beiden Arrays einfach mehrmals überschrieben und zudem an dieser Stelle gar nicht mehr gültig, da die Definition innerhalb von der ersten ForEach war. Was du machen solltest ist die Wertüberschreibung sowie das Zurückschreiben von den neuen Werten (zweite ForEach) innerhalb der ersten ForEach zu erledigen. Ich habe momentan gar kein AutoCAD installiert, aber so etwas dürfte rein theoretisch funktionieren: Code:
Public Sub SetAttributes() Dim oDrawDoc As DrawingDocument Set oDrawDoc = ThisApplication.ActiveDocument ' Obtain a reference to the desired AutoCAD block definition. Dim oBlockDef As AutoCADBlockDefinition Set oBlockDef = oDrawDoc.AutoCADBlockDefinitions.item("TITLE_BLOCK") Dim oSheet As Sheet Set oSheet = oDrawDoc.ActiveSheet Dim acadblks As AutoCADBlocks Dim acadblk As AutoCADBlock Set acadblks = oSheet.AutoCADBlocks For Each acadblk In acadblks Dim protags() As String Dim protagsval() As String
acadblk.GetPromptTextValues protags, protagsval protagsval(0) = "hallo" acadblk.SetPromptTextValues protags, protagsval Next End Sub
------------------ Grüße Igor FX64 Software Solutions - Inventor Tools FX64 LambdaSpect - Lichtsimulation mit Autodesk Inventor Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KAME-WJ Mitglied Maschinenbau-Ingenieur
Beiträge: 22 Registriert: 22.09.2014 Intel Core i9-9900KF, 8-Core @5GHz 16 GB DDR4-2666 MHz NVIDIA Quadro P1000, 4GB GDDR5 ASUS Prime Z390-P WIN10 x64 auf NVME SSD INV2019
|
erstellt am: 02. Okt. 2014 17:07 <-- editieren / zitieren --> Unities abgeben: Nur für KAME
|
daywa1k3r Ehrenmitglied V.I.P. h.c. Softwareentwickler
Beiträge: 3497 Registriert: 01.08.2002 Alienware m17x, Win7, Inventor2012
|
erstellt am: 02. Okt. 2014 17:29 <-- editieren / zitieren --> Unities abgeben: Nur für KAME
|
KAME-WJ Mitglied Maschinenbau-Ingenieur
Beiträge: 22 Registriert: 22.09.2014 Intel Core i9-9900KF, 8-Core @5GHz 16 GB DDR4-2666 MHz NVIDIA Quadro P1000, 4GB GDDR5 ASUS Prime Z390-P WIN10 x64 auf NVME SSD INV2019
|
erstellt am: 03. Okt. 2014 08:23 <-- editieren / zitieren --> Unities abgeben: Nur für KAME
Hallo Igor, dumme Frage aber mit dem oben angeführten Code und dem befehl acadblk.AttributeSets.Count hat eben es nicht funktioniert und .Length gibt es nicht zur auswahl. Überseh ich hier was? MfG, Joscha Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
daywa1k3r Ehrenmitglied V.I.P. h.c. Softwareentwickler
Beiträge: 3497 Registriert: 01.08.2002 Alienware m17x, Win7, Inventor2012
|
erstellt am: 03. Okt. 2014 09:16 <-- editieren / zitieren --> Unities abgeben: Nur für KAME
|