| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Block und Objektfarben (1692 mal gelesen)
|
gerhard123 Mitglied techn.Angestellter
Beiträge: 151 Registriert: 29.11.2007
|
erstellt am: 17. Mrz. 2009 12:30 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, hab mal wieder eine Frage zu Blöcken: Wie kann ich allen Elementen eines Blocks eine neue Farbe zuweisen. zB. Wenn der einfügte Block nur einen Infocharakter hat, dann soll er nur in hellgrau dargestellt werden. Hat jemand vielecht ein wenig Code dener mit posten kann. Vorab schon mal Danke für eure Hilfe Gerhard Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Stelli1 Moderator Verm.-Ing.
Beiträge: 1521 Registriert: 17.08.2005 Map 2000-2014, Rasterdesign, MapGuide, Autodesk Topobase, VS6, VS.net 2013
|
erstellt am: 17. Mrz. 2009 12:42 <-- editieren / zitieren --> Unities abgeben: Nur für gerhard123
Hallo Gerhard, Wenn du keine verschachtelten Blöcke hast geht das recht einfach.
Code: Sub EsWerdeGrauInGrau() Dim Entity As AcadEntity, Blockdef As AcadBlock, Blockref As AcadBlockReference ' Farben von Entitys im Modellbereich For Each Entity In ThisDrawing.ModelSpace Entity.Color = 254 Next Entity ' Farben der Blockdefinition For Each Blockdef In ThisDrawing.Blocks If Blockdef.IsLayout = False Then For Each Entity In Blockdef Entity.Color = 254 Next Entity end if Next Blockdef End Sub
Wilfried Stelberg------------------ Warum lisp'eln wenn's auch anders geht. www.ib-stelberg.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
gerhard123 Mitglied techn.Angestellter
Beiträge: 151 Registriert: 29.11.2007
|
erstellt am: 17. Mrz. 2009 13:47 <-- editieren / zitieren --> Unities abgeben:
Hallo Wilfried, danke für deine rasche Antwort. Das Programm ist toll, ha es bereits getest! Danke Danke Danke !!! Kann auch vorkommen, dass ich eine verschachtelte Blöcke habe, ist aber kein Problem, da habe ich schon ein kleines Programm das die Blöcke rekursiv durchgeht und da baue ich dann deinen Code ein. Lg. Gerhard Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
gerhard123 Mitglied techn.Angestellter
Beiträge: 151 Registriert: 29.11.2007
|
erstellt am: 17. Mrz. 2009 13:59 <-- editieren / zitieren --> Unities abgeben:
Hallo Wilfried, jezt ist mir noch etwas aufgefallen: Wenn ich einen Block einfüge und dein Programm anwerfe zB. Frabe 3, dann werden die Objekte im Block immer weiß dargestellt. Wenn ich mir aber die Eigenschaften von Block ansehe (Dialog Eigenschaften und Objektfarbe), dann wird die Frabe aber sehrwohl farbig (grün)dargestellt. Die Objekte sollten in der Zeichnung ja grün (wenn Frabe 3) dargestellt werden. Gerhard Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
gerhard123 Mitglied techn.Angestellter
Beiträge: 151 Registriert: 29.11.2007
|
erstellt am: 17. Mrz. 2009 14:01 <-- editieren / zitieren --> Unities abgeben:
|
Stelli1 Moderator Verm.-Ing.
Beiträge: 1521 Registriert: 17.08.2005 Map 2000-2014, Rasterdesign, MapGuide, Autodesk Topobase, VS6, VS.net 2013
|
erstellt am: 17. Mrz. 2009 15:40 <-- editieren / zitieren --> Unities abgeben: Nur für gerhard123
Hallo Gerhard, noch eine kleine Anmerkung. Wenn du die Farbe der Blockelemente fest angibst, kannst du für die Blockreferenz einstellen was du willst und die Farbe ändert sich nicht. Also wird unter Umständen grün angezeigt obwohl alle Elemente grau sind. Besser wäre wohl den Elementen die Farbe byBlock zu geben. Dann kannst du über die Farbe der Blockeinfügung steuern wie der Block aussieht
Code: Entity.Color=0 '(byBlock) Entity.Color=256 '(byLayer)
Wilfried Stelberg ------------------ Warum lisp'eln wenn's auch anders geht. www.ib-stelberg.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
gerhard123 Mitglied techn.Angestellter
Beiträge: 151 Registriert: 29.11.2007
|
erstellt am: 18. Mrz. 2009 06:29 <-- editieren / zitieren --> Unities abgeben:
|
türringer Mitglied Konstrukteur
Beiträge: 36 Registriert: 26.10.2004 Windows 7 Ultimate 64bit Autodesk Produkt Design Suite 2013 CADISON 11 (64bit) NavisWorks 2013
|
erstellt am: 19. Mrz. 2009 14:08 <-- editieren / zitieren --> Unities abgeben: Nur für gerhard123
Hallo, sorry wenn ich mich hier rein hänge. Der Code ist klasse. Was müste man ergänzen , wenn man nicht die ganze Zeichnung sondern nur gezielte Blöcke bzw. gezielte Objekte eines Blockes bearbeiten möchte? Leider werden auch keine Attribute berücksichtigt. Ich hoffe das sprengt jetzt nicht die Hilfsbereitschaft. Danke Türringer [Diese Nachricht wurde von türringer am 19. Mrz. 2009 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Stelli1 Moderator Verm.-Ing.
Beiträge: 1521 Registriert: 17.08.2005 Map 2000-2014, Rasterdesign, MapGuide, Autodesk Topobase, VS6, VS.net 2013
|
erstellt am: 19. Mrz. 2009 15:16 <-- editieren / zitieren --> Unities abgeben: Nur für gerhard123
Hallo, hier mal ein Beispiel. Wenn du nur bestimmte Objekte anders haben willst kannst du das in der Auflistung ändern bzw. hinzufügen. Es geht auch flexibler jedoch muss man auch mehr programmieren
Code: Sub EsWerdeTeilweiseGrau() Dim Entity As AcadEntity, Blockdef As AcadBlock, Blockref As AcadBlockReference Dim IndexFarbe As Integer Dim Blockname As String ' Fest eingeben Blockname = "Testblock" IndexFarbe = 254 'oder Blockname = ThisDrawing.Utility.GetString(True, Chr(10) & "Blockname: ") If Blockname = "" Then Exit Sub IndexFarbe = ThisDrawing.Utility.GetReal(Chr(10) & "Farbe: ") Set Blockdef = ThisDrawing.Blocks(Blockname) ' Farben der Blockdefinition For Each Entity In Blockdef Debug.Print Entity.ObjectName Select Case Entity.ObjectName ' Aufzählung der Typen Case "AcDbLine" Entity.color = IndexFarbe Case "AcDbPolyline" Entity.color = IndexFarbe Case "AcDbAttributeDefinition" Entity.color = IndexFarbe Case "AcDbMText" Entity.color = IndexFarbe Case "AcDbArc" Entity.color = IndexFarbe Case Else ' Wenn nichts besonderes Entity.color = IndexFarbe End Select Next Entity End Sub
Wilfried Stelberg------------------ Warum lisp'eln wenn's auch anders geht. www.ib-stelberg.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Elektroplaner Elektrokonstruktion (m/w/d) | Menschen und Technologien zu verbinden, den Perfect Match für unsere Kunden zu gestalten, immer die richtigen Expert:innen für die jeweilige Herausforderung zu finden - das ist unser Anspruch bei FERCHAU und dafür suchen wir dich: als Elektroplaner:in in der Elektrokonstruktion, der:die wie wir Technologien auf die nächste Stufe bringen möchte. Wir realisieren spannende Projekte für namhafte Kunden ... | Anzeige ansehen | Elektrotechnik, Elektronik |
|
Stelli1 Moderator Verm.-Ing.
Beiträge: 1521 Registriert: 17.08.2005 Map 2000-2014, Rasterdesign, MapGuide, Autodesk Topobase, VS6, VS.net 2013
|
erstellt am: 19. Mrz. 2009 17:09 <-- editieren / zitieren --> Unities abgeben: Nur für gerhard123
Hallo, noch ein kleiner Nachtrag zu den Attributen. Die werden zwar beim Einfügen des Blockes aus der Blockdefinition (Baumuster) abgekupfert sind aber ab dann eigene Entities die an die bereits eingefügten Blöcke angehängt sind. Eine Veränderung der bereits eingefügten Attribute findet erst dann statt wenn der Block wieder mit dem Baumuster synchronisiert (Befehl: ATTSYNC) wird. Wenn du noch eine Zeile hinzufügst wird das auch vom Proggi gemacht
Code:
....... Next Entity ThisDrawing.SendCommand ("attsync n " & Blockname & vbCr) End Sub
Wilfried Stelberg------------------ Warum lisp'eln wenn's auch anders geht. www.ib-stelberg.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |