| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: zoom to Object (3098 mal gelesen)
|
Semml01 Mitglied Schreiner
Beiträge: 32 Registriert: 06.04.2004 Win XP,Acad 2002
|
erstellt am: 01. Jul. 2004 07:34 <-- editieren / zitieren --> Unities abgeben:
Hallo Forum! bin auf der Suche nach einem Befehl oder Lisp für zoom auf Object! Das heißt Object markieren, Befehl ausführen und das Object ist ganz gezoomt! _extrim Arbeitet auch mit zoom2object! Nur bringt mir das nichts weil es in ner Lisp steht! Vielen Dank schon mal! Simon
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
captainfritz Mitglied Bauingenieur/Wasserbau
Beiträge: 270 Registriert: 07.05.2004 AutoCAD 2005/2006/2007 Map, AutoTerrain, bbsoft, Geotools, Windows XP
|
erstellt am: 01. Jul. 2004 07:54 <-- editieren / zitieren --> Unities abgeben: Nur für Semml01
|
Ulf Böger Mitglied
Beiträge: 281 Registriert: 18.09.2002 IBM R50p 1.7GHz 1GB RAM ATI Mobility Fire GL T2 128 MB Win2000 SP3 AutoCAD Mechanical 2004 DX Inventor 8 SP1 ADT 2004 PartSolutions 8
|
erstellt am: 01. Jul. 2004 07:55 <-- editieren / zitieren --> Unities abgeben: Nur für Semml01
Hi, wenn es in einer LISP-Datei definiert ist, kannst du es auch verwenden! Das funktioniert dann mit (command "befehl" <parameter> ) ------------------ Nur Döner macht schöner und wenn du ihn nicht isst, bleibst du wie du bist! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Semml01 Mitglied Schreiner
Beiträge: 32 Registriert: 06.04.2004 Win XP,Acad 2002
|
erstellt am: 01. Jul. 2004 08:08 <-- editieren / zitieren --> Unities abgeben:
|
CADwiesel Moderator CAD4FM UG
Beiträge: 1968 Registriert: 05.09.2000 AutoCAD, Bricscad Wir machen das Mögliche unmöglich
|
erstellt am: 01. Jul. 2004 08:21 <-- editieren / zitieren --> Unities abgeben: Nur für Semml01
(defun C:ZoomO ( / elem p0 p1) (if(setq elem (entsel)) (progn (setq elem (car elem)) (vla-getboundingbox (vlax-ename->vla-object elem) 'xmin 'xmax ) ;_ ende von vla-getboundingbox (setq p0 (vlax-safearray->list xmin)) ;Punkt links unten (setq p1 (vlax-safearray->list xmax)) ;Punkt rechts oben (command "_.zoom" "_w" p0 p1) ) ) ) das ist free kot kann jeder mit machen was er will Kopier das in eine textdatei, speicher diese in einem acad-Supportpfad als bspl. Zoomo.lsp ab lad die dann in acad und starte sie durch Eingabe von zoomo. - Alles klar? ------------------ Gruß CADwiesel Besucht uns im CHAT
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
AsSchu Ehrenmitglied Konstrukteur
Beiträge: 1632 Registriert: 27.06.2003 ACAD 2012
|
erstellt am: 01. Jul. 2004 09:19 <-- editieren / zitieren --> Unities abgeben: Nur für Semml01
|
Semml01 Mitglied Schreiner
Beiträge: 32 Registriert: 06.04.2004 Win XP,Acad 2002
|
erstellt am: 01. Jul. 2004 10:09 <-- editieren / zitieren --> Unities abgeben:
Supi! Das ist schon mal ungefähr das was ich mir vorstelle! Wenn das ganze jetzt noch funzen würde wenn ich vorher ein Objekt markiere, und dann darauf zoomen könnte währe ich glücklich! Vielen Dank! Simon Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADwiesel Moderator CAD4FM UG
Beiträge: 1968 Registriert: 05.09.2000 AutoCAD, Bricscad Wir machen das Mögliche unmöglich
|
erstellt am: 01. Jul. 2004 10:21 <-- editieren / zitieren --> Unities abgeben: Nur für Semml01
Das funzt aber nur, wenn die systemvariable pickfirst auf 1 steht. Also stell das sicher. Ach ja, wegen dem WKS - kannst ja ein ein (command "_ucs" "_W") einbauen. das sollte unterhalb der Schöpfungshöhe liegen (defun C:ZoomO ( / elem p0 p1) (if(setq elem (ssget "_:S")) (progn (setq elem (ssname elem 0)) (vla-getboundingbox (vlax-ename->vla-object elem) 'xmin 'xmax ) ;_ ende von vla-getboundingbox (setq p0 (vlax-safearray->list xmin)) ;Punkt links unten (setq p1 (vlax-safearray->list xmax)) ;Punkt rechts oben (command "_.zoom" "_w" p0 p1) ) ) ) ------------------ Gruß CADwiesel Besucht uns im CHAT
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
AsSchu Ehrenmitglied Konstrukteur
Beiträge: 1632 Registriert: 27.06.2003 ACAD 2012
|
erstellt am: 01. Jul. 2004 11:01 <-- editieren / zitieren --> Unities abgeben: Nur für Semml01
habe ich ja immer gesagt Suuuuuuuuuuuuuper Forum !! genauso: (defun C:ZoomO ( / elem p0 p1) (command "_ucs" "_W") (if(setq elem (entsel)) (progn (setq elem (car elem)) (vla-getboundingbox (vlax-ename->vla-object elem) 'xmin 'xmax ) ;_ ende von vla-getboundingbox (setq p0 (vlax-safearray->list xmin)) ;Punkt links unten (setq p1 (vlax-safearray->list xmax)) ;Punkt rechts oben (command "_.zoom" "_w" p0 p1) (command "_ucs" "_V") ) ) )
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Semml01 Mitglied Schreiner
Beiträge: 32 Registriert: 06.04.2004 Win XP,Acad 2002
|
erstellt am: 01. Jul. 2004 14:48 <-- editieren / zitieren --> Unities abgeben:
|
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13508 Registriert: 30.11.2003 Hinweis: Meine Mitarbeit auf CAD.DE ist fakultativ, unentgeltlich und beruht nur auf einem ausgeprägtem Helfersyndrom.
|
erstellt am: 01. Jul. 2004 15:30 <-- editieren / zitieren --> Unities abgeben: Nur für Semml01
In der Hoffnung , auch mit der Schöpfungshöhe unter der entsprechenden Grenze zu bleiben .. (defun C:ZoomO ( / AUSWAHL INDEX elem xmin xmax MINX MAXX MINY MAXY) (if(or(and(setq AUSWAHL (ssget "I"))(>(sslength AUSWAHL) 0)) (and(setq AUSWAHL (ssget)) (>(sslength AUSWAHL) 0)) ) (progn (setvar "Pickfirst" 1) (command "_ucs" "_W") (setq INDEX -1) (repeat (sslength AUSWAHL) (setq ELEM(ssname AUSWAHL(setq INDEX (1+ INDEX)))) (vla-getboundingbox (vlax-ename->vla-object elem) 'xmin 'xmax ) (if (= INDEX 0) (progn (setq MINX (car (vlax-safearray->list xmin))) (setq MINY (cadr(vlax-safearray->list xmin))) (setq MAXX (car (vlax-safearray->list xmax))) (setq MAXY (cadr(vlax-safearray->list xmax))) ) (progn (if (<(car (vlax-safearray->list xmin)) MINX)(setq MINX (car (vlax-safearray->list xmin)))) (if (<(cadr(vlax-safearray->list xmin)) MINY)(setq MINY (cadr(vlax-safearray->list xmin)))) (if (>(car (vlax-safearray->list xmax)) MAXX)(setq MAXX (car (vlax-safearray->list xmax)))) (if (>(cadr(vlax-safearray->list xmax)) MAXY)(setq MAXY (cadr(vlax-safearray->list xmax)))) ) ) ) (command "_.zoom" "_w" (list MINX MINY)(list MAXX MAXY)) (command "_ucs" "_V") ) ) ) ------------------ - Thomas - Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Semml01 Mitglied Schreiner
Beiträge: 32 Registriert: 06.04.2004 Win XP,Acad 2002
|
erstellt am: 01. Jul. 2004 16:50 <-- editieren / zitieren --> Unities abgeben:
|
CB_ Mitglied Bauingenieur
Beiträge: 163 Registriert: 20.01.2004 ACAD 2002, W2k, P4 1800Mhz, 512 MB RAM, 20GB HD, Matrox, 2 Bildschirme
|
erstellt am: 02. Jul. 2004 07:33 <-- editieren / zitieren --> Unities abgeben: Nur für Semml01
|
CADwiesel Moderator CAD4FM UG
Beiträge: 1968 Registriert: 05.09.2000 AutoCAD, Bricscad Wir machen das Mögliche unmöglich
|
erstellt am: 02. Jul. 2004 08:01 <-- editieren / zitieren --> Unities abgeben: Nur für Semml01
|
Bernhard GSD Mitglied
Beiträge: 482 Registriert: 29.08.2002 AutoCAD 2020(Deu); Windows 10 PRO x64(Deu)
|
erstellt am: 02. Jul. 2004 08:05 <-- editieren / zitieren --> Unities abgeben: Nur für Semml01
Das mit _UCS _W und _UCS _P wäre doch eleganter mit (TRANS pt from to) zu lösen. Beispiel: (defun C:ZoomO ( / AUSWAHL INDEX elem xmin xmax MINX MAXX MINY MAXY) (if(or(and(setq AUSWAHL (ssget "I"))(>(sslength AUSWAHL) 0)) (and(setq AUSWAHL (ssget)) (>(sslength AUSWAHL) 0)) ) (progn (setvar "Pickfirst" 1) ;;; (command "_ucs" "_W") (setq INDEX -1) (repeat (sslength AUSWAHL) (setq ELEM(ssname AUSWAHL(setq INDEX (1+ INDEX)))) (vla-getboundingbox (vlax-ename->vla-object elem) 'xmin 'xmax ) (if (= INDEX 0) (progn (setq MINX (car (vlax-safearray->list xmin))) (setq MINY (cadr(vlax-safearray->list xmin))) (setq MAXX (car (vlax-safearray->list xmax))) (setq MAXY (cadr(vlax-safearray->list xmax))) ) (progn (if (<(car (vlax-safearray->list xmin)) MINX)(setq MINX (car (vlax-safearray->list xmin)))) (if (<(cadr(vlax-safearray->list xmin)) MINY)(setq MINY (cadr(vlax-safearray->list xmin)))) (if (>(car (vlax-safearray->list xmax)) MAXX)(setq MAXX (car (vlax-safearray->list xmax)))) (if (>(cadr(vlax-safearray->list xmax)) MAXY)(setq MAXY (cadr(vlax-safearray->list xmax)))) ) ) ) (command "_.zoom" "_w" (TRANS (list MINX MINY) 0 1)(TRANS (list MAXX MAXY) 0 1)) ;;; (command "_ucs" "_V") ) ) )
------------------ Gruß aus Wien Bernhard Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13508 Registriert: 30.11.2003 Hinweis: Meine Mitarbeit auf CAD.DE ist fakultativ, unentgeltlich und beruht nur auf einem ausgeprägtem Helfersyndrom.
|
erstellt am: 02. Jul. 2004 09:00 <-- editieren / zitieren --> Unities abgeben: Nur für Semml01
ok... setz ich noch einen drauf (falls einer was gegen command hat ) die Zeile (command "_.zoom" "_w" (TRANS (list MINX MINY) 0 1)(TRANS (list MAXX MAXY) 0 1)) durch (vl-catch-all-error-p (vl-catch-all-apply 'vla-ZoomWindow (list (vlax-get-acad-object) (vlax-3D-Point(TRANS (list MINX MINY) 0 1)) (vlax-3D-Point(TRANS (list MAXX MAXY) 0 1)) ) ) ) ersetzen. (vl-load-com) nicht vergessen! ...und Pickfirst im Proggi zu setzen macht eigentlich auch keinen rechten Sinn. ------------------ - Thomas - Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CB_ Mitglied Bauingenieur
Beiträge: 163 Registriert: 20.01.2004 ACAD 2002, W2k, P4 1800Mhz, 512 MB RAM, 20GB HD, Matrox, 2 Bildschirme
|
erstellt am: 02. Jul. 2004 14:07 <-- editieren / zitieren --> Unities abgeben: Nur für Semml01
@cadwiesel klar merke ich noch was, nur so wie es vorher war klappte es bei mir jedenfalls nicht. selbst wenn der befehl auf englisch eingegeben wurde, funktioniert die eingabe der parameter nur auf deutsch... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
vision Mitglied
Beiträge: 113 Registriert: 27.10.2003 AutoCAD 2015 Expresstools Windows 10
|
erstellt am: 26. Jul. 2004 15:50 <-- editieren / zitieren --> Unities abgeben: Nur für Semml01
Hallo, habe mal in dem Lisp von CADwiesel den ZOOM-Befehl gegen einen BREAK-Befehl getauscht. Wenn ein Element (z.B. ein Kreis, Block) auf einer Linie ist, wird die Linie nun passend zum Element gebrochen. (defun C:ZoomO ( / elem p0 p1 obj) (vl-load-com) (if(setq elem (ssget "_:S")) (progn (setq elem (ssname elem 0)) (vla-getboundingbox (vlax-ename->vla-object elem) 'xmin 'xmax ) ;_ ende von vla-getboundingbox (setq p0 (vlax-safearray->list xmin)) ;Punkt links unten (setq p1 (vlax-safearray->list xmax)) ;Punkt rechts oben
(setq obj (entsel "\n Bruchlinie wählen: ")) (command "_BREAK" obj "e" p0 p1) ) ) (princ) )
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13508 Registriert: 30.11.2003 Hinweis: Meine Mitarbeit auf CAD.DE ist fakultativ, unentgeltlich und beruht nur auf einem ausgeprägtem Helfersyndrom.
|
erstellt am: 26. Jul. 2004 16:30 <-- editieren / zitieren --> Unities abgeben: Nur für Semml01
.. nicht dein Ernst,oder? mal ein BSP: (defun C:boundingbox ( / elem p0 p1 obj) (vl-load-com) (if(setq elem (ssget "_:S")) (progn (setq elem (ssname elem 0)) (vla-getboundingbox (vlax-ename->vla-object elem) 'xmin 'xmax ) (setq p0 (vlax-safearray->list xmin)) (setq p1 (vlax-safearray->list xmax)) (command "_line" P0 P1 "") ) (princ) ) ) zeichnet dir nur eine diagonale der "Boundingbox" un die Endpunkte dieser Diagonale nutzt du für den Breakbefehl.... Teste mal deine Routine an einem Dreieck und einer schräg in der ebene verlaufenden Gerade...und??? ------------------ - Thomas - Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |