| |  | 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 neue NVIDIA RTX A400 und die A1000 Grafikkarte, eine Pressemitteilung
|
Autor
|
Thema: Zwei Text Felder auslesen (431 mal gelesen)
|
DirkiBoy Mitglied

 Beiträge: 13 Registriert: 07.05.2009
|
erstellt am: 18. Jul. 2009 07:10 <-- editieren / zitieren --> Unities abgeben:         
Hallo Leute, ich versuche zwei übereinander liegende Text Felder, sehen ungefähr wie folgt aus: 10SGA00 AA501 auszulesen. Mein bisherigen Programm durchsucht die AcadEntity, findet z.B. "10SGA00" jetzt soll der dazugehörige zweite Teil "AA501" gefunden werden und als ein String zusammengesetzt werden (für eine weitere DB Anwendung). Die zwei Textfelder befinden sich immer in relativer nähe, muss also nicht die gesamte AcadEntity nochmals durchsuchen. Hat jemand einen Ansatz? Danke Dirk
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 18. Jul. 2009 08:53 <-- editieren / zitieren -->
Hi Dirk, Zitat: immer in relativer nähe
...und da bin ich mir gar nicht mehr sicher, wie verläßlich das Ergebnis wird! Mach Dir eine Collection oder ein Array, in dem Du Dir mal die Texte sammelst und zu jedem Textobjekt die Extents (und vielleicht noch besser die Mittelpunkte der Extents). Dann machst Du eine Schleife für das erste Textobjekt durch alle anderen Elemtente Deines Arrays und vergleichst, wie weit die Mittelpunkte auseinanderliegen. - alfred -
------------------ www.hollaus.at |
DirkiBoy Mitglied

 Beiträge: 13 Registriert: 07.05.2009
|
erstellt am: 18. Jul. 2009 09:31 <-- editieren / zitieren --> Unities abgeben:         
Hallo Alfred, habe das Problem jetzt so gelöst indem ich die Feld1 X Koordinate mit Feld1 Y Koordinate multiplizierz habe. Das Selbe für Feld2. Falls die Summen nicht mehr als 0,5% abweichen und noch einige plausibilitäts Prüfungen bestehen wird das Ergebnis akzeptiert. Dachte nur es gibt eine elegantere Lösung. Danke Dirk Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 18. Jul. 2009 12:22 <-- editieren / zitieren -->
Hi Dirk, mit multiplizieren von X mit Y kannst Du aber schon auch sehr weit daneben liegen. Beispiel, worüber Du stolpern kannst: Text1 X=10 Y=100 Text2 X=100 Y=10 und da hilft auch Summieren nix, Du musst IMHO über den Abstand gehen. [EDIT]...und eine besonders unbeliebte Zahl beim Multiplizieren wäre die 0, die wirft mit diesem System alles durcheinander! [/EDIT] - alfred - ------------------ www.hollaus.at [Diese Nachricht wurde von a.n. am 18. Jul. 2009 editiert.] |
DirkiBoy Mitglied

 Beiträge: 13 Registriert: 07.05.2009
|
erstellt am: 19. Jul. 2009 08:24 <-- editieren / zitieren --> Unities abgeben:         
Hi Alfred, hast natürlich recht. hatte daher schon den code in z.B. X & Y Coordinate +- 5 geändert. Erzeugt aber immer noch eine geringere Fehler rate falls felder "enger" zusammen liegen. Aber ist besser als nix. Falls Du eine bessere Idee hast? Danke Dirk 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: 19. Jul. 2009 10:24 <-- editieren / zitieren --> Unities abgeben:          Nur für DirkiBoy
Hallo Dirk, du kannst dir auch ein Indexraster anlegen das mehr oder weniger grob gestrickt ist. Das hälst du in einer Liste im Speicher. In der Liste steht dann nur noch das Handle und der Rasterindex. Wenn du nun Elemente suchst brauchst du nur zuerst nach diesem Raster in der Liste suchen. Erhälst du im Raster mehrere Ergebnisse rechnest du nur für diese Elemente die Strecke um das nächst gelegende zu erhalten. Mit so einem Indexraster arbeiten die meisten Programme die räumlich suchen intern, wobei die Maschenbreite je nach Anforderung natürlich varieren kann. Code: Raster: 1m Y X (=Y+0,5) (=X+0,5) Y' X' Raster 123450,0 / 456780,0 --> 123450,5 / 456780,5 --> 123450 / 456780 --> 01234500456780 123450,1 / 456780,1 --> 123450,6 / 456780,6 --> 123450 / 456780 --> 01234500456780 123450,2 / 456780,2 --> 123450,7 / 456780,7 --> 123450 / 456780 --> 01234500456780 123450,3 / 456780,3 --> 123450,8 / 456780,8 --> 123450 / 456780 --> 01234500456780 123450,4 / 456780,4 --> 123450,9 / 456780,9 --> 123450 / 456780 --> 01234500456780 123450,5 / 456780,5 --> 123451,0 / 456781,0 --> 123451 / 456781 --> 01234510456781 123450,6 / 456780,6 --> 123451,1 / 456781,1 --> 123451 / 456781 --> 01234510456781 123450,7 / 456780,7 --> 123451,2 / 456781,2 --> 123451 / 456781 --> 01234510456781 123450,8 / 456780,8 --> 123451,3 / 456781,3 --> 123451 / 456781 --> 01234510456781 123450,9 / 456780,9 --> 123451,4 / 456781,4 --> 123451 / 456781 --> 01234510456781 123451,0 / 456781,0 --> 123451,5 / 456781,5 --> 123451 / 456781 --> 01234510456781 123451,1 / 456781,1 --> 123451,6 / 456781,6 --> 123451 / 456781 --> 01234510456781 123451,2 / 456781,2 --> 123451,7 / 456781,7 --> 123451 / 456781 --> 01234510456781 123451,3 / 456781,3 --> 123451,8 / 456781,8 --> 123451 / 456781 --> 01234510456781 123451,4 / 456781,4 --> 123451,9 / 456781,9 --> 123451 / 456781 --> 01234510456781 123451,5 / 456781,5 --> 123452,0 / 456782,0 --> 123452 / 456782 --> 01234520456782 123451,6 / 456781,6 --> 123452,1 / 456782,1 --> 123452 / 456782 --> 01234520456782 123451,7 / 456781,7 --> 123452,2 / 456782,2 --> 123452 / 456782 --> 01234520456782 123451,8 / 456781,8 --> 123452,3 / 456782,3 --> 123452 / 456782 --> 01234520456782 123451,9 / 456781,9 --> 123452,4 / 456782,4 --> 123452 / 456782 --> 01234520456782 123452,0 / 456782,0 --> 123452,5 / 456782,5 --> 123452 / 456782 --> 01234520456782
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 |
Ex-Mitglied
|
erstellt am: 19. Jul. 2009 10:27 <-- editieren / zitieren -->
Hi, doch ja, oben hab ich's ja schon geschrieben. Obige Schleife durch alle Texte durchlaufen, verknüpft mit einem Toleranzwert für 'maximal darf soweit auseinander sein' und Du bist durch. - alfred - ------------------ www.hollaus.at |
DirkiBoy Mitglied

 Beiträge: 13 Registriert: 07.05.2009
|
erstellt am: 19. Jul. 2009 20:49 <-- editieren / zitieren --> Unities abgeben:         
Hallo zusammen, so wie ich das sehe beziehen sich beide Lösungen (am ende meine auch) auf das Durchlaufen aller relevanten Felder in einer Schleife und anschließenden vergleich mit der maßgebenden Koordinate. Mal General, gibt es keine Möglichkeit in ACAD eine Vorauswahl mittels Filter (Where condition) zu setzen so, dass nicht jedesmal alle Felder durchlaufen werden müssen? So Datenbank mäßig halt. Danke Dirk Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 19. Jul. 2009 20:53 <-- editieren / zitieren -->
Hi Dirk, darum war meine Idee, zuerst aus den Elementen die notwendige Infos in einem Array zu sammeln, dann hast Du mit Array-Funktionen (oder Collection, wenn's Dir lieber ist) sehr schnellen Zugriff. Wenn Du nur in einem Ausschnitt TextEntities finden willst, dann kannst Du das schon über SelectionSet mit Filter-Koordinaten machen, dann müssen aber die TextObjekte im sichtbaren Bereich sein, dazu kommt, dass für jedes Textelement einen Zoom-Befehl zu machen und dann ein SelectionSet zu machen (wenn Du durch den ganzen Modellbereich durchmachen willst) jedenfalls langsamer ist als obige Methode. - alfred - ------------------ www.hollaus.at |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
 |