Hot News:

Mit Unterstützung durch:

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

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-TranslateCoordinates (1836 mal gelesen)
vlide
Mitglied



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

Beiträge: 29
Registriert: 10.07.2006

AutoCAD 200x
ObjectDCL 3.0

erstellt am: 06. Sep. 2006 10: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

Hallo,

hat jemand eine Ahnung, wie man Koordinaten einer Polylinie aus einem Block in das acWorld bekommt?
Mein Versuch mit
(vla-TranslateCoordinates vlaPoly acOCS acWorld :vlax-true) ist leider irgendwie gescheitert 

Schon mal vielen Dank für eure Hilfe!!

Wolfgang

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

joern bosse
Ehrenmitglied
Dipl.-Ing. Vermessung


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

Beiträge: 1734
Registriert: 11.10.2004

Window 10
ACAD 2021
CIVIL 2021
BricsCAD V14-V22
Intel(R) Core(TM)i5-8250U CPU @ 1.60GHz 1.80 GHz
16.0GB RAM
NVIDIA GeForce GTX 1050<P>

erstellt am: 06. Sep. 2006 14:34    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 vlide 10 Unities + Antwort hilfreich

Hallo Wolfgang,
mit vla-TranslateCoordinates ... habe ich sowas noch nicht probiert, aber Du könntest den Blockdefinition (tblobjname "BLOCK" "Blockname") mit "ENTNEXT" solange durchsuchen, bis Du Deine Polylinien gefunden hast. (Wenn es sich um eine "POLYLINE" handelt, mußst Du mit ENTNEXT noch solange weiter gehen, bis Du an ein SEQEND kommst.
Dann kannst Du Dir die Koordinaten der einzelnen Stützpunkte im Blocksystem ermitteln. Wenn Du diese dann mit den Basispunktkoordinaten des Blockes in der Zeichnung addierst hast Du die Weltkoordinaten der Polylinie.
Mmmh, klingt ziemlich umständlich, vielleicht kommen aber noch ein paar sinnvolle Vorschläge.

------------------
viele Grüße

Jörn

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

vlide
Mitglied



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

Beiträge: 29
Registriert: 10.07.2006

AutoCAD 200x
ObjectDCL 3.0

erstellt am: 06. Sep. 2006 15: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

Hallo Jörn,

vielen Dank für deine Antwort!

Das "Auslesen" der Elemente regel ich so:

(defun u:get_xref_data (o / vlaBlock vlaObj lstPolys lstRaumnr strName xRefEP xRefName)
  (setq vlaBlock (vla-item (vla-get-blocks (vla-get-ActiveDocument (vlax-get-acad-object)))
  (setq strName (vla-get-name o))))
  (if (vlax-property-available-p vlaBlock 'IsXRef)
    (if (= (vla-get-IsXRef vlaBlock) :vlax-true)
      (progn
(vlax-for vlaObj (vla-get-ModelSpace (vla-get-XRefDatabase vlaBlock))
  (if (and (= (vla-get-objectname vlaObj) "AcDbPolyline")
  (= (vla-get-layer vlaObj) (strcat strName "|Polylinie")))
    (setq lstPolys (cons vlaObj lstPolys))
    ); if
  (if (and (= (vla-get-objectname vlaObj) "AcDbBlockReference")
  (= (vla-get-layer vlaObj) (strcat strName "|Raumnummer")))
    (setq lstRaumnr (cons vlaObj lstRaumnr))
    ); if
  (setq xRefEP (safearray-value (variant-value (vla-get-Origin vlaBlock)))
xRefName (vla-get-name vlaBlock))
  ); vlax-for
); progn
      ); if
    ); if
  (if lstPolys
    (list (list "XREF" o)(list "RAUMNUMMER" lstRaumnr) (list "POLYLINIE" lstPolys))
    ); if
  )

Was mir jetzt fehlt ist die Umsetzung des OCS in WCS.
Da es ja nun auch eine schöne vla-Funktion gibt, möchte ich sie natürlich nutzen.

VG
Wolfgang

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

CADmium
Moderator
Maschinenbaukonstrukteur




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

Beiträge: 13508
Registriert: 30.11.2003

.

erstellt am: 06. Sep. 2006 15:15    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 vlide 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von joern bosse:
Wenn Du diese dann mit den Basispunktkoordinaten des Blockes in der Zeichnung addierst hast Du die Weltkoordinaten der Polylinie.

wenn die Blockreferenz gedreht und/oder skaliert ist, reicht nur addieren aber nicht 


und zu (vla-TranslateCoordinates vlaPoly acOCS acWorld :vlax-true) ...
vla-TranslateCoordinates verlangt als ersten Parameter einen 3D-Punkt kein Polylinienobject. .. ist dafür aber auch ungeeignet ..

der Eigentümer der PL ist der Block , du willst aber bezüglich der Koordinaten der Blockreferenz transformieren -> da bleibt dir nur die Mathematik

------------------
  - Thomas -
"Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben."

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

vlide
Mitglied



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

Beiträge: 29
Registriert: 10.07.2006

AutoCAD 200x
ObjectDCL 3.0

erstellt am: 06. Sep. 2006 15:23    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

Danke Thomas,

na dann wird das rechnen losgehen 

VG
Wolfgang

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

andi2050
Mitglied



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

Beiträge: 107
Registriert: 11.03.2003

erstellt am: 06. Sep. 2006 23:49    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 vlide 10 Unities + Antwort hilfreich

Hallo vlide !

Ich denke Du verwechselt OCS (Objektkoordinaten) mit MCS (Modellkoordinaten).

Die Koordinaten in der Blockdefinition werden als MCS bezeichnet (kannst Du Dir als eine Art Weltkoordinaten innerhalb der Blockdef. vorstellen, jede Blockdef. hat ihr eigenes WCS).
Du musst also die Koordinaten der Pline vom MCS der Blockdef. in WCS umrechnen.
Ganz exakt: OCS-Pline -> MCS-Blockdefinition -> WCS (abhängig von der Lage des INSERTS (BlockREFERENZ)

OCS->MCS ist kein Problem, geht einfach mit:
(trans Punkt (cdr (assoc 210 (entget enamePline)) 0)
... einfache OCS->WCS Transformation, nur daß diese nicht 'echte' Weltkoordinaten zurückgibt, sondern Weltkoordinaten innherhalb der Blockdef. (MCS)
Übrigens: vla-TranslateCoordinates ist eigentlich nichts anderes als trans, nur eben vla-...

MCS->WCS (Koordinaten aus Block 'herausrechnen') ist aber meist nicht ganz einfach. Dafür benötigst Du die Transformationsmatrix des INSERTS. (trans oder vla-TranslateCoordinates funktioniert hierfür nicht !)
Wenn die Matrix bekannt ist, dann lassen sich damit die Punkte leicht aus dem Block herausrechnen.
Die Matrix wird normalerweise von nentselp zurückgegeben. Dafür muß aber der Benutzer die Pline anwählen.
Wenn die Matrix nicht bekannt ist, muss diese berechnet werden. Das ist aber nicht ganz einfach...
Mir ist keine eingebaute LISP-Funktion bekannt, mir der man die Matrix 'zu Fuß' ermitteln kann.

Schau mal unter folgendem Link nach:
http://acad.fleming-group.com/Download/BIXForm/BIXForm.html
Mit diesen Funktionen kannst Du von MCS nach WCS und wieder zurück rechnen.


Ich hoffe, daß Dir das weiterhilft.

Grüße

Andi


[Diese Nachricht wurde von andi2050 am 06. Sep. 2006 editiert.]

[Diese Nachricht wurde von andi2050 am 06. Sep. 2006 editiert.]

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

vlide
Mitglied



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

Beiträge: 29
Registriert: 10.07.2006

AutoCAD 200x
ObjectDCL 3.0

erstellt am: 07. Sep. 2006 09:56    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 Andi,

vielen Dank für diese suuuuper Erklärung!!! Hat ne Menge Unklarheit beseitigt

VG
Wolfgang

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