Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  AutoCAD VBA
  Block einfügen

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
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



Sehen Sie sich das Profil von InesP an!   Senden Sie eine Private Message an InesP  Schreiben Sie einen Gästebucheintrag für InesP

Beiträge: 66
Registriert: 23.08.2004

Win XP
AutoCAD 2004
Office 2000

erstellt am: 04. Apr. 2005 11:02    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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.


Sehen Sie sich das Profil von Huebi an!   Senden Sie eine Private Message an Huebi  Schreiben Sie einen Gästebucheintrag für Huebi

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für InesP 10 Unities + Antwort hilfreich

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



Sehen Sie sich das Profil von InesP an!   Senden Sie eine Private Message an InesP  Schreiben Sie einen Gästebucheintrag für InesP

Beiträge: 66
Registriert: 23.08.2004

Win XP
AutoCAD 2004
Office 2000

erstellt am: 05. Apr. 2005 08:32    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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.


Sehen Sie sich das Profil von Huebi an!   Senden Sie eine Private Message an Huebi  Schreiben Sie einen Gästebucheintrag für Huebi

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für InesP 10 Unities + Antwort hilfreich

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



Sehen Sie sich das Profil von InesP an!   Senden Sie eine Private Message an InesP  Schreiben Sie einen Gästebucheintrag für InesP

Beiträge: 66
Registriert: 23.08.2004

Win XP
AutoCAD 2004
Office 2000

erstellt am: 05. Apr. 2005 10:00    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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.


Sehen Sie sich das Profil von Huebi an!   Senden Sie eine Private Message an Huebi  Schreiben Sie einen Gästebucheintrag für Huebi

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für InesP 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von ollibaer2004 an!   Senden Sie eine Private Message an ollibaer2004  Schreiben Sie einen Gästebucheintrag für ollibaer2004

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für InesP 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von ollibaer2004 an!   Senden Sie eine Private Message an ollibaer2004  Schreiben Sie einen Gästebucheintrag für ollibaer2004

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für InesP 10 Unities + Antwort hilfreich

ahh fehler

das erste set blockref muss natürlich so heissen

Set blockref = ThisDrawing.ModelSpace.InsertBlock(einfuege, name, 1, 1, 1, 0)

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Huebi
Mitglied
Vermessungsing.


Sehen Sie sich das Profil von Huebi an!   Senden Sie eine Private Message an Huebi  Schreiben Sie einen Gästebucheintrag für Huebi

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für InesP 10 Unities + Antwort hilfreich

Servus Olibaer,

netter Code. Nur was hat das mit dem Thema zu tun? Irgendwie erschließt sich mir das nicht *lach*.

------------------
Schaun ma mal, dann seng ma scho.... 

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

ollibaer2004
Mitglied
Dipl. Ing. Versorgungstechnik


Sehen Sie sich das Profil von ollibaer2004 an!   Senden Sie eine Private Message an ollibaer2004  Schreiben Sie einen Gästebucheintrag für ollibaer2004

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für InesP 10 Unities + Antwort hilfreich

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



Sehen Sie sich das Profil von InesP an!   Senden Sie eine Private Message an InesP  Schreiben Sie einen Gästebucheintrag für InesP

Beiträge: 66
Registriert: 23.08.2004

Win XP
AutoCAD 2004
Office 2000

erstellt am: 05. Apr. 2005 11:42    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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.


Sehen Sie sich das Profil von Huebi an!   Senden Sie eine Private Message an Huebi  Schreiben Sie einen Gästebucheintrag für Huebi

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für InesP 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von ollibaer2004 an!   Senden Sie eine Private Message an ollibaer2004  Schreiben Sie einen Gästebucheintrag für ollibaer2004

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für InesP 10 Unities + Antwort hilfreich

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



Sehen Sie sich das Profil von InesP an!   Senden Sie eine Private Message an InesP  Schreiben Sie einen Gästebucheintrag für InesP

Beiträge: 66
Registriert: 23.08.2004

Win XP
AutoCAD 2004
Office 2000

erstellt am: 05. Apr. 2005 13:38    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo Olli,
ich probiere Deine Variante gleich heute abend aus, mein Schreibtisch wurde gerade unter Papierbergen begraben. Trotzdem schon mal 10Unities für Dich. Danke!
Gruß Ines

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2024 CAD.de | Impressum | Datenschutz