| |
 | 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: Gruppencode und Gruppentyp herausfinden (2635 mal gelesen)
|
flori555 Mitglied Student

 Beiträge: 29 Registriert: 03.02.2006
|
erstellt am: 07. Feb. 2006 09:02 <-- editieren / zitieren --> Unities abgeben:         
Hallo an Alle, ich habe wieder mal ein Problem. Dim ssMain As AcadSelectionSet Dim Code(0 To 2) As Integer Dim Daten(0 To 2) As Variant On Error Resume Next ThisDrawing.SelectionSets("select01").Delete On Error GoTo 0 Set ssMain = ThisDrawing.SelectionSets.Add("select01") Code(0) = 0 Daten(0) = "Line" ssMain.SelectOnScreen Code, Daten For Each Line In ssMain Line.Layer = "E_S26" Line.Color = acByLayer Next Line So finde ich in meiner Zeichnung die Linien und aendere die auf den gewuenschten Layer hier "E_S26". Soweit funktioniert alles wie gewuenscht. Ich moechte aber auch die Bemassung und die Radien sowie den Frame der Zeichnung ansprechen und auf verschiedene Farben abaendern. Somit ist es nicht moeglich, alle Typen auf einmal anzusprechen. Wie kann ich den Code und den Typ fuer die Gewuenschte Gruppe herausfinden (z.B. fuer die Bemassung). Oder kann mir jemand den Code und den Typ sagen? sind die immer Gleich? Wahnsinn, so viele Fragen. Ich hoffe mir kann jemand helfen. Gruss, Florian Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CAD-Huebner Ehrenmitglied V.I.P. h.c. Verm.- Ing., ATC-Trainer

 Beiträge: 9807 Registriert: 01.12.2003 AutoCAD 2.5 - 2022, LDD, MDT, RD, ADT, Civil Inventor AIP 4-11, 2008 -2022 Win 10
|
erstellt am: 07. Feb. 2006 10:09 <-- editieren / zitieren --> Unities abgeben:          Nur für flori555
|
Stelli1 Moderator Verm.-Ing.
    
 Beiträge: 1526 Registriert: 17.08.2005 Map 2000-2014, Rasterdesign, MapGuide, Autodesk Topobase, VS6, VS.net 2013
|
erstellt am: 07. Feb. 2006 10:24 <-- editieren / zitieren --> Unities abgeben:          Nur für flori555
Hallo Florian, wenn gar nichts anderes geht, kann man sich ein Element in eine DXF Datei speichern. Ab dem Abschnitt "Entities" ist dann dein Element aufgelistet. Stelli ------------------ Warum lisp'eln wenn's auch anders geht.  Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CAD-Huebner Ehrenmitglied V.I.P. h.c. Verm.- Ing., ATC-Trainer

 Beiträge: 9807 Registriert: 01.12.2003 AutoCAD 2.5 - 2022, LDD, MDT, RD, ADT, Civil Inventor AIP 4-11, 2008 -2022 Win 10
|
erstellt am: 07. Feb. 2006 10:32 <-- editieren / zitieren --> Unities abgeben:          Nur für flori555
Oder Code:
(CDR (ASSOC 0 (ENTGET (CAR (ENTSEL "\nElementbezeichnung ermitteln von:")))))
auf eine Schaltfläche oder die Werkzeugpalette legen oder einfach nur in die Befehlzeile einfügen und ein AutoCAD-Objekt wählen.------------------ Mit freundlichem Gruß Udo Hübner Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
flori555 Mitglied Student

 Beiträge: 29 Registriert: 03.02.2006
|
erstellt am: 08. Feb. 2006 07:27 <-- editieren / zitieren --> Unities abgeben:         
Hallo, danke fuer Eure Antworten. Ein wenig weiter bin ich auch schon gekommen. Dim ogac_Sset As AcadSelectionSet Sub Auswahl() Dim olac_Entity As AcadEntity Dim xType(0) As Integer Dim xvalue(0) As Variant ' This example creates a new layer called "AM_12N" Dim layerObj As acadLayer
' Add the layer to the layers collection Set neuerlayer = ThisDrawing.Layers.Add("E_S26") lt = "CONTINUOUS" neuerlayer.LayerOn = True neuerlayer.Color = 4 neuerlayer.Linetype = lt ' Selektionset anlegen On Error Resume Next Set ogac_Sset = ThisDrawing.SelectionSets("MySelset") If Err.Number Then ' Wenn noch nicht vorhanden Set ogac_Sset = ThisDrawing.SelectionSets.Add("MySelset") End If On Error GoTo 0 ' Filter setzen ' Dann kann nur der gewunschte Elementyp gewahlt werden xType(0) = 0 xvalue(0) = "Line" ogac_Sset.SelectOnScreen xType, xvalue For Each Line In ogac_Sset Line.Layer = "E_S26" Line.Color = acByLayer Next Line xType(0) = 0 xvalue(0) = "Insert" For Each insert In ogac_Sset insert.Layer = "E_S26" insert.Color = acByLayer Next insert xType(0) = 0 xvalue(0) = "Dimension" For Each Dimension In ogac_Sset Dimension.Layer = "E_S26" Dimension.Color = acByLayer Next Dimension End Sub Wenn ich "Line" und "Insert" auswaehle, dann funktioniert das auch wie geplant. Wenn ich "Dimension" auswaehle, dann macht das Programm gar nichts. Es bringt auch keine Fehlermeldung. Das gleiche ist es mit "Circle". Die Layer farbe ist nur im Beispiel gleich. Diese soll spaeter fuer jeden Typ (z.B. Circle =Rot, Dimension=gruen usw.)anders sein. Waehre sehr dankbar, wenn mir jemand sagen koennte warum das Programm nichts macht. gruss, Florian Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Goofy007 Mitglied Vermessungstechniker
  
 Beiträge: 578 Registriert: 06.11.2004 Map3D 2018 und Civil3D 2018
|
erstellt am: 08. Feb. 2006 08:27 <-- editieren / zitieren --> Unities abgeben:          Nur für flori555
Hallo Florian, nach dem Definieren des Filters musst du dein SelectionSet neu füllen. Zitat:
xType(0) = 0 xvalue(0) = "Dimension" ogac_Sset.SelectOnScreen xType, xvalue For Each Dimension In ogac_Sset Dimension.Layer = "E_S26" Dimension.color = acByLayer Next Dimension
mfg didi
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
flori555 Mitglied Student

 Beiträge: 29 Registriert: 03.02.2006
|
erstellt am: 08. Feb. 2006 08:31 <-- editieren / zitieren --> Unities abgeben:         
|
flori555 Mitglied Student

 Beiträge: 29 Registriert: 03.02.2006
|
erstellt am: 08. Feb. 2006 08:52 <-- editieren / zitieren --> Unities abgeben:         
Hallo, gut. Mein Fehler. Es Funktioniert. Noch eine Frage. Weis jemand, wie ich die Centerline und gestrichelte Linien "Dashed Lines" anspreche. Ueber "Lines" werden alle Linien angesprochen. Ich moechte aber den Center lines und den Dashed Lines specielle Farben geben. dazu brauche ich den gruppen Code. Ich finde den aber leider nicht. Gruss, Florian Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CAD-Huebner Ehrenmitglied V.I.P. h.c. Verm.- Ing., ATC-Trainer

 Beiträge: 9807 Registriert: 01.12.2003 AutoCAD 2.5 - 2022, LDD, MDT, RD, ADT, Civil Inventor AIP 4-11, 2008 -2022 Win 10
|
erstellt am: 08. Feb. 2006 09:32 <-- editieren / zitieren --> Unities abgeben:          Nur für flori555
Linientypname ist Code 6. Das klappt aber nur, wenn der Linientyp direkt dem Objekt zugewiesen wurde. Ist der Linientyp "_BYLAYER", dann definiert der Layer den Linientyp, dann muss zuerst die Layertabelle durchsucht werden und alle Linien diese Layers mit der Eigenschaft bylayer müsssen gewählt werden. ------------------ Mit freundlichem Gruß Udo Hübner Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
flori555 Mitglied Student

 Beiträge: 29 Registriert: 03.02.2006
|
erstellt am: 09. Feb. 2006 03:03 <-- editieren / zitieren --> Unities abgeben:         
Hallo an Alle, hab noch eine Frage. Ich benoetige den Gruppencode, damit ich den Frame (den Rahmen der CAD Zeichnung) ansprechen kann. Die Farbe des Frames kann ich mit der Bemassung ueber "Dimension" ansprechen. Ich moechte aber, dass der Frame eine andere Farbe als die Bemassung hat. Ich benoetige nur den Gruppencode, aber kann ihn nicht finden. 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: 09. Feb. 2006 03:25 <-- editieren / zitieren --> Unities abgeben:         
Hallo, noch eine letzte frage. Unten findet ihr den Code On Error Resume Next ThisDrawing.SelectionSets("abdefSelset").Delete Set oooooooogac_Sset = ThisDrawing.SelectionSets("abdefSelset") If Err.Number Then ' Wenn noch nicht vorhanden Set oooooooogac_Sset = ThisDrawing.SelectionSets.Add("abdefSelset") End If On Error GoTo 0 xxxxxxxxType(0) = 6 xxxxxxxxvalue(0) = "Dashed" oooooooogac_Sset.SelectOnScreen xxxxxxxxType, xxxxxxxxvalue
For Each Dashed In oooooooogac_Sset Dashed.Layer = "AM_3" Dashed.Color = acByLayer Next Dashed On Error Resume Next ThisDrawing.SelectionSets("abdeSelset").Delete Set ooooooogac_Sset = ThisDrawing.SelectionSets("abdeSelset") If Err.Number Then ' Wenn noch nicht vorhanden Set ooooooogac_Sset = ThisDrawing.SelectionSets.Add("abdeSelset") End If On Error GoTo 0 xxxxxxxType(0) = 6 xxxxxxxvalue(0) = "Center" ooooooogac_Sset.SelectOnScreen xxxxxxxType, xxxxxxxvalue
For Each Center In ooooooogac_Sset Center.Layer = "AM_7" Center.Color = acByLayer Next Center Dieser arbeitet auch wunderbar. Ich muss nur bei jedem Typ, bei dem ich die Farbe aendern will (also hier im Code Ausschnitt fuer "DAshed" und "Center"), in AutoCAD manuel die Zeichnung auswaehlen. Ich hab aber ca. 8 verschiedene Typen (8 verschiedene Farben) und muss somit 8 mal die Zeichnung auswaehlen und das ist schon ein wenig laestig. Gibt es dafuer einen Befehl, den ich vielleicht vor das Selectionset setzen kann, damit immer die ganze Zeichnung ausgewaehlt wird und somit das Programm eigenstaendig durchlaeft ohne das ich 8 mal die Zeichnung anwaehlen muss. Ich hoffe ihr koennt mir da auf die spruenge helfen. Bitte schaut euch auch meinen vorigen Beitrag an. Ich benoetige noch den Gruppencode um den Frame eigenstaendig anzuwaehlen. Danke schon mal im Vorraus. Gruss, Florian Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Goofy007 Mitglied Vermessungstechniker
  
 Beiträge: 578 Registriert: 06.11.2004 Map3D 2018 und Civil3D 2018
|
erstellt am: 09. Feb. 2006 08:38 <-- editieren / zitieren --> Unities abgeben:          Nur für flori555
Hallo Florian, zu deiner ersten Frage: Was ist ein Frame, bzw. Zeichnungsrahmen? Ich kenne so ein Element in Autocad nicht. Versuch doch den Lisp-Ausdruck von Udo anzuwenden! Zur Frage der Selektionen hab ich ein paar Vorschläge. Abhängig von der Aufgabenstellung gibt es folgende Möglichkeiten. Wenn du alle Element der Zeichnung bearbeiten willst, dann ersetzte .SelectOnScreen duch ein .SelectAll das verlangt keine Benutzereingaben. Wenn du immer den gleichen Bereich bearbeiten willst, dann hast du zwei Möglichkeiten. 1. Frag einmal den Bereich ab, speichere die Koordinaten und übergib sie 8x an die .SelectOnScreen Methode oder 2. Änderen die Konstruktion des Programmes dahingehend, dass du einmal alle Objekt im Bereich an das SelectionSet übergibst und frag den Typ des Objektes erst in der Schleife ab (mit Select Case). Da dein Code schon fertig ist, wird wohl die erste Möglichkeit die einfachere sein. mfg Didi
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
flori555 Mitglied Student

 Beiträge: 29 Registriert: 03.02.2006
|
erstellt am: 09. Feb. 2006 09:01 <-- editieren / zitieren --> Unities abgeben:         
Hallo Didi, danke fuer die Antwort. Hab deinen ersten Vorschlag ausprobiert und es funktioniert. Danke. Zum ersten Punkt nochmal. Den Rahmen, den ich meine, den braucht man, das man die Zeichnung in das A3 oder A4 Format uebergeben kann und dann einen druckbaren Bereich hat. Das ist der rote Rahmen, der um deine Zeichnung normalerweise die Zeichnung begrenzt. Ich kann dir leider nicht genau sagen wie er heisst, da meine Auto CAD Version in Japanisch ist (bin derzeit in Japan) und ich kanns nicht uebersetzen. Ich kann die Farbe des Rahmens mit der Bemassung aendern. Da die Bemassung aber gruen ist und ich den Rahmen weis brauche ist das eher schlecht. Ich hatte das selbe Problem mit den Linien. Wenn ich ueber c_Type(0) = 0 (Gruppencode ist 0) c_value(0) = "Lines" c_Sset.Select acSelectionSetAll, , , c_Type, c_value die Linien geandert habe, wahren auch die Centerlines in der Farbe (weis). Da ich die in blau brauche haben die einen speciellen Code. c_Type(0) = 6 (Gruppencode ist 6) c_value(0) = "Center" c_Sset.Select acSelectionSetAll, , , c_Type, c_value Somit konnte ich das Problem loessen. Mit dem Frame wuerde ich gerne das gleiche machen. Als erstes die Bemassung aendern und dann den Frame. Jedoch ist der Linientyp der Bemassung und des Frames beide male "Continuous". Das war bei den Lines (continuous) und den Centerlines(center) nicht so. Jetzt weis ich nicht, ob wan den Frame ueberhaupt veraendern kann und wenn, welchen Gruppencode benoetige ich. Vielleicht hast du ja eine Idee. Gruss, Florian Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Goofy007 Mitglied Vermessungstechniker
  
 Beiträge: 578 Registriert: 06.11.2004 Map3D 2018 und Civil3D 2018
|
erstellt am: 09. Feb. 2006 11:37 <-- editieren / zitieren --> Unities abgeben:          Nur für flori555
Hallo Florian, ich vermut du meinst den Rahmen des Ansichtsfensters. Wenn du den Lisp-Ausdruck von Udo mal kopierst (Strg+C) und dann ins Befehlsfenster von Acad kopierst (Strg+V) und anschließend so ein Ansichtsfenster anklickst bekommst du die Antwort "VIEWPORT". Das wird wohl das sein was du suchst. Schöne Grüße nach Japan Didi
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
flori555 Mitglied Student

 Beiträge: 29 Registriert: 03.02.2006
|
erstellt am: 10. Feb. 2006 01:06 <-- editieren / zitieren --> Unities abgeben:         
Hallo Didi, bei mir wird aber "Insert" und nicht "Viewport" angezeigt. Und ueber den Begriff "Insert" wird in der Zeichnung schon was veraendert, so dass der Frame mitveraendert wird. Kann ich den Frame ueber einen speziellen Gruppencode aus der Gruppe "Insert" ansprechen und wenn, wie. Ich hab es mal so versucht: Dim a_Type(0) As Integer Dim a_value(0) As Variant a_Type(0) = 66 a_value(0) = "Insert" a_Sset.Select acSelectionSetAll, , , a_Type, a_value Jedoch funktioniert das nicht. sobald du den Gruppencode ueber "10" aenderst, muss a_Type und a_value anderst definiert werden, jedoch weis ich nicht wie. ich weis auch nicht, ob das ueberhaupt eine Loesung giebt, wenn der Frame als "Insert" angezeigt wird. Danke fuer deine Hilfe. Gruss, Florian Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Goofy007 Mitglied Vermessungstechniker
  
 Beiträge: 578 Registriert: 06.11.2004 Map3D 2018 und Civil3D 2018
|
erstellt am: 10. Feb. 2006 07:49 <-- editieren / zitieren --> Unities abgeben:          Nur für flori555
|
flori555 Mitglied Student

 Beiträge: 29 Registriert: 03.02.2006
|
erstellt am: 10. Feb. 2006 08:25 <-- editieren / zitieren --> Unities abgeben:         
Hallo Didi, mit Blocks hab ich noch nie gearbeitet. Kannst du mir vielleicht sagen wie ich da vorgehen muss. Vielleicht kannst du es mir sogar an meinem oder einem aehnlichen Code zeigen. Noch ein weiteres kleines Problem. Bin mir da nicht sicher ob man das loesen kann. Wenn ich eine Bezugsnummer (Kreis mit einer Zahl, wo auf eine Tabelle bezug genommen wird, die Tabelle wird normalerweise ueber dem Beschriftungsfelt gesetzt.) zeichne, wird der Kreis "Insert" und die Pfeilspitze der Linie die vom Kreis weg fuehrt ebenfalls "insert" jedoch die Linie, die den Kreis und die Pfeilspitze verbindet wird als "Line" gesehen. Somit ist die Linie in einer anderen Farbe als der kreis und die Pfeilspitze. Die Linie ist aber in Continuous und Bylayer und somit ueber diese Felder nicht von den anderen Linien zu unterscheiden. Da weis ich echt nicht weiter. Hat da einer einen Rat fuer mich. Gruss, Florian Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |

| |
Goofy007 Mitglied Vermessungstechniker
  
 Beiträge: 578 Registriert: 06.11.2004 Map3D 2018 und Civil3D 2018
|
erstellt am: 10. Feb. 2006 09:30 <-- editieren / zitieren --> Unities abgeben:          Nur für flori555
Hallo Florian, Wenn du noch nie mit Blöcken zu tun hattest und den Unterschied zwischen line und insert nicht kennts, dann kann ich dir nur empfehlen dich mal näher mit den Grundlagen von Autocad zu beschäftigen bevor du weiterprogrammiert. Du solltest dich auch gleich mal mit Themen wie Prototypen,Filter und Layerkonvertierung beschäfigen. Ich habe den verdacht, dass du da einiges Programmieren willst, was gar nicht nötig ist. z.B könntest du einen Prototypen erzeugen, welcher alle gewünschten Layer mit der richtigen Definition enthält, dann must du die ja nicht mittels VBA erzeugen. Ich muss mich aus Zeitgründen nun leider aus dieser Diskussion ausklicken, wünsch dir aber noch viel Erfolg. Werd ev. nächste Woche wieder mal reinschauen. mfg didi Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |