Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  vla-getboundingbox

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:  vla-getboundingbox (1847 mal gelesen)
Bernd10
Mitglied



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

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 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


Box.JPG

 
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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

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



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

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 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 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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

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



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

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 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


Boxen.JPG

 
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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

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



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

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 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 Bernd10 10 Unities + Antwort hilfreich

Hallo Bernd,
also mit Text in Form von MTEXT kannst Du die bounding-box vergessen. Das geht schon mal gar nicht.
die bounding-box bei verdrehten Texten kannst Du mit DIESER FUNKTION ermitteln.
Die Basislinie bekommst Du mit dem GC 10 des Textes.

Dann noch ein bischen rechnen...

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

wronzky
Ehrenmitglied V.I.P. h.c.
CAD-Dienstleistungen für Architekten



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

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 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 Bernd10 10 Unities + Antwort hilfreich

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



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

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 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 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



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

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 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 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



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

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 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


Boxen2.JPG

 
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



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

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 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 Bernd10 10 Unities + Antwort hilfreich

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

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