| |  | 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 PRO Elite™ High Endurance microSD-Flash-Speicherkarten für Videoüberwachung und kontinuierliche Aufzeichnung, eine Pressemitteilung
|
Autor
|
Thema: Gruppen bilden und löschen (3361 mal gelesen)
|
Stefan1905 Mitglied Dipl.-Ing.

 Beiträge: 18 Registriert: 07.01.2009 XP prof 5.1.2600 SP3 Build 2600 Prozessor:x86/15/1/2 Genuine 1700 MHz AUTOCAD MECHANICAL 2006 OFFICE 2003
|
erstellt am: 25. Mrz. 2009 14:28 <-- editieren / zitieren --> Unities abgeben:         
Hallo zusammen, Ich suche eine Möglichkeit, Autocadelemente, die mit VBA erzeugt wurden, anschließend in einer Gruppe zusammenzufassen (Elemente aber nicht durch Benutzer auzuwählen!). Der Name der Gruppe wird als Attribut in einem anderen Block gespeichert, ist also zu einem späteren Zeitpunkt abrufbar. Geschieht dies, soll die Gruppe und deren Elemente aus der Zeichnung gelöscht werden. Ich arbeite mit dem Buch AUTOCAD-programmieren mit VBA, komme jedoch nicht klar. Gruß Stefan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Stelli1 Moderator Verm.-Ing.
    
 Beiträge: 1526 Registriert: 17.08.2005 Map 2000-2014, Rasterdesign, MapGuide, Autodesk Topobase, VS6, VS.net 2013
|
erstellt am: 25. Mrz. 2009 16:12 <-- editieren / zitieren --> Unities abgeben:          Nur für Stefan1905
Hallo Stefan, Zitat: Original erstellt von Stefan1905: Hallo zusammen, Ich suche eine Möglichkeit, Autocadelemente, die mit VBA erzeugt wurden, anschließend in einer Gruppe zusammenzufassen (Elemente aber nicht durch Benutzer auzuwählen!). Der Name der Gruppe wird als Attribut in einem anderen Block gespeichert, ist also zu einem späteren Zeitpunkt abrufbar. Geschieht dies, soll die Gruppe und deren Elemente aus der Zeichnung gelöscht werden. Ich arbeite mit dem Buch AUTOCAD-programmieren mit VBA, komme jedoch nicht klar.Gruß Stefan
Was hat du denn vor ? Mit welchem Programm (+Version) arbeitest du ? Und was hast du bereits gemacht ? Ich sehe im Moment noch nicht was du wie vor hast. Überleg doch nochmal was du erreichen willst. Gruppen anlegen und sprengen geht schon. Nur was wird in eine Gruppe zusammengefasst. 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 |
Stefan1905 Mitglied Dipl.-Ing.

 Beiträge: 18 Registriert: 07.01.2009 XP prof 5.1.2600 SP3 Build 2600 Prozessor:x86/15/1/2 Genuine 1700 MHz AUTOCAD MECHANICAL 2006 OFFICE 2003
|
erstellt am: 26. Mrz. 2009 08:25 <-- editieren / zitieren --> Unities abgeben:         
Hallo Stelli, im Anhang die Angaben zu meinem Rechner und VB. Das dritte Bild zeigt eine Förderstrecke, welche sich aus Einzelementen zusammensetzt. (Das Programm dazu habe ich gemacht.) Nun müssen die Förderer Positioniert werden, d.h. sie müssen mit einem Anstrich und einem Ballon mit Positinsnummer versehen werden. Im Verlauf der Projektierung ändert sich mitunter die Förderstrecke, so daß anschließend eine neue Positionierung erforderlich ist. Dazu muß der Ballon und Anstrich entfernt und der neue - mit neuer Positionsnummer gezeichnet werden. Um das zu erreichen, möchte ich Anstrich und Ballon in einer Gruppe zusammenfassen und den Namen der Gruppe als Attribut eines Förderer abspeichern. Wird nun der Förderer im Rahmen der Neupositionierung angeklickt, sollen alle in der Gruppe zusammengefaßten Elemente gelöscht, der neue Anstrich/Ballon gezeichnet und wieder in einer neuen Gruppe zusammengefaß werden. Mein Problem: Wie kann ich Anstrich und Ballon, die gerade mit VBA gezeichnet wurden, nur mit VB-Mitteln (nicht als Bediener) zu einer Gruppe zusammenfassen? Wie kann man die zu einer benannten Gruppe zusammengefaßten Elemente (mit VB-Mitteln!) löschen? (Nicht nur die Gruppe auflösen.) Gruß! Stefan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 26. Mrz. 2009 09:52 <-- editieren / zitieren -->
Hi Stefan, Du zeigst noch immer (wie Wilfried schon angedeutet hat) keinen Code, an dem wir ansetzen können, sprich wir wissen nicht, wie weit Du gekommen bist und an welcher Zeile Du hängst. Mach mal ein CodeSchnippsel oder Dein vb/dvb-File als Anhang. Die Erklärung dahinter sollte auch so verständlich sein: Wenn wir Dir helfen, dann möchten wir nicht auch noch die Zeit investieren müssen, die ganze Basis zu machen, um erst mal dorthin zu kommen. Du sagst auch aus: '...nur mit VB-Mitteln (nicht als Bediener) ...' und damit gehe ich einen Schritt weiter, wozu denn dann als Gruppe? Denn Gruppen sind in der Programmierung relativ schwierig zu bearbeiten (z.B. 'suche alle Elemente, die zu einer Gruppe gehören' ist schon nervenaufreibend und zeitintensiv). Da hätte ich mal ein paar andere Ideen (oder welchen Grund gibt es, den wir nicht kennen, der Dich ev. zu Gruppen zwingt?): a) mach als allem (Förderstreckenteil, Ballon) einen Block mit Positionsnummer als Attribut (ich gehe auch gleich einen Schritt weiter, ich nehme an, dass > 90% der Förderstreckenteile fertige Elemente sind, da wäre das als Block sowieso vorteilhafter. b) wenn nicht Förderstreckenblöcke, dann mach zumindest aus Ballon und Streckenpositionsnummer einen Block und an diesen Block hängst Du mit EED (Extended Entity Data) alle Handles der Geometrie des Förderstreckenteils. Damit brauchst Du nie Gruppen durchsuchen, Dich um Gruppennamensangaben, Datenaustausch bei kopieren von Teilen in eine andere Zeichnung, ... auseinandersetzen, das geht dann einfach. - alfred - ------------------ www.hollaus.at |
Stefan1905 Mitglied Dipl.-Ing.

 Beiträge: 18 Registriert: 07.01.2009 XP prof 5.1.2600 SP3 Build 2600 Prozessor:x86/15/1/2 Genuine 1700 MHz AUTOCAD MECHANICAL 2006 OFFICE 2003
|
erstellt am: 26. Mrz. 2009 11:03 <-- editieren / zitieren --> Unities abgeben:         
Hallo Alfred, hier erst mal Programm-Text Sub ZeiBalloon(Inhalt As String) ' Zeichnen des Balloons Dim Epkt As Variant ' Einfügepunkt Dim LineObj As AcadLine ' Führungslinie Dim Container As AcadBlock ' Balloon Dim ContainerRef As AcadBlockReference ' Referenz zum Balloon Dim Stamp As Date ' Datums- und Zeitstempel Dim TI As String * 6 ' Positionsnummer Dim tAtts As Variant ' Attribute Dim GruNamNew As String ' neuer Gruppenname Dim NewGroup As AcadGroup ' neue Gruppe Dim GruNamOld As String ' alter Gruppenname (aus Attributen des Förderers) Dim GruObj(1) As AcadEntity ' 2 Objekte der neuen Gruppe (Balloon mit Position und F-Linie) ' Balloonlayer einschalten Dim BLayer As AcadLayer Dim BLayerTx As AcadLayer Set BLayer = ThisDrawing.Layers(LAY_BALL) With BLayer .Freeze = False .LayerOn = True .Lock = False End With Set BLayerTx = ThisDrawing.Layers(LAY_BALLTX) With BLayerTx .Freeze = False .LayerOn = True .Lock = False End With On Error Resume Next ' Förderername = Position TI = Inhalt ' Positionsnummer auf 6 Zeichen begrenzen ' Einfügepunkt angeben Epkt = ThisDrawing.Utility.GetPoint(, vbCr & "Startpunkt Führungslinie: ") If Err.Number = 0 Then ' Organisation des Blocknamens des Balloons Stamp = Now ' warten bis sich die Zeit ändert Do Loop While Now = Stamp Stamp = Now ' Blockname des Ballons BloNam = "POS_" & LogName & "_" & Format(Stamp, "YYYYMMDDHHMMSS") ' Gruppenname Ballon und Linie (neu) GruNamNew = "GRU_" & LogName & "_" & Format(Stamp, "YYYYMMDDHHMMSS") ' Prüfen, ob schon ein Gruppenname vorhanden ist GruNamOld = BloAttrF(17).TextString ' (aus Fördererattributen) If GruNamOld <> "" Then ' Eintrag vorhanden. vorhandenen Ballon (Gruppe) Löschen: ThisDrawing.Groups.Item(GruNamOld).Delete ' hiermit wird nur die Gruppe aufgelöst, ' nicht die Elemente gelöscht If Err <> 0 Then MsgBox "Balloon " & GruNamOld & " nicht in Zeichnung enthalten." End If Else ' Kein Eintrag --> Noch kein Ballon vorhanden, es muß nicht gelöscht werden End If ' Gruppe erzeugen Set NewGroup = ThisDrawing.Groups.Add(GruNamNew) Dim Handle As String Handle = NewGroup.Handle ' ich weiß nicht ob das nötig ist ' Blockreferenz (Positionsrahmen und einfügen Set Container = ThisDrawing.Blocks.Add(Epkt, BloNam) ' Oval (mit Attribut) in Container fügen Set ContainerRef = Container.InsertBlock(Epkt, "PosBlk", GFBelt, GFBelt, 1, 0) ' Text festlegen tAtts = ContainerRef.GetAttributes tAtts(0).TextString = TI ' Container in Zeichnung einfügen Set ContainerRef = ThisDrawing.ModelSpace.InsertBlock(Epkt, BloNam, 1, 1, 1, 0) ContainerRef.Layer = LAY_BALL ' verschieben des Balloons Call ThisDrawing.SendCommand("_move" & vbCr & "(handent """ & ContainerRef.Handle & """)" & vbCr & vbCr & getPntStr(Epkt) & vbCr) ' Block neu positioniert ' Objekt zur Gruppe zufügen ????? Set GruObj(0) = Container.Item(Container.NAME) ' Hier klemmt die Säge !!!!! ' neuer Einfügepunkt bei _move geholt und damit die Linie machen Set LineObj = ThisDrawing.ModelSpace.AddLine(Epkt, ContainerRef.insertionPoint) LineObj.Layer = LAY_BALL Set GruObj(1) = LineObj.Item(LineObj) ' Hier klemmt die Säge !!!!! NewGroup.AppendItems GruObj ' Punkt zeichnen --> noch schreiben ' Dim AcSSet As AcadSelectionSet ' AcSSet.AddItems (Container.NAME) ' Eintrag des Gruppennamens in Fördererattribute des angeklickten Förderers unter Balloon BloAttrF(17).TextString = NewGroup.NAME ' Die Elemente dieser Gruppe ' möchte ich später löschen können ' X-Data schreiben ' Xdata(1) = TI ' LineObj.SetXData XdataType, Xdata ' LineObj.Update Else MsgBox vbNewLine & "keinen Startpunkt angegeben" & vbCr End If On Error GoTo 0 End Sub Zum Zeichnen des Balloons: Ich möchte den Anstrich und Balloon nicht in einen Block fügen, weil es dann nur einen (!!) Einfügepunkt gibt.Ich möchte aber die Lage des Balloons händisch über Griffe verändern können und den Anfangspunkt des Anstrichs auf seinen Startpunkt belassen (Gummiband). So bin ich auf Gruppe gekommen. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 26. Mrz. 2009 11:06 <-- editieren / zitieren -->
Hi, Code schau ich mir an, zu Deinem: Zitat: weil es dann nur einen (!!) Einfügepunkt gibt.Ich möchte aber die Lage des Balloons händisch über Griffe verändern können und den Anfangspunkt des Anstrichs auf seinen Startpunkt belassen
da wären doch noch die dynamischen Blöcke!!! - alfred - ------------------ www.hollaus.at |
Stefan1905 Mitglied Dipl.-Ing.

 Beiträge: 18 Registriert: 07.01.2009 XP prof 5.1.2600 SP3 Build 2600 Prozessor:x86/15/1/2 Genuine 1700 MHz AUTOCAD MECHANICAL 2006 OFFICE 2003
|
erstellt am: 26. Mrz. 2009 11:22 <-- editieren / zitieren --> Unities abgeben:         
|
Ex-Mitglied
|
erstellt am: 26. Mrz. 2009 11:27 <-- editieren / zitieren -->
Hi Stefan, bevor wir jetzt das mit den Gruppen programmtechnisch machen, versuchen wir mal, das zeichentechnische zu durchforsten. Kannst Du dazu ev. eine Zeichnung mit ein paar Förderstreckenteilen und dazugehörige Beschriftungen als Beispiel uploaden? Ich hätte gerne die Zeichnungsstruktur festgehalten bevor programmtechnisch 5 mal geändert wird. Hintergrund dazu ist, dass ich i.d.R. vermeide, ein Rad zum zweiten mal zu erfinden, soll heissen, wenn AutoCAD-Standardfunktionalität schon mal vorhanden ist, dann braucht man dafür nicht programmieren. Bitte nur nicht falsch verstehen! Es geht nicht darum, Dich zu kontrollieren, sondern Deine Arbeit zu vereinfachen - alfred - ------------------ www.hollaus.at |
Stefan1905 Mitglied Dipl.-Ing.

 Beiträge: 18 Registriert: 07.01.2009 XP prof 5.1.2600 SP3 Build 2600 Prozessor:x86/15/1/2 Genuine 1700 MHz AUTOCAD MECHANICAL 2006 OFFICE 2003
|
erstellt am: 26. Mrz. 2009 12:17 <-- editieren / zitieren --> Unities abgeben:         
Hallo Alfred, ich sende Dir eine bereinigte Zeichnung. Mein Programm lädt eine Vorlagedatei, die atomisierte Elemente enhält, z.B. einen Fördererquerschnitt mit 1mm Länge, und andere Einzelelemente. Beim Zeichnen werden sie auf die entsprechende Größe extrudiert, gedreht und 3D gezeichnet. An den fertigen Förderer (als Block) werden Attribute angehangen. In der Entwurfsphase eines Fördererlayouts ist keine Positionierung erforderlich, erst dann, wenn ein Leistungsverzeichnis erstellt werden muß. Wird das Layout nun weiter verändert (zB Variantenuntersuchung), muß auch die Positionierung verändert werden und das muß "idiotensicher" gehen: alte Elemente automatisch entfernen, Positionierung des Balloons gut sichtbar, Prüfung der Positionsnummer, Ändern des Leistungsverzeichnisses in Excel, ... Stefan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 26. Mrz. 2009 12:33 <-- editieren / zitieren -->
Hi Stefan, schau mal da, ist Dein Ziel damit erfüllbar? (klick mal auf eine der wirr herumstehenden Blockreferenzen drauf und mach mal ein bisschen Bewegung mit den cyan-farbigen Griffen (dyn. Blöcke). - alfred - ------------------ www.hollaus.at |
Stefan1905 Mitglied Dipl.-Ing.

 Beiträge: 18 Registriert: 07.01.2009 XP prof 5.1.2600 SP3 Build 2600 Prozessor:x86/15/1/2 Genuine 1700 MHz AUTOCAD MECHANICAL 2006 OFFICE 2003
|
erstellt am: 26. Mrz. 2009 12:54 <-- editieren / zitieren --> Unities abgeben:         
|
Ex-Mitglied
|
erstellt am: 26. Mrz. 2009 13:29 <-- editieren / zitieren -->
Hi, ok, da hab isch scheinbar schneller auf OK geklickt als das Hirn nachgedacht hätte, sorry, anbei diesmal wirklich - alfred - ------------------ www.hollaus.at |
Stefan1905 Mitglied Dipl.-Ing.

 Beiträge: 18 Registriert: 07.01.2009 XP prof 5.1.2600 SP3 Build 2600 Prozessor:x86/15/1/2 Genuine 1700 MHz AUTOCAD MECHANICAL 2006 OFFICE 2003
|
erstellt am: 26. Mrz. 2009 14:01 <-- editieren / zitieren --> Unities abgeben:         
Danke Alfred, jetzt muß ich erst mal meine Denkdrüse bemühen, um die Idee in mein Projekt zu integrieren. Weiß noch nicht, wie ich das mit AUTOCAD 2006 mache. Ich melde mich später wieder. Nochmals Danke! Stefan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 26. Mrz. 2009 14:20 <-- editieren / zitieren -->
Hi Stefan, ich sehe keinen Grund, wieso das nicht mit 2006 genauso funktionieren könnte (möglicherweise ist die API fuer dyn. Blöcke noch weniger ausgepraegt, kann sein). Nachdem Du meine Zeichnung öffnen konntest, nehme ich an, dass Du zumindest zum Probieren schon eine neuere Acad-Version hast - für die Zukunft (damit die Antwortenden die Voraussetzungen kennen), füll bitte mal Deine Systeminfo aus. - alfred - ------------------ www.hollaus.at
[Diese Nachricht wurde von a.n. am 26. Mrz. 2009 editiert.] |

| |
Stefan1905 Mitglied Dipl.-Ing.

 Beiträge: 18 Registriert: 07.01.2009 XP prof 5.1.2600 SP3 Build 2600 Prozessor:x86/15/1/2 Genuine 1700 MHz AUTOCAD MECHANICAL 2006 OFFICE 2003
|
erstellt am: 26. Mrz. 2009 15:07 <-- editieren / zitieren --> Unities abgeben:         
|
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
 |