| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Farbe über alles wechseln (1789 mal gelesen)
|
bushcruiser Mitglied Informatik
Beiträge: 4 Registriert: 11.10.2005
|
erstellt am: 11. Okt. 2005 20:36 <-- editieren / zitieren --> Unities abgeben:
Ich möchte gerne meine komplette Zeichnung in eine einheitliche Farbe wechseln, zum Beispiel in weiss. Mit diesem Code erreiche ich fast alles, aber die Farbe, die sich in einem Block oder Block in Block befindet kann ich nicht ändern. Wie kann ich eine Farbe über alle Blöcke hinweg, ohne diese auflösen zu müssen ändern. Für alle Infos bin ich sehr dankbar. ents = myDoc.ModelSpace ct = ents.Count - 1 Do Until ct = 0 ent = ents.Item(ct) ent.Color = FarbNummer ent.Update() ct = ct - 1 Loop Gruss bushcruiser
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mapcar Mitglied CADmin
Beiträge: 1250 Registriert: 20.05.2002 Time flies like an arrow, fruit flies like a banana (Groucho Marx)
|
erstellt am: 14. Okt. 2005 00:12 <-- editieren / zitieren --> Unities abgeben: Nur für bushcruiser
Ein piece... Ist ja immer willkommen, aber hier kannst du ruhig mal erwähnen, in welcher API und in welcher Sprache das so gedacht ist;-) OK, C++ isses nicht, auch kein Java oder C#, da fehlen die ';' am Zeilenende. Lisp kann's auch nicht sein, kaum runde Klammern drin, und für Brainfuck ist es zu buchstabenhaltig. Na ja, dann scheiden wir noch Delphi, Python, Perl und PHP aus, und was bleibt übrig? Visual Basic? Wenn das Visual Bsic ist, dann fehlt das eine oder andere 'Dim'. Das mag zwar in VB6 funktioniert haben, aber hier nicht mehr - VB7 ist streng typisiert (Variants gibt es nicht mehr). Gruß, Axel Strube-Zettler ------------------ Meine AutoLisp-Seiten Mein Angriff auf dein Zwerchfell Mein Lexikon der Fotografie Mein gereimtes Gesülze Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bushcruiser Mitglied Informatik
Beiträge: 4 Registriert: 11.10.2005
|
erstellt am: 14. Okt. 2005 13:59 <-- editieren / zitieren --> Unities abgeben:
Tschuldigung wenn meine Frage nicht ganz rüber gekommen ist….. Ich möchte einem DWG alles auf eine einheitliche Farbe bringen, also auch Block Block Verschachtelungen. Was mich interessieren würde, ist die Schlaufe, wie man zu den Blöcken vordringen kann! Aus diesem Grund habe ich auch nur die Schlaufe, die ich jetzt verwende gepostet und das ohne jegliche Deklarationen. Diese Schlaufe ist in VB.NET gemacht, kann es mir aber auch in C# vorstellen. Das Endprodukt, sollte dann ein dll sein, mit dem es durch Eingabe im Autocad in der command line mit dem command colorchange und Farbnummer, das gesamte DWG auf die entsprechende Farbnummer gewechselt wird. Besten Dank für eure Hilfe Bushcruiser
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mapcar Mitglied CADmin
Beiträge: 1250 Registriert: 20.05.2002 Time flies like an arrow, fruit flies like a banana (Groucho Marx)
|
erstellt am: 15. Okt. 2005 11:25 <-- editieren / zitieren --> Unities abgeben: Nur für bushcruiser
So einfach ist das nicht - da braucht es schon einige 'Schlaufen' mehr;-) Am besten orientierst du dich einfach an einem Programm, das die ganze Zeichnung bis in die innersten Ecken durchkämmt - bei den hier geposteten Adesk-Samples ist einiges dabei. Ich muss allerdings doch mal die Fage stellen: Macht das Ganze denn irgendeinen Sinn? Wozu ein größerer Programmieraufwand, nur um eine Zeichnung zu zerstören? Im Endeffekt werden Zeichnungen doch geplottet, und da würde es reichen, alle Farben auf schwarz zu stellen. Für mich liegt die Frage auf einer Linie mit "Wie zerschieße ich alle Blöcke" oder "Wie kriege ich alles auf einen Layer" usw. - alles Dinge, die die Welt nicht braucht. Gruß, Axel Strube-Zettler ------------------ Meine AutoLisp-Seiten Mein Angriff auf dein Zwerchfell Mein Lexikon der Fotografie Mein gereimtes Gesülze Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bushcruiser Mitglied Informatik
Beiträge: 4 Registriert: 11.10.2005
|
erstellt am: 15. Okt. 2005 16:48 <-- editieren / zitieren --> Unities abgeben:
Hallo Axel Sinn oder Unsinn, das ist eine gute Frage! Wenn es eine bessere Lösung geben würde wäre ich dir auch dankbar. Das Problem ist folgender massen. Ich bekomme Pläne vom Architekten, die sind in den meisten Fällen ziemlich farbig. Ich als Sanitär, Heizung oder Elektrozeichner, brauche die Pläne als XRef hinter meinen Plänen. Alle Leitungen Apparate oder Rohre haben andere Farben die ich dann entsprechend ausplotten möchte, das XRef vom Architekten sollte aber in einheitlicher Farbe sprich weiss oder grau ausgeplottet werden. Schon beim Zeichnen ist es viel übersichtlicher, wenn das XRef einheitlich in weiss daherkommt. Meine Farben die geplottet werden und die des XRef die als einheitliche Farben daherkommen müssen sind durchaus die selben Farbnummern. Blöcke zerschiessen ist leider auch nicht eine gute Lösung, da ja bekanntlich aus Attribut Texten nach dem auflösen nur noch so komische Zeichen im Plan rumstehen. Das ist so zirka das Problemchen, was ich zu lösen habe. Wenn es möglich wäre das ganze XRef auf einen Layer zu kippen, und dem eine Farbe zuzuweisen wäre das auch Toll nur ist dann der Plan immer noch ziemlich farbig, weil der Architekt meistens ein Künstler ist und bestimmt nicht Farbe von Layer wählt sonder sich die Farben möglichst überall und in jedem Block fantasievoll gestaltet. Wenn du eine andere Lösung für mein Problem hättest, damit ich nicht ins Herz vom DWG vordringen müsste, wäre ich dir sehr dankbar. Gruss Bushcruiser Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Stelli1 Ehrenmitglied Verm.-Ing.
Beiträge: 1521 Registriert: 17.08.2005 Map 2000-2014, Rasterdesign MapGuide autodesk Topobase 2-2014 VS6, VS.net 2010
|
erstellt am: 17. Okt. 2005 18:17 <-- editieren / zitieren --> Unities abgeben: Nur für bushcruiser
Hallo, Sieht doch wie VBA,VB6 oder VB.net aus. häng doch noch eine Schleife für die Blöcke dran und fertig Code:
For Each BlockDef In myDoc.Blocks If BlockDef.IsLayout = False Then For Each BlockEnt In BlockDef BlockEnt.Color = acWhite Next BlockEnt End If Next block
Stelli ------------------ Warum lisp'eln wenn's auch anders geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mapcar Mitglied CADmin
Beiträge: 1250 Registriert: 20.05.2002 Time flies like an arrow, fruit flies like a banana (Groucho Marx)
|
erstellt am: 17. Okt. 2005 20:32 <-- editieren / zitieren --> Unities abgeben: Nur für bushcruiser
Nee, nee, so einfach isses nich... VB.NET ist nicht VB oder VBA - es ist eine andere Sprache, auch wenn es 'so aussieht'. Man kann allerdings auch über die COMInterop-Mechanismen des .NET-Frameworks die AutoCAD-COM-API verwenden, genauso wie in Lisp oder VBA. Wie man die Brücke zwischen dem Framework und der COM-Api schlägt, ist in einigen Beispielen drin, die hier im Forum stehen, z.B. auch in meinem Systemvariablen-Beispiel. Aber nun muss ich doch mal Stellis Signaturspruch aufgreifen: Warum sowas über .NET, wenn das in Lisp ein Fünfzeiler ist? Ich denke, das mit etwas Such-Anstrengung im Lisp-Forum oder auch bei CADWiesel eine fertige Lösung gefunden wird. Ich habe sowas auch schon tausendmal geschrieben, aber mein Rechner ist kürzlich abgeraucht, und noch liegt alles irgendwo auf Backup-CDs. Und nun schleicht er sich schon wieder aus dem Zeitgeschehen. Morgen kommt ein neuer;-) Wenn's in Lisp 5 Zeilen sind, dann geht's in VBA erfahrungsgemäß mit 50. Oder 100;-)))) in VB.NET oder C# kommt dann eben noch ein bisschen Overhead dazu... Ach so: Die Gründe für die Vorgehensweise sind für mich mit dieser Begründung durchaus akzeptabel. Ich frag halt immer mal, weil ich hier auch schon viele völlig bekloppte Ideen gesehen habe;-) Falls du nix findest, noch mal melden! Gruß, Axel ------------------ Meine AutoLisp-Seiten Mein Angriff auf dein Zwerchfell Mein Lexikon der Fotografie Mein gereimtes Gesülze Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bushcruiser Mitglied Informatik
Beiträge: 4 Registriert: 11.10.2005
|
erstellt am: 17. Okt. 2005 21:32 <-- editieren / zitieren --> Unities abgeben:
|
Stelli1 Ehrenmitglied Verm.-Ing.
Beiträge: 1521 Registriert: 17.08.2005 Map 2000-2014, Rasterdesign MapGuide autodesk Topobase 2-2014 VS6, VS.net 2010
|
erstellt am: 18. Okt. 2005 13:16 <-- editieren / zitieren --> Unities abgeben: Nur für bushcruiser
Hallo mapcar, Hallo Wenn man in VB genauso eine Wurst wie in lisp erzeugt sind's wohl doch nicht so viele Zeilen. Aber Mapcar hat recht das der Aufwand mit VB.net wohl zu hoch ist. Läuft nur wo net Framework installiert ist etc. Hier noch die komplette VBA Lösung
Code:
Sub EsWerdeDunkel() Dim Entity As AcadEntity, Blockdef As AcadBlock, Blockref As AcadBlockReference For Each Entity In ThisDrawing.ModelSpace: Entity.Color = 254: Next Entity For Each Blockdef In ThisDrawing.Blocks If Blockdef.IsLayout = False Then For Each Entity In Blockdef: Entity.Color = 254: Next Entity Next Blockdef End Sub
Läßt man noch die Deklaration weg und schiebt die untere Schleife zusammen wär's zwar gar nicht mehr lesbar aber halt nur 4 Zeilen.Stelli ------------------ Warum lisp'eln wenn's auch anders geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mapcar Mitglied CADmin
Beiträge: 1250 Registriert: 20.05.2002 Time flies like an arrow, fruit flies like a banana (Groucho Marx)
|
erstellt am: 20. Okt. 2005 08:20 <-- editieren / zitieren --> Unities abgeben: Nur für bushcruiser
|
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|