Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  AutoCAD VBA
  Block sprengen und Inhalt auswählen

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
Autor Thema:  Block sprengen und Inhalt auswählen (2747 mal gelesen)
otm
Mitglied
Bauingenieur


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

Beiträge: 167
Registriert: 26.08.2009

MS Win 10
AutoCAD Civil 3D 2023
VBA Enabler 2023
MS Access Database Enginge X64
MSO 365 (64bit)

erstellt am: 11. Jun. 2015 16:40    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 liebes Forum,

ich habe mit VBA einen Block eingefügt (Punkt, Richtung), der nur aus einer Multiführungslinie besteht.
Diesen hab ich gesprengt.

Und jetzt müsste ich diese Multiführungslinie auswählen, sodass die blauen Griffe sichtbar sind.
Optimal wäre, wenn dann noch der Griff am MText-Feld gleich an der Mouse hängen würde, damit ich die Schrift korrekt platzieren kann.

Wie kann lässt sich das programmieren?

Vielen Dank
für Eure Hilfe


------------------
Grüße aus München
Christian

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

otm
Mitglied
Bauingenieur


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

Beiträge: 167
Registriert: 26.08.2009

MS Win 10
AutoCAD Civil 3D 2023
VBA Enabler 2023
MS Access Database Enginge X64
MSO 365 (64bit)

erstellt am: 16. Jun. 2015 21: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

Liebe Forum,

vielleicht habe ich meine Frage nicht genau genug formuliert.

Ich habe einen Block, der nur aus einer Multiline mit Textinhalt besteht per VBA eingefügt und gesprengt.
Jetzt würde ich gerne das, was von der Sprengung übrig bleibt, nämlich die Multilinie, auswählen und den Griff, der am Textfeld hängt an den Mousezeiger hängen, um dann eine neue Position für das Textfeld eingeben zu können. Der Strich am Textfeld soll dort bleiben wo er ist.

Wie kann ich auf die Objekte, die nach einer Sprengung aus einem Block entstehen, zugreifen bzw. diese auswählen?
Wie kann ich die Griffe sichtbar machen?
Und wie kann ich dann den "richtigen" Griff an den Mousezeiger hängen?

Stichpunkte würden mir schon weiterhelfen, dann kann ich selber weitersuchen.

------------------
Grüße aus München
Christian

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

KlaK
Ehrenmitglied V.I.P. h.c.
Dipl. Ing. Vermessung, CAD- und Netz-Admin



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

Beiträge: 2624
Registriert: 02.05.2006

AutoCAD LandDesktop R2 bis 2004
Civil 3D 2005 - 2022
Plateia, Canalis
Visual Basic

erstellt am: 16. Jun. 2015 23:41    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 otm 10 Unities + Antwort hilfreich

Hallo Christian,

vermutlich liegt es daran, dass Dein Vorhaben nicht ganz banal ist und eine Lösung mit VBA fast unmöglich.
Kann mich daran erinnern dass ein ähnliches Vorhaben hier schon einmal diskutiert wurde, konnte aber den Beitrag noch nicht finden. Aber ich glaube damals mußte es dann über Lisp-code gelöst werden.

Außerdem ist es immer hilfreich eine Beispielzeichnung und den bisherigen Code zu haben. Ein Bild (Skizze) sagt manchmal mehr als eine unverständliche Erklärung. So ganz klar ist mir noch nicht was Du wirklich vor hast. Warum muß die Multilinie mit Griffen markiert sein während der Text am Mauszeiger verschoben wird?

Wenn Du den Block zerlegt hast, müßten die neuen Objekte die letzten Elemente der ModelSpace.item()-Liste sein
( ThisDrawing.ModelSpace.Item(ThisDrawing.ModelSpace.Count - 1) = letztes Element )
In Deinem Fall also die letzten beiden Elemente.

Ebenfalls unklar ist die Linie die zum Text führen soll. Ist diese Linie eine Multilinie oder eine Multiführungslinie zum Text im Block? Deinem ersten Beitrag nach bin ich hier von einer normalen Führungsbemaßung ausgegangen ( AcadLeader mit AnnotationObject )

Grüße
Klaus 

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

Ingenieur Studio HOLLAUS
Mitglied
CAD / CAFM / GIS Beratung-Programmierung-Schulung


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

Beiträge: 1049
Registriert: 06.11.2008

Autocad 2 bis Autocad 2020 (+Map3D, +Civil3D, +Infraworks)
RKV .... CAFM+mehr
HMap ... Vermessung und Verkehr
OoC .... Raumplanung
CBox ... Tools für AutoCAD und BricsCAD (kostenfrei)

erstellt am: 17. Jun. 2015 00:01    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 otm 10 Unities + Antwort hilfreich

Wenn der Block im Modellbereich explodiert werden sollte, dann kann man sich vor dem Explodieren den Wert ModelSpace.Count merken, dann EXPLODE durchführen und dann wiederum ModelSpace.Count heranziehen (der ja jetzt größer sein müsste). Nun hat man die Elemente im ModelSpace über den Index an der Hand.

Aber generell stimme ich zu, wenn es einen Block mit spezieller Ausführung gibt, und schon einen Code, wie der Block eingesetzt/explodiert wird, dann fällt eine Antwort jedenfalls leichter (und gezielter) aus, wenn man sich ansehen kann, was Du tatsächlich hast. Dann wird aus "Raten": "beraten" 

------------------


www.cars4fun.at

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

KlaK
Ehrenmitglied V.I.P. h.c.
Dipl. Ing. Vermessung, CAD- und Netz-Admin



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

Beiträge: 2624
Registriert: 02.05.2006

AutoCAD LandDesktop R2 bis 2004
Civil 3D 2005 - 2022
Plateia, Canalis
Visual Basic

erstellt am: 17. Jun. 2015 09: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 otm 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von Ingenieur Studio HOLLAUS:
Wenn der Block im Modellbereich explodiert werden sollte, dann kann man sich vor dem Explodieren den Wert ModelSpace.Count merken, dann EXPLODE durchführen und dann wiederum ModelSpace.Count heranziehen (der ja jetzt größer sein müsste).

Nur wenn der ehemalige Block mehr als ein Element enthält

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

Ingenieur Studio HOLLAUS
Mitglied
CAD / CAFM / GIS Beratung-Programmierung-Schulung


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

Beiträge: 1049
Registriert: 06.11.2008

Autocad 2 bis Autocad 2020 (+Map3D, +Civil3D, +Infraworks)
RKV .... CAFM+mehr
HMap ... Vermessung und Verkehr
OoC .... Raumplanung
CBox ... Tools für AutoCAD und BricsCAD (kostenfrei)

erstellt am: 17. Jun. 2015 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 otm 10 Unities + Antwort hilfreich

Zitat:
Nur wenn der ehemalige Block mehr als ein Element enthält
Hängt von der Explode-Methode ab!
Schicke ich den Befehl _EXPLODE mittels SendCommand ==> dann hast Du recht, denn die ursprüngliche Blockreference wird dabei vernichtet.
Wird jedoch im Code BlRef.Explode (also die Methode .Explode für BlockRefernces) angewendet, bleibt die BlockReference erhalten! Und da dies die bevorzugte/saubere Variante ist, würde ich meinen, dass ModelSpace.Count nach ".Explode" größer wäre als vorher (Ausnahme: der Block selbst hat keine Elemente erhalten oder wir sprechen nicht von ModelSpace  ).

------------------


www.cars4fun.at

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

KlaK
Ehrenmitglied V.I.P. h.c.
Dipl. Ing. Vermessung, CAD- und Netz-Admin



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

Beiträge: 2624
Registriert: 02.05.2006

AutoCAD LandDesktop R2 bis 2004
Civil 3D 2005 - 2022
Plateia, Canalis
Visual Basic

erstellt am: 17. Jun. 2015 13:06    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 otm 10 Unities + Antwort hilfreich

Seit wann ist das denn der Fall? Gerade getestet, Du hast recht der Block bleibt erhalten 
Ist mir bisher noch gar nicht aufgefallen aber ich benutze BlockRef.Explode eigentlich nie.
Wieder was dazu gelernt ...

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

cadffm
Ehrenmitglied V.I.P. h.c.
良い精神



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

Beiträge: 21533
Registriert: 03.06.2002

System: F1
und Google

erstellt am: 17. Jun. 2015 13:27    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 otm 10 Unities + Antwort hilfreich

Ist bei der entsprechenden VLisp-Funktion identisch geregelt, nur mal so am Rande erwähnt.

Quick&Dirty kann man halt die AutoCAD-Objektwahl nutzen, denke das war auch die oben erwähnte Richtung mit Lisp.
Denn die aufgelösten Objekte eines Explode-Vorganges sind alle im Auswahlsatz "Vorher" abgelegt.

------------------
CAD on demand GmbH - Beratung und Programmierung rund um AutoCAD

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

KlaK
Ehrenmitglied V.I.P. h.c.
Dipl. Ing. Vermessung, CAD- und Netz-Admin



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

Beiträge: 2624
Registriert: 02.05.2006

AutoCAD LandDesktop R2 bis 2004
Civil 3D 2005 - 2022
Plateia, Canalis
Visual Basic

erstellt am: 17. Jun. 2015 13:51    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 otm 10 Unities + Antwort hilfreich

Die Frage die sich mir schon die ganze Zeit stellt:
Warum wird ein Block eingefügt und gleich aufgelöst?

Kann man da nicht gleich die Führungslinie erstellen (2 x getPoint) und den Text als AnnotationObjekt programmintern dazufügen? Ob jetzt der Blockname anders ist oder der Textinhalt sollte doch keinen Unterschied machen ... (außer dass die Blocktabelle kleiner bleibt)

[Edit]
Wenn Du unbedingt Zugriff auf die Elemente eines aufgelösten Block brauchst, kannst Du auch über:

Code:

Dim ExplObjs as Variant
ExplObjs = oBlockRef.explode


diese in einer Item-Liste zur Verfügung haben
[/Edit]

[Diese Nachricht wurde von KlaK am 17. Jun. 2015 editiert.]

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

otm
Mitglied
Bauingenieur


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

Beiträge: 167
Registriert: 26.08.2009

MS Win 10
AutoCAD Civil 3D 2023
VBA Enabler 2023
MS Access Database Enginge X64
MSO 365 (64bit)

erstellt am: 17. Jun. 2015 16:55    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


MFL.png

 
Liebes Forum,

vielen Dank für die Tipps.
Die Antwort warum ich den Block einfüge und gleich auflöse ist folgende.

Ich muss den Text der Mulitführungslinie an einem Objekt (Line, PL, Arc) ausrichten.
Und da weiß ich nicht, wie ich das machen soll.
Außerdem steht im Textfeld bereits der Text drin, den ich haben möchte und der Abstand des Textfeldes zum Objekt soll grundsätzlich gleich sein.
Deshalb ist der geringste Aufwand den Block mit der einen Multiführungslinie einzufügen, die Richtung anzugeben und ihn dann zu sprengen.
Da dann aber manchmal der Abstand des Textes zum Objekt nicht passt, muss ich händisch nachrücken können.
Dazu muss ich die gesprengte Multiführungslinie anklicken, dann den Griff und dann den Text verschieben.
Und die Aktionen würde ich gerne automatisieren, damit ich, falls die Position ok ist nur ESC drücken muss.

Das ganze wird von vielen einzelnen Subs erledigt.
Der Block wird mit "BlkRef.Explode" gesprengt und wir sprechen vom Modelspace.
Im anhängenden Bild ist vielleicht zu verstehen, was ich möchte.

Danke für's Mitdenken und hoffentlich BEraten.

------------------
Grüße aus München
Christian

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

Soldnerkugel
Mitglied



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

Beiträge: 131
Registriert: 29.01.2010

Win 7, AutoCAD Civil 3D 2015, SketchUp, CarlsonSurvCE

erstellt am: 27. Jul. 2015 16:12    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 otm 10 Unities + Antwort hilfreich

Schon ein bisserl her dieses Thema, ich hatte da auch mal Fragen bzgl. Block sprengen in VBA, falls du das Problem immer noch hast: evtl hilft das hier weiter
http://forum.cad.de/foren/ubb/Forum259/HTML/002107.shtml

entgegen dem Anschein in diesem Thread, konnte ich mein Problem dann doch noch lösen (...und auch noch einige andere)
Mir hat v.a. geholfen, dass die Blockreferenz auch nach dem Sprengen immer noch vorhanden ist, ich hab' dann lediglich nachdem ich an die Informationen gekommen bin, dich gebraucht habe, die Objekte gelöscht, die keine Blockreferenz waren.
Die beim Sprengen erstellte Tabelle lässt sich mit der Eigenschaft .EntityType gezielt nach bestimmten Objekten durchsuchen. Einfach die Tabelle durchlaufen lassen und bei der richtigen Eigenschaft .EntityType abfragen. Meine Blöcke enthalten durchaus mehr als nur ein oder zwei Objekte, also funktioniert's auch bei komplexeren Fragestellungen

bei mir schaut das dann z.B. so aus

Code:

For Each oBlckRefP In oSSetRacksP
        varTab = oBlckRefP.Explode
        For i = LBound(varTab) To UBound(varTab)
            If varTab(i).EntityType = 19 Then ' Hier .EntityTpe angeben
                ...
                End If
            End If
        Next
        ' explodierte Elemente löschen
        For i = LBound(varTab) To UBound(varTab)
            varTab(i).Delete
        Next i
        varTab.Delete
        varTab.Erase
        ...
        Exit For
    Next

P.S.: Codeschnipsel nicht vollständig

------------------

http://www.stupidedia.org/stupi/Rechter_Winkel

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

rexxitall
Mitglied
Dipl. -Ing. Bau


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

Beiträge: 266
Registriert: 07.06.2013

Various: systems, Operating systems, cad systems, cad versions, programming languages.

erstellt am: 27. Okt. 2015 14:17    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 otm 10 Unities + Antwort hilfreich

Naja ich würd den Text und das Referenzobjekt auslesen (Selectionset)
Anhand der Einfügepunkte von den Elementen lässt sich mit mäßigem Mathematischen Aufwand der gewünschte Referenzpunkt ermitteln.

Bei der Linie sind das STARTPOINT und ENDPOINT.
Bei nem ARC ist es CENTER(point?)


Nun würd ich für uralt ACAD einen Dynablock mit Textattribut machen bei dem sich die Position des Führungspfeil anordnen lässt.
(Diesen dann einfügen)

Für neuere Versionen einen MLEADER prorammtechnisch erstellen.

Den Text hast du ja ausgelesen, den kann man somit in das ganze als Attributinhalt oder Text einpflegen.
So keine Fehler aufgetaucht sind das alte Textobjekt löschen.

Bischen rustikal aber einfach 

------------------
Wer es nicht versucht, hat schon verlorn 
Und bei 3 Typos gibts den vierten gratis !
<<< for sale !

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)2023 CAD.de | Impressum | Datenschutz