| |  | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte | | |  | PNY wird von NVIDIA zum Händler des Jahres gewählt – zum dritten Mal in Folge, eine Pressemitteilung
|
Autor
|
Thema: Blockreferenz auswählen (3668 mal gelesen)
|
GüSo Mitglied Elektrotechniker
 
 Beiträge: 141 Registriert: 22.01.2009 Windows 7 Professional SP1, AutoCAD 2011, Office 2013 Windows 10, Office2019
|
erstellt am: 19. Jan. 2010 09:00 <-- editieren / zitieren --> Unities abgeben:         
Hallo allerseits! Mit "thisdrawing.utility.getentity object, pickpoint,prompt" kann ich AutoCAD veranlassen, daß ich ein Objekt in der Zeichnung durch anklicken auswähle. Mein Problem ist, wie kann ich ein Objekt, genauer ein Blockreferenz-Objekt, über einen Punkt (pickpoint) auswählen ohne daß ich interaktiv anklicken muß? Ich will quasi den Pickpoint von "...getentity ..." vom Programm her vorgeben. Gruß Günter Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 19. Jan. 2010 09:07 <-- editieren / zitieren -->
Hi, >> über einen Punkt (pickpoint) auswählen überleg Dir das bitte gleich nochmals, mit Auswahl über Punkt (schau Dir dazu das SelectionSet an!) hast Du einige Voraussetzungen zu erfüllen, die oft mal nicht leicht sind: - die Blockreferenz muss am Bildschirm sichtbar sein - es dürfen in der Pickbox keine anderen Objekte auffindbar sein (betrifft Zoom-Faktor, betrifft übereinanderliegende Objekte, betrifft Blockreferenzen, die am gepickten Punkt keine Geometrie haben Viel Erfolg, - alfred - ------------------ www.hollaus.at |
GüSo Mitglied Elektrotechniker
 
 Beiträge: 141 Registriert: 22.01.2009 Windows 7 Professional SP1, AutoCAD 2011, Office 2013 Windows 10, Office2019
|
erstellt am: 19. Jan. 2010 10:03 <-- editieren / zitieren --> Unities abgeben:         
Hallo Alfred! Danke für die schnelle Antwort. Ich denke das ist die Lösung. Durch den inhaltlichen Hintergrund (Stromlaufpläne) ist sichergestellt, daß nicht zwei Symbole übereinander liegen. Aber wenn doch, so würde ich das doch merken, wenn im SelectionSet, das vorher keine Elemente enthielt, was natürlich sicher gestellt sein muß, mehr als ein Item enthalten ist. Oder? Außerdem müßte es doch möglich sein, dann mittels "Loop" über alle Einträge das entsprechende zu separieren? In diesem Zusammenhang werde ich wieder daran erinnert, daß ich vor langer, langer Zeit schon mal was mit SelectionSets hatte. Damals bin ich über die optionalen Filter (DXF-Gruppen-Codes) gestolpert. Es hatte sich aber sowieso erledigt, so daß ich das Thema nicht weiter verfolgte. Damals stolperte ich darüber, daß ich zum Beispiel keinen Gruppencode für ein bestimmtes Element , ich glaube Blockreferenz, fand. Meine Frage wäre: Kennst Du eine Quelle, z.B. Buch, in dem das erklärt ist wie diese zu verstehen sind? Gruß Günter
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 19. Jan. 2010 10:47 <-- editieren / zitieren -->
Hi, >> daß ich zum Beispiel keinen Gruppencode für ein bestimmtes Element , ich glaube Blockreferenz 'Glauben' hat in Fragestellungen mit Hoffnung zu tun, aber leider nicht mit 'Klarstellung' Wenn Du nach BlockReferenz suchst, dann: Code 0 ==> 'INSERT' Code 2 ==> <Blockname> >> Kennst Du eine Quelle, z.B. Buch, in dem das erklärt ist wie diese zu verstehen sind?
Hier im Forum die Suchfunktion nutzen (oder Google, kommst eh hier her ) und Du wirst sowohl Beispiele als auch Erklärungen finden. Die Hilfe ist auch (gerade in VBA) mit vielen Samples ausgestattet, und Bücher: gib mal >>>hier<<< Buch ein. - alfred - ------------------ www.hollaus.at [Diese Nachricht wurde von a.n. am 19. Jan. 2010 editiert.] |
GüSo Mitglied Elektrotechniker
 
 Beiträge: 141 Registriert: 22.01.2009 Windows 7 Professional SP1, AutoCAD 2011, Office 2013 Windows 10, Office2019
|
erstellt am: 19. Jan. 2010 15:54 <-- editieren / zitieren --> Unities abgeben:         
hi, ich habe, oder mußte, mich bisher nicht intensiv mit diesem Thema Gruppencodes befassen. Mit der im AutoCAD in der Hilfe vorhandenen numerisch sortierten Auflistung bin ich jedenfalls nicht glücklich geworden. Und das Beispiel aus der Hilfe ist in meinen Augen zu eng begrenzt. Ich füge es hier an und auch meine Fragen, damit wir nicht aneinander vorbei reden. '_____________________________________________ Sub Example_SelectAtPoint() ' This example adds objects to a selection set by identifying a point. ' At first all objects at the point are added to the selection set. Then ' only circle objects at the point are added to the selection set. ' Create the selection set Dim ssetObj As AcadSelectionSet Set ssetObj = ThisDrawing.SelectionSets.Add("TEST_SSET1") ' Add to the selection set all the objects that lie at point(6.8,9.4,0) Dim point(0 To 2) As Double point(0) = 6.8: point(1) = 9.4: point(2) = 0 ssetObj.SelectAtPoint point ' Add to the selection set all the Circles that lie at point (6.8,9.4,0) Dim gpCode(0) As Integer ('Warum nicht gpCode as integer?) Dim dataValue(0) As Variant gpCode(0) = 0 dataValue(0) = "Circle" ('müßte dann "BlockReference" heißen?) Dim groupCode As Variant, dataCode As Variant groupCode = gpCode dataCode = dataValue ssetObj.SelectAtPoint point, groupCode, dataCode End Sub '_____________________________________________ Woher weiß ich, daß ich Gruppencode 0 (Textzeichenfolge für den Elementtyp (fest)) nehmen muß und nicht 2 beispielsweise? Aber summa summarum hat mir der Vorschlag mit dem Selectionset weitergeholfen. 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: 20. Jan. 2010 15:42 <-- editieren / zitieren --> Unities abgeben:          Nur für GüSo
Hallo, die (DXF) Gruppencodes stehen auch in der Hilfe. Wenn du ein Beispielobjekt hast kannst du mit folgendem Befehl die Codes anzeigen lassen.
Code: (ENTGET (CAR (ENTSEL "Gruppencodes zeigen von:")))
Stelli------------------ Warum lisp'eln wenn's auch anders geht. www.ib-stelberg.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
GüSo Mitglied Elektrotechniker
 
 Beiträge: 141 Registriert: 22.01.2009 Windows 7 Professional SP1, AutoCAD 2011, Office 2013 Windows 10, Office2019
|
erstellt am: 21. Jan. 2010 11:58 <-- editieren / zitieren --> Unities abgeben:         
Hi Stelli, deinen Hinweis habe ich ausprobiert. Ich habe weitere Erkenntnisse gewonnen aber so richtig blicke ich noch nicht durch. Wenn man der Hilfe glaubt, ich zitiere: "Filterlisten werden aus Paaren von Argumenten gebildet. Das erste Argument kennzeichnet den Filtertyp (z. B. ein Objekt), und das zweite Argument gibt den zu filternden Wert an (z. B. Kreise). Der Filtertyp ist ein DXF-Gruppencode, durch den der zu verwendende Filter angegeben wird." Das hieße doch, daß ich als Filtertyp z.B. 0 angebe, d.h. es wird als nächstes der Name einer Objektklasse erwartet. Oder? Zweitens habe ich ein Problem damit, daß in der Hilfe steht Gruppencode 0 für Objekttyp. Wende ich deinen Beispielcode auf mein Muster an, so erhalte ich als Gruppencode für AcDbBlockReference den Code 100. (siehe angehängtes Beispiel) _______ Gruppencodes zeigen von: ((-1 . <Objektname: 7efa7558> ) (0 . "INSERT") (330 . <Objektname: 7ef9ffa8> ) (5 . "11B") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (100 . "AcDbBlockReference") (66 . 1) (2 . "BIN2V") (10 0.0 0.0 0.0) (41 . 1.0) (42 . 1.0) (43 . 1.0) (50 . 0.0) (70 . 0) (71 . 0) (44 . 0.0) (45 . 0.0) (210 0.0 0.0 1.0)) __________ "Bin2V" ist der Blockname, der wird aber nie übernommen, weder mit 100 noch mit 0 Ich will nicht nur diesen Block, sondern auch andere Blockreferenzen, die sich gegebenenfalls dort befinden auswählen. Übrigens der Beispielbefehl von dir, der auf der Befehlszeile eingegeben wird, wie nennt sich das? Güso Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 21. Jan. 2010 12:05 <-- editieren / zitieren -->
Hi, >> "Bin2V" ist der Blockname, der wird aber nie übernommen, weder mit 100 noch mit 0 Wieso 100, wieso 0? Der Blockname steht unter Code 2! Um alle Blockreferenzen zu finden mit dem gewünschten Namen sieht z.B. so aus:
Code: Dim tDxfCodes(1) As Integer Dim tDxfValues(1) As Variant tDxfCodes(0) = 0: tDxfValues(0) = "INSERT" 'alles was BlockReferenzen sind tDxfCodes(1) = 2: tDxfValues(1) = "BIN2V" 'Name 'BIN2V''und dann kannst Du mit diesem Filter die Selektion machen SSet.SelectAtPoint point, tDxfCodes, tDxfValues
HTH, - alfred - ------------------ www.hollaus.at [Diese Nachricht wurde von a.n. am 21. Jan. 2010 editiert.] |
GüSo Mitglied Elektrotechniker
 
 Beiträge: 141 Registriert: 22.01.2009 Windows 7 Professional SP1, AutoCAD 2011, Office 2013 Windows 10, Office2019
|
erstellt am: 21. Jan. 2010 13:01 <-- editieren / zitieren --> Unities abgeben:         
hi, nicht so schnell. Ich zitiere kurz die Hilfe: ----------------------------------------------- DXF-Codes für häufig verwendete Filter DXF-Code Filtertyp 0 Objekttyp (Zeichenkette) Z. B. “Line,” “Circle,” “Arc,” usw. 2 Objektname (Zeichenkette) ----------------------------- Ich interpretiere das so, daß Code 0 bedeutet die nachfolgende Angabe gibt einen Objekttyp an, beispielsweise AcDbBlockReference. Die 2 würde bedeuten: Die nachfolgene Angabe repräsentiert einen konkreten Objektnamen, beispielsweise "Bin2V". Wo liegt nun mein Fehler? GüSo
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 21. Jan. 2010 13:08 <-- editieren / zitieren -->
Hi, >> Ich interpretiere das so, daß Code 0 bedeutet die nachfolgende Angabe >> gibt einen Objekttyp an, beispielsweise AcDbBlockReference leider eben nicht. Schau Dir das Ergebnis oben aus dem entget an, da steht: (0 . "INSERT") ...und deswegen nicht 'AcDbBlockReference', sondern 'INSERT' >> Die 2 würde bedeuten: ....
...das siehst Du richtig. - alfred - ------------------ www.hollaus.at |
GüSo Mitglied Elektrotechniker
 
 Beiträge: 141 Registriert: 22.01.2009 Windows 7 Professional SP1, AutoCAD 2011, Office 2013 Windows 10, Office2019
|
erstellt am: 21. Jan. 2010 14:06 <-- editieren / zitieren --> Unities abgeben:         
Servus! Irgendwie bin ich scheinbar zu dämlich. Ich schicke mal den Codeschnipsel mit dem ich getestet habe. Von diesem Codeschnipsel nehme ich an, daß ich Alfreds Vorschlag umgesetzt habe. Es funktioniert aber bei mir nicht. --------------------------------------------------------- Sub TestHüllkurve() Dim ii As Long, Text As AcadText, Begrenzung(9) As Double, Min As Variant, Max As Variant Dim Objekt As AcadObject, Symbol As AcadBlockReference, Auswahl As AcadSelectionSet Dim PickPoint(0 To 2) As Double Dim gpCode(0 To 1) As Integer, mode As Integer, dataValue(0 To 1) As Variant 'PickPoint(1) = -27.5 'eventuell vorhandene Auswahlsätze löschen Do While ThisDrawing.SelectionSets.Count > 0 MsgBox ThisDrawing.SelectionSets.Item(ThisDrawing.SelectionSets.Count - 1).Name ThisDrawing.SelectionSets.Item(ThisDrawing.SelectionSets.Count - 1).Delete Loop Set Auswahl = ThisDrawing.SelectionSets.Add("AusgewählteObjekte") gpCode(0) = 0: gpCode(1) = 2 dataValue(0) = "INSERT" dataValue(1) = "BIN2V" Auswahl.SelectAtPoint PickPoint, gpCode, dataValue Auswahl.SelectAtPoint PickPoint MsgBox Auswahl.Count Set Symbol = Auswahl.Item(0) End Sub ------------------------------------ GüSo Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 21. Jan. 2010 14:15 <-- editieren / zitieren -->
Hi, mal in Kürze Bemerkungen dazu: >> Sub TestHüllkurve ... >>ThisDrawing.SelectionSets.Add("AusgewählteObjekte") Du tust gut daran, Funktionsnamen, Sub-Namen, Variablennamen, Objektnamen nicht mit Umlauten zu bestücken. >> Do While ThisDrawing.SelectionSets.Count > 0 ...
Vorsicht, es gibt in AutoCAD reservierte SelectionSet (z.B. 'PICKFIRST'), diese zu löschen kann lustige Ergbnisse bringen. Gleich dazu: 'lustig' ist genauso wie 'relativ' immer Ansichtssache. >> Es funktioniert aber bei mir nicht.
Neben den obigen Tips (potentielle Fehlerquellen) bei Selektion über Punkt, was ist 'es'? Wie äussert sich das? was funktioniert nicht? Fehlermeldung? ...? - alfred - ------------------ www.hollaus.at |
GüSo Mitglied Elektrotechniker
 
 Beiträge: 141 Registriert: 22.01.2009 Windows 7 Professional SP1, AutoCAD 2011, Office 2013 Windows 10, Office2019
|
erstellt am: 21. Jan. 2010 14:28 <-- editieren / zitieren --> Unities abgeben:         
Danke für die Hinweise, werde sie beachten. Zum Thema "Was funktioniert nicht?" Ich bekomme keine Fehlermeldungen. Das Programm wird also erstmal abgearbeitet. Mit "funktioniert nicht" meine ich, daß das Ergebnis nicht meinen Erwartungen entspricht. In meiner Testzeichnung habe ich auf dem Punkt 0,0,0 das Symbol "BIN2V" platziert und zusätzlich noch eine Linie von diesem Punkt aus gezeichnet. Erwartet habe ich, daß mit der angegebenen Filtereinstellung nur die Blockreferenz in den Auswahlsatz übernommen wird. Das ist aber nicht der Fall. Es wird nichts in den Auswahlsatz übernommen. Mit ..selectAtPoint ohne die Filter wird dann erwartungsgemäß die Linie übernommen, die ja nach dem BIN2V eingefügt wurde. Günter Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 21. Jan. 2010 14:34 <-- editieren / zitieren -->
Hi, >> Erwartet habe ich, daß mit der angegebenen Filtereinstellung >> nur die Blockreferenz in den Auswahlsatz übernommen wird Sollte auch, aber nur (siehe obige Hinweise), wenn die Blockreferenz ebenfalls auf dem Punkt 0,0,0 Geometrie hat (zumindest innerhalb der Pickbox, also damit auch bezogen auf den Zoom-Ausschnitt). Ist der Punkt 0,0,0 ausserhalb des Bildschirms, oder besteht der Block z.B. aus einem Rechteck, dass von -0.5,-0.5 nach +0.5,+0.5 geht (und damit keine Geometrie bei 0,0,0 dargestellt wird), dann ist auch nichts mit dem SelectionSet. Vielleicht geht's leichter, wenn wir Deine Testzeichnung (passend zu dem Code) haben könnten. - alfred - ------------------ www.hollaus.at |
GüSo Mitglied Elektrotechniker
 
 Beiträge: 141 Registriert: 22.01.2009 Windows 7 Professional SP1, AutoCAD 2011, Office 2013 Windows 10, Office2019
|
erstellt am: 21. Jan. 2010 15:10 <-- editieren / zitieren --> Unities abgeben:         
|
Ex-Mitglied
|
erstellt am: 21. Jan. 2010 15:22 <-- editieren / zitieren -->
Hi, ...bitte auch in Upload-Dateinamen keine Umlaute (siehe >>>hier<<<). Probier mal in AutoCAD: _SELECT 0,0,0 ==> und Du wirst sehen, dass auch hier nur das (lt. Zeichnungsreihenfolge) obere Element selektiert wird, nichts anderes erzielst Du mit .SelectAtPoint Alternative, selektiere über CrossingWindow und mach statt dem Punkt ein Fenster gegeben durch 2 Punkte (der erste leicht links unten vom Basispunkt aus, der zweite leicht rechts oben). Aber nochmals: Auswahl am Bildschirm wird immer wieder Überraschungen (leider negative) anbieten). - alfred - ------------------ www.hollaus.at |
GüSo Mitglied Elektrotechniker
 
 Beiträge: 141 Registriert: 22.01.2009 Windows 7 Professional SP1, AutoCAD 2011, Office 2013 Windows 10, Office2019
|
erstellt am: 21. Jan. 2010 15:34 <-- editieren / zitieren --> Unities abgeben:         
Ok Ich hatte schon mal was anderes ausprobiert und mit Ergebnissen wie erwartet, d.h. es wurde beide Elemente erfaßt. Was hälst du davon: . . mode = acSelectionSetCrossingPolygon SelSet.SelectByPolygon mode, pointsArray . . Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 21. Jan. 2010 15:36 <-- editieren / zitieren -->
Hi, auch OK, wenn 'crossing' enthalten ist und Elemtente der Blockreferenz an dieser Stelle vorhanden sind. - alfred - ------------------ www.hollaus.at |
GüSo Mitglied Elektrotechniker
 
 Beiträge: 141 Registriert: 22.01.2009 Windows 7 Professional SP1, AutoCAD 2011, Office 2013 Windows 10, Office2019
|
erstellt am: 25. Jan. 2010 07:50 <-- editieren / zitieren --> Unities abgeben:         
Ich habe mich über das Wochenende nochmal in Ruhe und Muße mit diesem Thema beschäftigt und bin jetzt soweit, daß ich weiter auf mein eigentliches Ziel zuarbeiten kann. Mir hat die Unterstützung von Alfred gut geholfen. Nochmals Dank dafür. Nun will ich nochmal versuchen Alfred 3 unities zukommen zu lassen. Mal sehen ob`s klappt. Hiermit würde ich dieses Thema dann vorerst als erledigt betrachten. GüSo Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
GüSo Mitglied Elektrotechniker
 
 Beiträge: 141 Registriert: 22.01.2009 Windows 7 Professional SP1, AutoCAD 2011, Office 2013 Windows 10, Office2019
|
erstellt am: 25. Jan. 2010 08:07 <-- editieren / zitieren --> Unities abgeben:         
Schnell noch ein Nachtrag. Warum kann ich keine Unities versenden. Jedesmal, wenn ich auf unities versenden clicke soll ich mich einloggen, obwohl ich eingeloggt bin. Das nochmalige Einloggen über den Link "hier" klappt auch nicht. Welchen Fehler machte der Anfänger? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
 |