| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Linienfarbe und Linientyp aendern mittels Vb (3272 mal gelesen)
|
flori555 Mitglied Student
Beiträge: 29 Registriert: 03.02.2006
|
erstellt am: 03. Feb. 2006 02:34 <-- editieren / zitieren --> Unities abgeben:
Hallo an Alle, ich habe ein echt grosses Problem. Ich soll eine Zeichnung (Programm, Advanced CAD , Version 13.01) im .dxf Format in AutoCAD 6 importieren und alle Linientypen richtig darstellen. Das importieren kann man ja manuel, ist also kein Problem. Es werden beim importieren aber alle Linientypen in Roter Farbe darbestellt. Meine Frage: Wie kann ich mit Hilfe von Visual Basic die Linien einer Kategorie (z.B. alle Bemassungslinien) auswaehlen und auf den richtigen Linientyp und die richtige Linienfarbe aendern. Der Linientyp und die Linienfarbe sollte moeglichst vorher definiert werden. Vielleicht hat ja einer eine Idee. Ich hab bisher nur mit Vb in Verbindung mit Access und Excel gearbeitet, somit habe ich auf diesem Gebiet so gut wie keine Ahnung. Deshalb bitte ich Euch, eure Hilfestellungen so ausfuehrlich wie moeglich darzustellen, damit auch ich als "fast laie" das nachvollziehen kann. PS.: Wenn auch keiner eine Loesung fuer das ganze Problem hat, vieleicht koennt ihr mir zumindest sagen, wie man mit Hilfe von Visual Basic Linien auswaehlt oder noch besser alles Linien eies Typs auswaehlt.
Gruss,
Florian Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mib75 Mitglied Konstrukteur
Beiträge: 11 Registriert: 27.01.2006 AutoCAD 2005, Windows XP
|
erstellt am: 03. Feb. 2006 06:36 <-- editieren / zitieren --> Unities abgeben: Nur für flori555
Hallo Florian, sind die Linien auf unterschiedlichen Layern? Wenn man die Objekte aufgrund der Eigenschaften selektieren kann ist das mit VB kein Problem. Wenn aber alle Linien die gleichen Eigenschaften (Layer, Farbe, ...) haben, na dann viel Spaß. mfg Michael
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
flori555 Mitglied Student
Beiträge: 29 Registriert: 03.02.2006
|
erstellt am: 03. Feb. 2006 06:42 <-- editieren / zitieren --> Unities abgeben:
Hallo Michael, Die Bemassungslinien sind auf ByBlock, der Rest auf ByLayer eingestellt. Die Farbe ist immer Rot. Das will ich aendern. Nur die Linienstaerke sowie der Linientyp sind noch unterschiedlich. Vielleicht kannst du mir somit weiterhelfen. Schon mal vielen Dank im vorraus. Gruss, Florian Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mib75 Mitglied Konstrukteur
Beiträge: 11 Registriert: 27.01.2006 AutoCAD 2005, Windows XP
|
erstellt am: 03. Feb. 2006 07:05 <-- editieren / zitieren --> Unities abgeben: Nur für flori555
Hallo Florian, du musst zuerst einen Auswahlsatz erstellen, Dim ss As AcadSelectionSet Dim Code(0 To 0) As Integer Dim Daten(0 To 0) As Variant On Error Resume Next ThisDrawing.SelectionSets("select01").Delete On Error GoTo 0 Set ss = ThisDrawing.SelectionSets.Add("select01") Code(0) = 0 Daten(0) = "LINE" ss.SelectOnScreen Code, Daten dann hast du mal alle Linien, die kannst du dann Ändern, For Each Line In ss Line.Layer = "AM_7" Line.XXXX = XXXX Next Line Du kannst dir im VB Überwachungsfenster die Eigenschaften der Linie anzeigen lassen, damit du die Eigenschaften richtig ansprechen kannst. mfg Michael Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
flori555 Mitglied Student
Beiträge: 29 Registriert: 03.02.2006
|
erstellt am: 03. Feb. 2006 07:30 <-- editieren / zitieren --> Unities abgeben:
Hallo Michael, danke fuer die schnelle Antwort, aber irgendwie funktioniert es nicht. Die Fehlermeldung lautet: Aktives AutoCAD Fenster nicht aktiv, oder so aehnlich (kanns nur schwer lesen, ist in Japanisch). Dim ss As AcadSelectionSet Dim Code(0 To 0) As Integer Dim Daten(0 To 0) As Variant On Error Resume Next ThisDrawing.SelectionSets("select01").Delete On Error GoTo 0 Set ss = ThisDrawing.SelectionSets.Add("select01") Code(0) = 0 Daten(0) = "LINE"
ss.SelectOnScreen Code, Daten Hier ist der Fehler dann hast du mal alle Linien, die kannst du dann Ändern, For Each Line In ss Line.Layer = "AM_7" Line.XXXX = XXXX Kann ich dann mehrere Farben (z.B. fuer Bemassung, gruen und fuer normale Linien weis usw.) Next Line Hab im Code, die Stelle des Fehlers markiert. Vieleicht bin ich auch nur zu dumm. Danke fuer deine Hilfe. Entschuldige bitte, aber ich steh derzeit echt auf dem Schlauch.
Gruss, Florian
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
flori555 Mitglied Student
Beiträge: 29 Registriert: 03.02.2006
|
erstellt am: 03. Feb. 2006 08:59 <-- editieren / zitieren --> Unities abgeben:
Hallo Michael, das Programm laeft jetzt. War natuerlich mein Fehler. Aber es aendert nichts (aendert nicht die Farben). Was benoetige ich fuer Befehle, um die Farbe der bemassungslinien, der Volllinien und der unsichtbaren Linien zu aendern? Ich hoffe, die Befehle kann mir jemand sagen. Ich kann leider keine Hilfefunktion nutzen, da ich eine japanische Version nutzen muss (aber nur noch 4 Wochen). Gruss, Florian Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mib75 Mitglied Konstrukteur
Beiträge: 11 Registriert: 27.01.2006 AutoCAD 2005, Windows XP
|
erstellt am: 03. Feb. 2006 09:21 <-- editieren / zitieren --> Unities abgeben: Nur für flori555
|
flori555 Mitglied Student
Beiträge: 29 Registriert: 03.02.2006
|
erstellt am: 03. Feb. 2006 09:29 <-- editieren / zitieren --> Unities abgeben:
Hallo Michael, danke fuer die Muehe. Ich hab noch ein Problem. Das Programm aendert derzeit nur die Linien. Die Bemassung sowie die Radien sind nicht mit eingeschlossen. Wie kann ich da rangehen? Nochmals Danke. Gruss, Florian Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
flori555 Mitglied Student
Beiträge: 29 Registriert: 03.02.2006
|
erstellt am: 03. Feb. 2006 09:35 <-- editieren / zitieren --> Unities abgeben:
|
mib75 Mitglied Konstrukteur
Beiträge: 11 Registriert: 27.01.2006 AutoCAD 2005, Windows XP
|
erstellt am: 03. Feb. 2006 11:27 <-- editieren / zitieren --> Unities abgeben: Nur für flori555
Hallo, mit der Funktion werden alle Objekte in der Zeichnung durchlaufen Dim AcadObject as AcadObject For Each AcadObject In ThisDrawing.ModelSpace oder du kannst beim Auswahlsatz das Objekt Kreis, Dim, ... hinzufügen. Habe die Layer / Farbenumstellung gerade probiert, bei mir funktioniert es. objLine.color = acCyan objLine.Layer = "AM_3" objLine.color = acByLayer mfg Michael
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
flori555 Mitglied Student
Beiträge: 29 Registriert: 03.02.2006
|
erstellt am: 06. Feb. 2006 08:07 <-- editieren / zitieren --> Unities abgeben:
Hallo Michael, ich verstehe das nicht. bei mir will das Program einfach nicht laufen. Kannst du mir vielleicht mal den Code schicken, mit dem du z.B. bei einer Linie oder einem Kreis die Farbe und den Layer aenderst. Bitte den kompletten code, wo ich nichts mehr einfuegen muss um eine Linie zu aendern. Ich bin anscheinen echt zu doof dafuer. Wenn ich mal das System gesehen habe wie es funktioniert, kann ich ja hoffentlich die anderen Layer und Linientypen so abaendern, wie ich sie brauche. Vielleicht kannst du das ja noch fuer mich machen. Waehre dir sehr verbunden. Gruss, Florian Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mib75 Mitglied Konstrukteur
Beiträge: 11 Registriert: 27.01.2006 AutoCAD 2005, Windows XP
|
erstellt am: 06. Feb. 2006 08:54 <-- editieren / zitieren --> Unities abgeben: Nur für flori555
Hallo Florian, hab den Code probiert, und er funktioniert. Sub u12() Dim AcadObject As AcadObject For Each AcadObject In ThisDrawing.ModelSpace AcadObject.color = acRed 'Ändert alle Objekte auf Rot AcadObject.Layer = "AM_7" 'Ändert alle Objekte auf Layer AM_7 Next AcadObject End Sub Wenn er bei dir nicht funktioniert bin ich leider überfragt.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
flori555 Mitglied Student
Beiträge: 29 Registriert: 03.02.2006
|
erstellt am: 06. Feb. 2006 09:14 <-- editieren / zitieren --> Unities abgeben:
Hallo Michael, die Farbe aendern funktioniert jetzt. Wenn ich denn Layer aendern will, bringt er immer eine Fehlermeldung (kann ich leider nicht uebersetzen). Kann es sein, wenn die Sichtbaren Linien und die Bemassungslinien den gleichen Layer und die gleiche Farbe haben (im orginal Dokument), dass bei der Funktion Dim AcadLine As AcadCircle For Each Line In ThisDrawing.ModelSpace Line.Color = acGreen alles auf gruen geandert wird. Irgendwie kann AutoCAD die Linien (ob es eine Bemassungslinie oder eine Sichtbare Line oder ein Kreis ist) nicht unterscheiden. Kann es sein, dass die Unterscheidung wirklich nur durch den Layer und die Farbe sowie die Strichstaerke gemacht wird? Wenn ja, dann habe ich ein Problem. Gruss, Florian Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
flori555 Mitglied Student
Beiträge: 29 Registriert: 03.02.2006
|
erstellt am: 06. Feb. 2006 09:38 <-- editieren / zitieren --> Unities abgeben:
Hallo Michael, nochmal ein anderer Gedankengang. Mit den Layern komme ich anscheinend nicht weiter, da fast alle Linien (Centerline, Bemassung usw.) den gleichen Layer haben. Somit aendert sich immer alles und das will ich nicht. Ich brauche fuer die Centerline eine andere Farbe und einen anderen Layer als fuer die Sichtbaren Linien usw. Vielleicht kann man aber das Problem ueber den Linientyp angehen. Z.B. haben die Centerlines den Linientyp "Center" und die sichtbaren Linien den Typ "Continuous" und die Bemassung den Typ "Byblock". Wenn ich diesen Typ ansprechen koennte, und z.B. sagen koennte: Aendere alle Linien mit dem typ "Center" in die Farbe Gruen, dann waehre ich am Ziel. Vielleicht kannst du mir dazu was sagen. Nochmals danke fuer deine Muehe. Ich weis das echt zu schaetzen. Gruss, Florian Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
flori555 Mitglied Student
Beiträge: 29 Registriert: 03.02.2006
|
erstellt am: 07. Feb. 2006 03:01 <-- editieren / zitieren --> Unities abgeben:
Hallo Michael, noch eine Frage: du hast mir anfangs den untenstehenden Code empfohlen. Sub u12() Dim acadLine As AcadGroups Dim ss As AcadSelectionSet Dim Code(0 To 0) As Integer Dim Daten(0 To 0) As Variant Dim Color As ACAD_COLOR On Error Resume Next ThisDrawing.SelectionSets("select01").Delete On Error GoTo 0 Set ss = ThisDrawing.SelectionSets.Add("select01") Code(0) = 0 Daten(0) = "LINE" ss.SelectOnScreen Code, Daten For Each Line In ss Line.Color = acBlue Next Line Mit diesem Code kann ich nur die Linien ansprechen. das ist ja schon mal nicht schlecht, da ich so die Farbe der Linien unabhaengig von der Bemassung aendern kann. Allerdings werden Radien (Sichtbare Linien) nicht angesprochen. Wie kann ich den Code erweitern, dass auch Radien (haben die selbe Linienfarbe als die sichtbaren Linien) angesprochen werden. Es sollen auch die Bemassung geandert werden (Farbe) und der Frame. Die Bemassung und der Frame muss aber unbedingt unabhaengig von der Farbe der Sichtbaren Linien gewaehlt werden koennen. Ich denke mal, die Erweiterung ist gar nicht so schwer. Ich blicke aber immer noch nicht durch. Vielleicht kannst du mir hierfuer nochmals einen Tipp geben. Waehre sehr dankbar. Gruss vom unwissenden, Florian 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: 07. Feb. 2006 10:21 <-- editieren / zitieren --> Unities abgeben: Nur für flori555
Hallo Florian, Du kannst im Filter auch eine OR Verknüpfung der Eigenschaften erreichen (wie in Lisp). z.B. so kannst du Texte und Mtexte gleichzeitig filtern.
Code:
Dim FilterType(0 To 3) Dim FilterData(0 To 3) FilterType(0) = -4 FilterData(0) = "<OR" FilterType(1) = 0 FilterData(1) = "TEXT" FilterType(2) = 0 FilterData(2) = "MTEXT" FilterType(3) = -4 FilterData(3) = "OR>"
Stelli------------------ Warum lisp'eln wenn's auch anders geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
pistolpete1 Mitglied Student
Beiträge: 102 Registriert: 06.01.2007
|
erstellt am: 22. Aug. 2007 15:25 <-- editieren / zitieren --> Unities abgeben: Nur für flori555
|
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13508 Registriert: 30.11.2003 ACAD 2008 Mechanical
|
erstellt am: 22. Aug. 2007 16:04 <-- editieren / zitieren --> Unities abgeben: Nur für flori555
Frag's einfach ab.. color ist seit der 2004'er Version versteckt und undokumentiert, aber noch vorhanden.. die neue Property ist Truecolor .... .. auf die kannst du natürlich auch zurückgreifen. ------------------ - Thomas - "Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben." Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |