| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| Request a special discount on NVIDIA RTX 5000 Ada Generation GPU !, eine Pressemitteilung
|
Autor
|
Thema: Block einfügen (1743 mal gelesen)
|
InesP Mitglied
Beiträge: 66 Registriert: 23.08.2004 Win XP AutoCAD 2004 Office 2000
|
erstellt am: 04. Apr. 2005 11:02 <-- editieren / zitieren --> Unities abgeben:
Hallo Leute, ich bin bald am verzweifeln. Ich möchte per VBA einen Block in die Zeichnung einfügen. So weit, so gut. Sobald ich das Makro aber erneut starte, wird dieser Block zwar wieder eingefügt, aber gleichzeitig mit dem zuerst eingefügten Block zu einem Gesamtblock verbunden. Ich möchte aber jeden Block für sich haben, damit er separat bearbeitet werden kann (zB drehen, schieben). Wer kann mir helfen? Gruß Ines Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Huebi Mitglied Vermessungsing.
Beiträge: 107 Registriert: 08.01.2004 Intel Core Duo E6750@2.66GHz NVIDIA GeForce 8600 GT AutoCAD 2004, 2007, 2008 AcadMAP 2004 und 2007 Civil 3D 2008 ADT 2009
|
erstellt am: 04. Apr. 2005 14:00 <-- editieren / zitieren --> Unities abgeben: Nur für InesP
Servus Ines, es wäre vorteilhaft, wenn Du Deinen Programmcode mitpostest (als Anhang oder im Beitrag. Nur so kann man auch sehen, wo der Fehler steckt. Gruß Hübi ------------------ Schaun ma mal, dann seng ma scho.... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
InesP Mitglied
Beiträge: 66 Registriert: 23.08.2004 Win XP AutoCAD 2004 Office 2000
|
erstellt am: 05. Apr. 2005 08:32 <-- editieren / zitieren --> Unities abgeben:
Hallo Hübi, ich will mein Problem mal genauer an Hand eines Beispiel aus dem Entwicklerhandbuch deutlich machen: Sub Ch10_RedefiningABlock() ' Definieren des Blocks Dim blockObj As AcadBlock Dim insertionPnt(0 To 2) As Double insertionPnt(0) = 0 insertionPnt(1) = 0 insertionPnt(2) = 0 Set blockObj = ThisDrawing.Blocks.Add _ (insertionPnt, "CircleBlock") ' Hinzufügen eines Kreises zum Block Dim circleObj As AcadCircle Dim center(0 To 2) As Double Dim radius As Double center(0) = 0 center(1) = 0 center(2) = 0 radius = 1 Set circleObj = blockObj.AddCircle(center, radius) ' Einfügen des Blocks Dim blockRefObj As AcadBlockReference insertionPnt(0) = 2 insertionPnt(1) = 2 insertionPnt(2) = 0 Set blockRefObj = ThisDrawing.ModelSpace.InsertBlock _ (insertionPnt, "CircleBlock", 1#, 1#, 1#, 0) ZoomAll ' Neudefinieren des Kreises im Block ' und Aktualisieren der Blockreferenz circleObj.radius = 3 blockRefObj.Update End Sub Wenn ich dieses Makro ohne die Neudefinition starte, wird der Kreis ganz normal eingefügt. Starte ich das Makro ein 2.Mal, diesmal aber mit der Neudefinition, wird der neue Kreis zwar eingefügt, aber der neue Block besteht jetzt aus dem kleinen Kreis und dem großen Kreis. Es sollen aber beide getrennt,also jeder Kreis für sich, ein Block sein. Wahrscheinlich fehlt es da bei mir noch am Verständnis der Blockdefinition, insbesondere in Bezug auf den Blocknamen. Vielleicht könnt Ihr mir auf die Sprünge helfen, ich fange gerade erst an mich mit VBA zu beschäftigen. Gruß Ines Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Huebi Mitglied Vermessungsing.
Beiträge: 107 Registriert: 08.01.2004 Intel Core Duo E6750@2.66GHz NVIDIA GeForce 8600 GT AutoCAD 2004, 2007, 2008 AcadMAP 2004 und 2007 Civil 3D 2008 ADT 2009
|
erstellt am: 05. Apr. 2005 09:20 <-- editieren / zitieren --> Unities abgeben: Nur für InesP
Servus Ines, ich glaube, daß Du AcadBlock und AcadBlockReference durcheinander bringst (ist mir anfangs auch ein bisserl schwer gefallen). Ein AcadBlock wird (im Normalfall) einmal definiert als ein Zusammenschluß von verschiedenen AutoCAD Elementen. Der Block hat einen eindeutigen Namen. Ein neuer Block muß daher einen neuen Namen haben. Wenn Du das einmal gemacht hast, kannst Du diesen Block x-fach in die Zeichnung einfügen (AcadBlockReference - InsertBlock). Dabei kannst Du die Einfügeposition, die Drehung und die Skalierung in x, y, und z variiren. Guck Dir doch mal die Hilfe für den Befehl InsertBlock genauer an. Wenn der Block neu definiert wird, ändert sich natürlich das Layout der Inserts (der eingefügten BlockReferenzen). Gruß Hübi ------------------ Schaun ma mal, dann seng ma scho.... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
InesP Mitglied
Beiträge: 66 Registriert: 23.08.2004 Win XP AutoCAD 2004 Office 2000
|
erstellt am: 05. Apr. 2005 10:00 <-- editieren / zitieren --> Unities abgeben:
Hallo Hübi, danke für Deinen Rat. Also muß ich wohl jedesmal einen neuen Blocknamen vergeben, obwohl sich nur die Abmessungen ändern! Dann kann es aber passieren, das in großen Zeichnungen Hunderte von Blocknamen auftauchen, da viele geometrisch gleichaussehende Teile drin sind, die aber verschieden groß sind. Ich finde das sehr umständlich. Gibt es da keinen einfacheren Weg, der die Zeichnung nicht so aufbauscht? Gruß Ines Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Huebi Mitglied Vermessungsing.
Beiträge: 107 Registriert: 08.01.2004 Intel Core Duo E6750@2.66GHz NVIDIA GeForce 8600 GT AutoCAD 2004, 2007, 2008 AcadMAP 2004 und 2007 Civil 3D 2008 ADT 2009
|
erstellt am: 05. Apr. 2005 10:22 <-- editieren / zitieren --> Unities abgeben: Nur für InesP
Servus Ines, was definitiv nicht geht ist, daß Du die Blöcke ständig "umdefinierst". Was allerdings möglich ist, daß Du ein Insert unterschiedlich skalierst (z.B. x-Faktor = 2.78, y-Faktor=1, z-Faktor=1). Ob das allerdings das richtige in Deinem Fall ist, weiß ich nicht. Warum möchtest Du eigentlich Blöcke verwenden wenn sie nur einmal in der Zeichung auftauchen? Als Zusammenschluß mehrerer AutoCAD Elemente gibt's auch die Möglichkeit Gruppen zu bilden (was allerdings nicht weniger Aufwand ist). Außerdem spricht ja nichts gegen das verwenden von Blöcken. Ein "Aufbauschen" der Zeichnung ist das sicher nicht, eher eine Strukturierung. Gruß Hübi ------------------ Schaun ma mal, dann seng ma scho.... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
ollibaer2004 Mitglied Dipl. Ing. Versorgungstechnik
Beiträge: 54 Registriert: 28.06.2004 Athlon 64 4000 Windows Xp ADT7 + Rocad 7 http://tga4acad.de.vu
|
erstellt am: 05. Apr. 2005 10:56 <-- editieren / zitieren --> Unities abgeben: Nur für InesP
Hallo, versuch es mal so Dim einfuege As Variant Dim name As String Dim blockref As AcadBlockReference On Error GoTo errorhndl name = "Raum-NR" einfuege = ThisDrawing.Utility.GetPoint(, "Bitte den Einfügepunkt für Block " & name & " wählen") Set blockref = ThisDrawing.ModelSpace.InsertBlock(einfuege, importfile, 1, 1, 1, 0) errorhndl: If Err.Number = "-2145386445" Then MsgBox ("Der Block 'Raum-NR' ist nicht in dieser Zeichnung vohanden") Dim importfile As String importfile = "C:\RaumStmp\Raum-NR.dwg" Set blockref = ThisDrawing.ModelSpace.InsertBlock(einfuege, importfile, 1, 1, 1, 0) Else MsgBox (Err.Description) end if
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
ollibaer2004 Mitglied Dipl. Ing. Versorgungstechnik
Beiträge: 54 Registriert: 28.06.2004 Athlon 64 4000 Windows Xp ADT7 + Rocad 7 http://tga4acad.de.vu
|
erstellt am: 05. Apr. 2005 10:58 <-- editieren / zitieren --> Unities abgeben: Nur für InesP
|
Huebi Mitglied Vermessungsing.
Beiträge: 107 Registriert: 08.01.2004 Intel Core Duo E6750@2.66GHz NVIDIA GeForce 8600 GT AutoCAD 2004, 2007, 2008 AcadMAP 2004 und 2007 Civil 3D 2008 ADT 2009
|
erstellt am: 05. Apr. 2005 11:11 <-- editieren / zitieren --> Unities abgeben: Nur für InesP
|
ollibaer2004 Mitglied Dipl. Ing. Versorgungstechnik
Beiträge: 54 Registriert: 28.06.2004 Athlon 64 4000 Windows Xp ADT7 + Rocad 7 http://tga4acad.de.vu
|
erstellt am: 05. Apr. 2005 11:30 <-- editieren / zitieren --> Unities abgeben: Nur für InesP
wenn ich dass richtig verstanden habe, geht es darum einen block in die zeichnung einzufügen.. wenn der block nicht in der zeichnung vorhanden ist, wird er aus der datei nachgeladen, ansonsten nur eingefügt. dieser kann nun separat bearbeitet werden, so wie es InesP ganz oben haben wollte. (der name des blocks sollte natürlich schon bekannt sein und entspr. im code angepasst werden) oder bin ich ganz dabei %) tschau Olli Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
InesP Mitglied
Beiträge: 66 Registriert: 23.08.2004 Win XP AutoCAD 2004 Office 2000
|
erstellt am: 05. Apr. 2005 11:42 <-- editieren / zitieren --> Unities abgeben:
Hallo, vielen Dank nochmals. Ich hatte nur an die Dateigröße gedacht (je mehr Blockdefinitionen, desto größer die Datei) oder stimmt dieser Zusammenhang nicht? Ollibaer, Dein Programm hab ich gleich ausprobiert. Ich habe aber noch nicht rausgefunden, wie man die Unities verschickt. Deshalb hier nur ein einfaches Danke. Mit dieser Abfrage kann ich rausfinden, ob der Block schon vorhanden ist oder nicht. Wenn ja, dann benötige ich ja einen neuen Blocknamen. Wenn ich im Namen eine Nummerierung einbaue, kann ich dann mit der Item-Methode die letzte vorhandene Nummer bestimmen. Da muß ich wohl nochmal im Handbuch schmöckern. Bis später also, Gruß Ines Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Huebi Mitglied Vermessungsing.
Beiträge: 107 Registriert: 08.01.2004 Intel Core Duo E6750@2.66GHz NVIDIA GeForce 8600 GT AutoCAD 2004, 2007, 2008 AcadMAP 2004 und 2007 Civil 3D 2008 ADT 2009
|
erstellt am: 05. Apr. 2005 12:02 <-- editieren / zitieren --> Unities abgeben: Nur für InesP
Servus Ines, Zitat: Ich hatte nur an die Dateigröße gedacht (je mehr Blockdefinitionen, desto größer die Datei) oder stimmt dieser Zusammenhang nicht?
Die Datei wird nur unwesentlich größer, da zusätzlich zu den Elementen nur die Blockdefinition abgespeichert werden muß. Und ob die Elemente im Block oder im Modellbereich definiert sind ist im Prinzip größentechnisch gesehen egal. Zitat: Ich habe aber noch nicht rausgefunden, wie man die Unities verschickt
Da klickst Du oberhalb des Antwort-Beitrages nur auf die betreffende Ziffer im Kästechen (je nachdem, wieviele Us Du geben magst). Gruß Hübi ------------------ Schaun ma mal, dann seng ma scho.... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
ollibaer2004 Mitglied Dipl. Ing. Versorgungstechnik
Beiträge: 54 Registriert: 28.06.2004 Athlon 64 4000 Windows Xp ADT7 + Rocad 7 http://tga4acad.de.vu
|
erstellt am: 05. Apr. 2005 12:07 <-- editieren / zitieren --> Unities abgeben: Nur für InesP
Hi nochmal, evtl. hilft dir das hier: der code listet alle blöcke in deiner zeichnung auf, must nur noch vergleichen ob dein block in der zeichnung vorhanden ist. (bräuchtest ne userform mit einer listbox oder nimmst ein array) Private Sub CommandButton5_Click() Dim blockname As String Dim a As Integer Dim blocktotal As Integer ListBox1.Clear blocktotal = ThisDrawing.Blocks.count ReDim allenamen(blocktotal) As String For a = 0 To blocktotal - 1 blockname = ThisDrawing.Blocks.Item(a).name allenamen(a) = blockname If Not Mid$(blockname, 1, 1) = "*" Then ListBox1.AddItem blockname Next a End Sub Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
InesP Mitglied
Beiträge: 66 Registriert: 23.08.2004 Win XP AutoCAD 2004 Office 2000
|
erstellt am: 05. Apr. 2005 13:38 <-- editieren / zitieren --> Unities abgeben:
|