| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| PNY bietet das umfangreichste Ökosystem von B2B als auch B2C-Lösungen für IT-Akteure auf dem Markt, eine Pressemitteilung
|
Autor
|
Thema: vla-getboundingbox (1906 mal gelesen)
|
Bernd10 Mitglied
Beiträge: 763 Registriert: 20.11.2003 Intel(R) Xeon(R) W-2123 CPU @ 3.60GHz 16 GB RAM Windows 10 Pro 64-bit AutoCAD Mechnical 2020 Deu
|
erstellt am: 24. Sep. 2010 15:08 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich habe unerwartete Rückgabewerte aus der Funktion vla-getboundingbox. Im konkreten Fall besteht ein Objekt insert aus den Objekten Text und Polylinie. Übergebe ich an die Funktion das Objekt insert, erhalte ich nicht die gewünschten Punkte bei gedrehten Texten zurück. In der Anlage ist ein Beispiel zur besseren Erklärung. Das darin enthaltene grüne und rote Rechtecke ergeben sich aus den Rückgabewerten der Funktion vla-getboundingbox. Das grüne Rechteck habe ich so erwartet, das rote Recht entspricht nicht meinen Erwartungen. Es sollte unten an den Eckpunkt des Rechtecks und auf der rechten Seiten an den Buchstaben g angrenzen. Stimmen die Rückgabewerte der Funktion vla-getboundingbox nicht oder was muss ich noch beachten? Danke im Voraus und viele Grüße Bernd
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 24. Sep. 2010 15:15 <-- editieren / zitieren -->
Hi, stimmt schon so, nur beim gedrehten Text Dein Cyan-Rechteck nicht. Mach dieses Rechteck mal so groß, dass auch die Unterlänge vom 'g' enthalten ist, dann wirst Du sehen, dass die rote (BoundingBox) stimmt. - alfred - ------------------ www.hollaus.at |
Bernd10 Mitglied
Beiträge: 763 Registriert: 20.11.2003 Intel(R) Xeon(R) W-2123 CPU @ 3.60GHz 16 GB RAM Windows 10 Pro 64-bit AutoCAD Mechnical 2020 Deu
|
erstellt am: 24. Sep. 2010 15:27 <-- editieren / zitieren --> Unities abgeben:
Hallo Alfred, danke für Deine Antwort. Zitat: Original erstellt von a.n.: stimmt schon so, nur beim gedrehten Text Dein Cyan-Rechteck nicht. Mach dieses Rechteck mal so groß, dass auch die Unterlänge vom 'g' enthalten ist, dann wirst Du sehen, dass die rote (BoundingBox) stimmt.
Ich kann das Cyan-Rechteck nicht ändern, da dies den Bereich entsprechend dem Großbuchstaben darstellt und auch so programmintern verwendet wird. Irgendwie muss der unerwünschte "Offset" durch das Drehen des Textes entstehen, wobei ich bisher keine Funktion gefunden habe, mit der ich diesen ermitteln kann. Viele Grüße Bernd
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 24. Sep. 2010 15:34 <-- editieren / zitieren -->
Hi, mal beim waagrechte Text: getBoundingBox liefert Dir das grüne Rechteck. Nimm dieses grüne Rechteck, drehe und schiebe es zum verdrehten Text ==> das ergibt als Extents jetzt das rote Rechteck und dieses liefert Dir getBoundingBox im verdrehten Fall, an dem ist nicht viel zu rütteln. Eine Abhilfe, die ich verwende (allerdings nicht in Lisp und damit muss ich nicht in der Datenbank herumagieren, was sicherlich ein vielfaches an Zeit kostet): Ich mach mir eine Kopie des verdrehten Textes, diese Kopie drehe ich auf Winkel 0, dann ermittle ich das Rechteck, das sich dann aus den Extents des waagrechten Textobjekts ergibt, und dieses Rechteck drehe ich dann zurück (auf Basispunkt der Drehung muss natürlich geachtet werden). Den kopierten Text lösche ich dann wieder. Hast Du nur wenige Objekte, dann wird das seitens Performance kein Problem sein, hast Du viele Objekte, dann wird diese Methode, wenn Du nur in der Datenbank kopieren kannst (das weiss ich mangels LISP-Kenntnissen nicht) wohl zu langsam sein. HTH, - alfred - ------------------ www.hollaus.at |
Bernd10 Mitglied
Beiträge: 763 Registriert: 20.11.2003 Intel(R) Xeon(R) W-2123 CPU @ 3.60GHz 16 GB RAM Windows 10 Pro 64-bit AutoCAD Mechnical 2020 Deu
|
erstellt am: 24. Sep. 2010 15:58 <-- editieren / zitieren --> Unities abgeben:
Hallo Alfred, Zitat: Original erstellt von a.n.:
mal beim waagrechte Text: getBoundingBox liefert Dir das grüne Rechteck. Nimm dieses grüne Rechteck, drehe und schiebe es zum verdrehten Text ==> das ergibt als Extents jetzt das rote Rechteck und dieses liefert Dir getBoundingBox im verdrehten Fall, an dem ist nicht viel zu rütteln.
damit komme ich nur bedingt weiter. Das blaue Rechteck stellt mein gewünschtes Ergbnis dar. Zitat: Original erstellt von a.n.:
Eine Abhilfe, die ich verwende (allerdings nicht in Lisp und damit muss ich nicht in der Datenbank herumagieren, was sicherlich ein vielfaches an Zeit kostet):Ich mach mir eine Kopie des verdrehten Textes, diese Kopie drehe ich auf Winkel 0, dann ermittle ich das Rechteck, das sich dann aus den Extents des waagrechten Textobjekts ergibt, und dieses Rechteck drehe ich dann zurück (auf Basispunkt der Drehung muss natürlich geachtet werden). Den kopierten Text lösche ich dann wieder. Hast Du nur wenige Objekte, dann wird das seitens Performance kein Problem sein, hast Du viele Objekte, dann wird diese Methode, wenn Du nur in der Datenbank kopieren kannst (das weiss ich mangels LISP-Kenntnissen nicht) wohl zu langsam sein.
Solche gedrehte Texte sind bei uns die Ausnahme, weshalb die Geschwindigkeit kein Problem darstellen sollte. Dein Vorgehen führt leider nicht zu meinem gewünschten Ergebnis (= blaues Rechteck. Wenn ich nur diesen verflixten Offset berechnen könnte. Viele Grüße Bernd
[Diese Nachricht wurde von Bernd10 am 24. Sep. 2010 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 24. Sep. 2010 16:07 <-- editieren / zitieren -->
Hi, >> Das blaue Rechteck stellt mein gewünschtes Ergbnis dar. Unfair Denn beim 'T' läßt Du zu, dass der Buchstabe eine rechteckige Grenze hat, beim 'g' nicht. >> Wenn ich nur diesen verflixten Offset berechnen könnte.
Wird nicht leicht, mit Fonts zu rechnen, wo Unterlängen vorkommen und wo nicht. Auch die Rechnungsmethoden, die Du in Windows-Libraries findest, werden Dir im AutoCAD (und mit LISP) kaum helfen, da AutoCAD auch SHX-Dateien kann (von denen Windows nichts weiss) und Breitenfaktoren (die Windows als solches auch nicht kennt, damit das Kerning anders gerechnet wird). Sorry, mehr hab ich nicht. - alfred - ------------------ www.hollaus.at [Diese Nachricht wurde von a.n. am 24. Sep. 2010 editiert.] |
wronzky Ehrenmitglied V.I.P. h.c. CAD-Dienstleistungen für Architekten
Beiträge: 2154 Registriert: 02.05.2005 CAD: AutoCAD 2.6 bis 2014 ADT 2005 - 2014 Arcibem System: Windows 2000, XP, NO VISTA Internet-Startseite: http://www.archi.de
|
erstellt am: 24. Sep. 2010 16:16 <-- editieren / zitieren --> Unities abgeben: Nur für Bernd10
|
wronzky Ehrenmitglied V.I.P. h.c. CAD-Dienstleistungen für Architekten
Beiträge: 2154 Registriert: 02.05.2005 CAD: AutoCAD 2.6 bis 2014 ADT 2005 - 2014 Arcibem System: Windows 2000, XP, NO VISTA Internet-Startseite: http://www.archi.de
|
erstellt am: 24. Sep. 2010 16:22 <-- editieren / zitieren --> Unities abgeben: Nur für Bernd10
Noch ein Nachtrag: wenn Du die Funktion von oben geladen hast, dann z.B. so: Code: (defun c:test ( / o p p0) (setq o (car (entsel)));hier TEXT wählen (command "_ucs" "_ob" o) (setq p (ucs-bbox o)) (setq p0 (trans (cdr (assoc 10 (entget o))) 0 1)) (command "_rectang" p0 (cadr p)) (command "_ucs" "_p") )
Grüsse, Henning------------------ zur Abstimmung Henning Jesse VoxelManufaktur Computer-Dienstleistungen für Architekten und Ingenieure http://www.voxelman.de [Diese Nachricht wurde von wronzky am 24. Sep. 2010 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Bernd10 Mitglied
Beiträge: 763 Registriert: 20.11.2003 Intel(R) Xeon(R) W-2123 CPU @ 3.60GHz 16 GB RAM Windows 10 Pro 64-bit AutoCAD Mechnical 2020 Deu
|
erstellt am: 27. Sep. 2010 08:10 <-- editieren / zitieren --> Unities abgeben:
Hallo Alfred, Zitat: Original erstellt von a.n.:
Sorry, mehr hab ich nicht. - alfred -
eine Entschuldigung ist wirklich nicht nötig. Durch Deine Informationen weiß ich schon mal, dass die Funktion für meinen Fall nicht zu verwenden ist. Es hat mich auch auf die Idee gebracht, den Text in Polylinien aufzulösen und darüber die Box zu ermitteln. Danke und viele Grüße Bernd
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Bernd10 Mitglied
Beiträge: 763 Registriert: 20.11.2003 Intel(R) Xeon(R) W-2123 CPU @ 3.60GHz 16 GB RAM Windows 10 Pro 64-bit AutoCAD Mechnical 2020 Deu
|
erstellt am: 27. Sep. 2010 08:13 <-- editieren / zitieren --> Unities abgeben:
Hallo Henning, danke für Deine Informationen. Zitat: Original erstellt von wronzky: Noch ein Nachtrag: wenn Du die Funktion von oben geladen hast, dann z.B. so:Code: (defun c:test ( / o p p0) (setq o (car (entsel)));hier TEXT wählen (command "_ucs" "_ob" o) (setq p (ucs-bbox o)) (setq p0 (trans (cdr (assoc 10 (entget o))) 0 1)) (command "_rectang" p0 (cadr p)) (command "_ucs" "_p") )
Grüsse, Henning
das werde ich heute testen. Es dauert aber etwas bis neue Informationen dazu habe. Viele Grüße Bernd Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Bernd10 Mitglied
Beiträge: 763 Registriert: 20.11.2003 Intel(R) Xeon(R) W-2123 CPU @ 3.60GHz 16 GB RAM Windows 10 Pro 64-bit AutoCAD Mechnical 2020 Deu
|
erstellt am: 27. Sep. 2010 10:06 <-- editieren / zitieren --> Unities abgeben:
Hallo Henning, Zitat: Original erstellt von wronzky: Noch ein Nachtrag: wenn Du die Funktion von oben geladen hast, dann z.B. so:Code: (defun c:test ( / o p p0) (setq o (car (entsel)));hier TEXT wählen (command "_ucs" "_ob" o) (setq p (ucs-bbox o)) (setq p0 (trans (cdr (assoc 10 (entget o))) 0 1)) (command "_rectang" p0 (cadr p)) (command "_ucs" "_p") )
Grüsse, Henning
ich habe nun die Funktionen getestet (gelbes Rechteck), aber leider stimmt es nicht mit meinem gewünschten Rechteck (blau) überein. Um die Funktionen für meine Vorstellungen umbauen zu können, müsste ich die Teilschritte zuerst analysieren. Aus Zeitgründe gehen nun doch den mir bekannten Weg, dass ich eine Kopie des Textes in Polylinien auflöse um daraus die gewünschte Box zu ermitteln. Danke für Deine Informationen und viele Grüße Bernd
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
wronzky Ehrenmitglied V.I.P. h.c. CAD-Dienstleistungen für Architekten
Beiträge: 2154 Registriert: 02.05.2005 CAD: AutoCAD 2.6 bis 2014 ADT 2005 - 2014 Arcibem System: Windows 2000, XP, NO VISTA Internet-Startseite: http://www.archi.de
|
erstellt am: 27. Sep. 2010 12:14 <-- editieren / zitieren --> Unities abgeben: Nur für Bernd10
Zitat: Um die Funktionen für meine Vorstellungen umbauen zu können, müsste ich die Teilschritte zuerst analysieren
brauchst Du nicht zu machen. Das wirst Du auch nicht hinkriegen, wenn Du die Funktion analysierst. Ich hatte Dich nur falsch verstanden, und dachte, es ginge Dir um das CYAN Rechteck... Grüsse, Henning ------------------ zur Abstimmung Henning Jesse VoxelManufaktur Computer-Dienstleistungen für Architekten und Ingenieure http://www.voxelman.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |