Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  ansichtsfenster koordianten

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:  ansichtsfenster koordianten (3038 mal gelesen)
gmk
Mitglied
Dipl.-Ing.(FH) Vermessung


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

Beiträge: 667
Registriert: 23.10.2002

Autocad 2004, WS CadCompass, Normica V2000, WinXP Prof., AMD Athlon 64 X2, 2GB, NVIDIA GeForce 7600GS, HP1055CM

erstellt am: 17. Feb. 2003 10:02    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

Hi lispler!

Habe im layout ein viereckiges Ansichtsfenster.
Wie bekomme ich die Kooridanten der vier Eckpunkte im Koordinatensystem des Modellbereichs?

Ciao Georg

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

mapcar
Mitglied
CADmin



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

Beiträge: 1250
Registriert: 20.05.2002

Time flies like an arrow, fruit flies like a banana (Groucho Marx)

erstellt am: 17. Feb. 2003 11: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 gmk 10 Unities + Antwort hilfreich

Da gibt es zwei Möglichkeiten: Mit ActiveX kann man über Document.ActiveLayout an das derzeit aktive Ansichtsfenster rankommen - wenn es nicht aktiv ist, geht es über Document.Viewports.Item. Die Variable TILEMODE muss 0 sein. Über Viewport.LowerLeftCorner und Viewport.UpperRightCorner kann man's dann auslesen.

Etwas nifteliger ist Standard-Lisp: Über (entget <mansfen> )) kommst du an die Daten. Die Koordinaten der Ecken sind nicht gespeichert, sondern der Mittelpunkt (GC10) und Breite (GC 40) sowie die Höhe (GC 41). Die Ecken musst du dann ausrechnen. Hinweis: Manche Daten eines Viewports sind nicht als normale DXF-GCs gespeichert, sondern werden als XData von AutoCAD verwaltet. Um die Ecken auszurechnen, reicht aber der normale Teil.

In den Modellbereich kannst du in beiden Fällen mit (trans <pt> 2 0) umrechnen.

Gruss, Axel

------------------
Meine AutoLisp-Seiten
Meine private Homepage
Mein Angriff auf dein Zwerchfell
Mein Lexikon der Fotografie
Mein gereimtes Gesülze
Meine Überzeugung...

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

gmk
Mitglied
Dipl.-Ing.(FH) Vermessung


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

Beiträge: 667
Registriert: 23.10.2002

Autocad 2004, WS CadCompass, Normica V2000, WinXP Prof., AMD Athlon 64 X2, 2GB, NVIDIA GeForce 7600GS, HP1055CM

erstellt am: 17. Feb. 2003 12: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

Hi Axel!

Danke für die schnelle Antwort!

Bist Du sicher, daß man mit trans von layout nach modell transformieren kann?. Funkt. der Befehl nicht immer nur innerhalb der Bereiche.
Man kann das Ansichtsfenster im layout doch auch verschieben, die Koordinate im modell müsste aber immer noch gleich sein. (Transformationsparameter wurden nicht geändert!!)


Ciao Georg

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

gmk
Mitglied
Dipl.-Ing.(FH) Vermessung


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

Beiträge: 667
Registriert: 23.10.2002

Autocad 2004, WS CadCompass, Normica V2000, WinXP Prof., AMD Athlon 64 X2, 2GB, NVIDIA GeForce 7600GS, HP1055CM

erstellt am: 17. Feb. 2003 12:12    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

kleiner Nachtrag:

die Parameter (Verschiebung, Maßstab, Drehung) für die Transformation von modell nach layout müssen daher zwangsläufig irgendwo im viewport versteckt sein.

Gruß Georg

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

mapcar
Mitglied
CADmin



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

Beiträge: 1250
Registriert: 20.05.2002

Time flies like an arrow, fruit flies like a banana (Groucho Marx)

erstellt am: 17. Feb. 2003 13:53    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 gmk 10 Unities + Antwort hilfreich

Ich bin mir ziemlich sicher, weil ich schon mehrere Programme geschrieben habe, die Geometrie deckungsgleich vom Papier- in den Modellbereich verschieben/kopieren und umgekehrt. Solange keine BKS in den Mansfens vorliegen, geht das mit den erwähnten Operationen. Trans funktioniert da auf jeden Fall! Ätzend wird es nur, wenn BKS, DVIEW usw. ins Spiel kommen. Da muss man sich dann durch die EEDs quälen, die - soweit ich weiss - nirgends dokumentiert sind (ausser in dem Buch 'Maximizing AutoLisp', wenn ich mich richtig erinnere).

Die ActiveX-Methode vereinheitlicht das wenigstens alles, allerdings ist da zu befürchten, dass wieder zwei, drei Sachen vergessen wurden wie immer. Bei den ActiveX-Methoden sind ja fast immer nur 95% implementiert, und der Rest fehlt einfach. Das merkt man dann meistens erst, wenn man fast fertig ist:-(

------------------
Meine AutoLisp-Seiten
Meine private Homepage
Mein Angriff auf dein Zwerchfell
Mein Lexikon der Fotografie
Mein gereimtes Gesülze
Meine Überzeugung...

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

gmk
Mitglied
Dipl.-Ing.(FH) Vermessung


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

Beiträge: 667
Registriert: 23.10.2002

Autocad 2004, WS CadCompass, Normica V2000, WinXP Prof., AMD Athlon 64 X2, 2GB, NVIDIA GeForce 7600GS, HP1055CM

erstellt am: 17. Feb. 2003 15:28    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


transform.zip

 
Hallo Axel!

Im Anhang befindet sich eine lisp und dwg. Bei Punktwahl im layoutbereich erhalte ich als Ergebnis der Transformation immer die layout-Koordinate zurück. Was läuft da falsch??

Ciao Georg

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

mapcar
Mitglied
CADmin



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

Beiträge: 1250
Registriert: 20.05.2002

Time flies like an arrow, fruit flies like a banana (Groucho Marx)

erstellt am: 18. Feb. 2003 09:48    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 gmk 10 Unities + Antwort hilfreich

Georg,

ein paar Korrekturen: vla-get-LowerLeftCorner und --UpperRightCorner sind nicht für PViewport, sondern für Model-Vports definiert. Es geht also in beiden Fällen um Zentrum, Höhe, Breite. Und es ist (trans 3 2), kleine Verwechslung;-)

Diese Lisp-Routine macht dir einen 'Durchschlag' des aktiven Mansfens im Modellbereich (aber nur, wenn kein BKS usw. -- es wird nichts geprüft!):

(defun vrect( / doc vport model c h w p pts)
(vl-load-com)
(setq vport
(vla-get-ActivePViewport
(setq doc
(vla-get-ActiveDocument(vlax-get-acad-object))
)
)
)
(setq model(vla-get-ModelSpace doc))
(setq
c (vlax-safearray->list(vlax-variant-value(vla-get-Center vport)))
h (vla-get-height vport)
w (vla-get-width vport)
)
(setq pts
(mapcar
(function(lambda(pt / )(vlax-3d-point(trans pt 3 2))))
(list
(setq p(list(-(car c)(/ w 2.0))(+(cadr c)(/ h 2.0))0))
(setq p(list(+(car p)w)(cadr p)0))
(setq p(list(car p)(-(cadr p)h)0))
(setq p(list(-(car p)w)(cadr p)0))
)
)
)
(mapcar
(function(lambda(start end / )(vla-AddLine model start end)))
pts
(cons(last pts)pts)
)
)

Dein Bsp. kann ich mir frühestens heute abend ansehen.

------------------
Meine AutoLisp-Seiten
Meine private Homepage
Mein Angriff auf dein Zwerchfell
Mein Lexikon der Fotografie
Mein gereimtes Gesülze
Meine Überzeugung...

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

gmk
Mitglied
Dipl.-Ing.(FH) Vermessung


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

Beiträge: 667
Registriert: 23.10.2002

Autocad 2004, WS CadCompass, Normica V2000, WinXP Prof., AMD Athlon 64 X2, 2GB, NVIDIA GeForce 7600GS, HP1055CM

erstellt am: 19. Feb. 2003 14: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


vp.zip

 
Hi Axel!

Bei Reini Urban habe ich folgende lisp gefunden. Wie schon vermutet und von Dir auch angesprochen befinden sich die Transformations-parameter im EED-Bereich des viewports.
Bis zu ca. 5 Vorkommastellen funktioniert das ganze ohne Probleme. Ab 6-7 Vorkommastellen wird das Ergebnis jedoch sehr unscharf. (arbeite hauptsächlich mit Gauss-Krüger-Koordinaten, 7 Vorkommast. siehe auch Anhang)
Kennst Du das Probl.? Wie kann ich die Genauigkeit in diesem Bereich erhöhen?

(DEFUN C:ele ()
;
(defun #VPT_BOX ( $view /                        ; Ename of viewport
                  v_eed                          ; Viewport entity list including EED
                  v_psw                          ; Paper space width
                  v_psh                          ;            height
                  v_msw                          ; Model space width
                  v_msh                          ;            height
                  v_msxp                        ;            view centre x point
                  v_msyp                        ;                        y point
                  v_ang                          ;            twist angle
                  v_xy1                          ;            left bottom point
                  v_xy2                          ;            right bottom point
                  v_xy3                          ;            right top point
                  v_xy4                          ;            left top point
                  v_scale                        ;            scale
                  #ent_gc                        ; Local function
                )
  (defun #ENT_GC ( $gc $list )                  ; Return group code from list
    (cdr (assoc $gc $list))                      ; |
  );end defun #ENT_GC                            ; |

  (defun #TRG_ROT ( $point    ; 2D point        ; Rotate point
                    $angle /  ; Angle in radians ; |
                    x y      ; x & y of $point  ; |
                    ca sa    ; cos/sin of $angle; |
                  )                              ; |
    (setq x  (car  $point)                      ; |
          y  (cadr $point)                      ; |
          ca (cos  $angle)                      ; |
          sa (sin  $angle)                      ; |
    )                                            ; |
    (list (- (* x ca) (* y sa))                  ; |
          (+ (* x sa) (* y ca))                  ; |
    )                                            ; |
  );end defun #TRG_ROT                          ; |

                                                ; **** MAIN BODY ****
  (if (and (= 'ENAME (type $view))              ; if Ename passed and...
          (setq v_eed (entget $view '("ACAD"))) ; .. got entity list and...
          (= "VIEWPORT" (#ent_gc 0 v_eed))      ; .. is viewport
      )                                          ; |
    (progn                                      ; |
      (setq v_psw  (#ent_gc 40 v_eed)          ; |  paper space width
            v_psh  (#ent_gc 41 v_eed)          ; |  paper space height
            v_eed  (cdar (#ent_gc -3 v_eed))    ; |  extended entity data
            v_eed  (member                      ; |  discard EED before twist angle
                      (assoc 1040 v_eed) v_eed  ; |  |
                    )                            ; |  |
            v_ang  (#ent_gc 1040 v_eed)        ; |  1st gc 1040 (twist angle)
            v_eed  (cdr v_eed)                  ; |  remainder of eed
            v_msh  (#ent_gc 1040 v_eed)        ; |  2nd gc 1040 (view height)
            v_eed  (cdr v_eed)                  ; |  remainder of eed
            v_msxp  (#ent_gc 1040 v_eed)        ; |  3rd gc 1040 (view x point)
            v_eed  (cdr v_eed)                  ; |  remainder of eed
            v_msyp  (#ent_gc 1040 v_eed)        ; |  4th gc 1040 (view y point)
            v_scale (/ v_psh v_msh)              ; |  scale
            v_msw  (/ v_psw  v_scale)          ; |  ms width
            v_xy1  (list (- v_msxp (/ v_msw 2.0)) ; |  ms left border and ...
                          (- v_msyp (/ v_msh 2.0)) ; |    bottom border
                    )                            ; |
      )                                          ; |

      (setq v_ang (- (* 2.0 pi) v_ang)            ; |
            v_xy1 (#trg_rot v_xy1 v_ang)        ; |  1st point
            v_xy2 (polar v_xy1 v_ang v_msw)      ; |  2nd point
            v_ang (+ v_ang (/ pi 2.0))            ; |  turn 90 deg
            v_xy3 (polar v_xy2 v_ang v_msh)      ; |  3rd point
            v_ang (+ v_ang (/ pi 2.0))            ; |  turn 90 deg
            v_xy4 (polar v_xy3 v_ang v_msw)      ; |  4th point
      )                                          ; |
      (PRINC v_msxp)                                 
      (TERPRI)
      (PRINC v_msyp)
      (TERPRI) 
      (list v_xy1 v_xy2 v_xy3 v_xy4)            ; |  corner points
    );end progn                                  ; | 
  );end if                                      ; end if
);end defun #VPT_BOX
;
(SETQ element (CAR (ENTSEL "Bitte viewport wählen: ")))
(PRINC element)
(TERPRI)
(SETQ punkte (#VPT_BOX element))
)

Gruß Georg

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