| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Linie auf der Letzter Punkt(lastpoint) liegt wählen (1809 mal gelesen)
|
dan_rather Mitglied Techniker HLK
Beiträge: 97 Registriert: 09.12.2003
|
erstellt am: 06. Mai. 2005 11:54 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, wahrscheinlich ist es wie so oft sehr einfach für den der es weiß ;-). Wie kann ich di Linie auswählen auf der mein letzter Punkt (getvar"lastpoint") liegt wählen d.h. quasi "picken"? So gehts nicht: (setq t_2 (car(entsel (getvar "lastpoint")))) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
gmk Mitglied Dipl.-Ing.(FH) Vermessung
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: 06. Mai. 2005 12:47 <-- editieren / zitieren --> Unities abgeben: Nur für dan_rather
|
dan_rather Mitglied Techniker HLK
Beiträge: 97 Registriert: 09.12.2003
|
erstellt am: 06. Mai. 2005 13:02 <-- editieren / zitieren --> Unities abgeben:
|
dan_rather Mitglied Techniker HLK
Beiträge: 97 Registriert: 09.12.2003
|
erstellt am: 06. Mai. 2005 13:16 <-- editieren / zitieren --> Unities abgeben:
Hier mal der ganze Code: die Variable t_2 soll das objekt sein auf dem der letzte Punkt liegt. Code: (vl-load-com) (setq osmode_save(getvar "OSMODE")) (setvar "OSMODE" 576) (princ "\nText wählen") (while (setq OBJEKT (ssget "_:S" '((0 . "*TEXT")))) (setq OBJEKT (ssname OBJEKT 0)) (command "_.copy" OBJEKT "" (if (= (cdr (assoc 0 (entget OBJEKT))) "MTEXT") (cdr (assoc 10 (entget OBJEKT))) (cdr (assoc (if (< 0 (cdr (assoc 72 (entget OBJEKT)))) 11 10 ) ;_ end of if (entget OBJEKT) ) ;_ end of assoc ) ;_ end of cdr ) ;_end of if PAUSE ) ;_ end of command (command "_.ddedit" (entlast)) (command) ; ) ;_ end of progn (setq text (entget(entlast))) (setq tb (- (car(cadr(setq a(textbox text))))(car(car a)))) ;(setq tb (- (car(cadr(setq a(textbox(entget(car(entsel"\nText wählen")))))))(car(car a)))) (setq tbg (/ tb 2)) (setq abst (+ tbg 25)) (princ (Cdr(ENTGET (SSNAME (SSGET (GETVAR "lastpoint"))0)))) (setq t_2 (car (entsel"\nzu brechende Linie wählen"))); H I E R soll ;die Linie gewählt sein!! (setvar "OSMODE" 64) (setq schn(getvar "lastpoint")) (setvar "OSMODE" 0) (command "_break" T_2 (vlax-curve-getPointAtDist (vlax-ename->vla-object t_2) (- (vlax-curve-getDistAtPoint (vlax-ename->vla-object t_2) schn)abst)) (vlax-curve-getPointAtDist (vlax-ename->vla-object t_2) (+ abst (vlax-curve-getDistAtPoint (vlax-ename->vla-object t_2)schn)))) (setvar "OSMODE" 576) ) (setq osmode_save nil t2 nil schn nil abst nil text nil) (setvar "OSMODE" osmode_save))
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
gmk Mitglied Dipl.-Ing.(FH) Vermessung
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: 06. Mai. 2005 13:35 <-- editieren / zitieren --> Unities abgeben: Nur für dan_rather
|
dan_rather Mitglied Techniker HLK
Beiträge: 97 Registriert: 09.12.2003
|
erstellt am: 06. Mai. 2005 13:41 <-- editieren / zitieren --> Unities abgeben:
Mein letztes Elemen ist der kopierte Text. (Hast Du das Prog mal ausgeführt?) Der letzte Punkt ist der Punkt wo ich den Text absetze. Mit deinem Code kommt bei mir auch die Meldung zurück das das Letzte Element der Text ist. Ich möchte aber die Linie wählen auf dem Text abgesetzt wird! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
gmk Mitglied Dipl.-Ing.(FH) Vermessung
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: 06. Mai. 2005 14:00 <-- editieren / zitieren --> Unities abgeben: Nur für dan_rather
schau mal in der hilfe unter ssget. laspoint bezieht sich bei ssget offensichtlich nur auf das letzte element in der datenbank, und das ist bei dir der text. teste doch mal ssget mit _c und hol dir die strecke aus dem auswahlsatz. ciao georg Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
dan_rather Mitglied Techniker HLK
Beiträge: 97 Registriert: 09.12.2003
|
erstellt am: 06. Mai. 2005 14:07 <-- editieren / zitieren --> Unities abgeben:
wenn ich die linie nochmal wähle gehts natürlich, egal ob über entsel oder ssget "_c". Aber das ist ja gerade das was ich nicht will. Gibts nicht ne möglichkeit Acad zu sagen "nimm die Linie auf die ich zuletzt geklickt habe"? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
gmk Mitglied Dipl.-Ing.(FH) Vermessung
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: 06. Mai. 2005 15:10 <-- editieren / zitieren --> Unities abgeben: Nur für dan_rather
|
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13508 Registriert: 30.11.2003 .
|
erstellt am: 06. Mai. 2005 19:12 <-- editieren / zitieren --> Unities abgeben: Nur für dan_rather
vielleicht hilft's : (defun c:test(/ AWS) (princ "\nText wählen") (while (setq OBJEKT (ssget "_:S" '((0 . "*TEXT")))) (setq OBJEKT (ssname OBJEKT 0)) (command "_.copy" OBJEKT "" (if (= (cdr (assoc 0 (entget OBJEKT))) "MTEXT") (cdr (assoc 10 (entget OBJEKT))) (cdr (assoc (if (< 0 (cdr (assoc 72 (entget OBJEKT)))) 11 10 ) ;_ end of if (entget OBJEKT) ) ) ) PAUSE ) (command "_.ddedit" (entlast)"") (setq text (entget(entlast))) (if(setq AWS (ssget "_c" (mapcar '+(getvar "LASTPOINT")'(0.1 0.1 0.1)) (mapcar '-(getvar "LASTPOINT")'(0.1 0.1 0.1)) '((0 . "*LINE")) ) ) (progn (setq Linie(ssname AWS 0)) (redraw LINIE 3) ;einfach nur mal ausleuchten ) ) ) ) die Hilfe sagt zwar auch : (setq pt2 '(5.0 5.0 0.0)) .... (setq ss1 (ssget pt2)) .... Creates a selection set of an object passing through point (5,5) Mir erscheint die Variante mit _c trotz Objektfang usw. aber besser. ------------------ - 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 |
gmk Mitglied Dipl.-Ing.(FH) Vermessung
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: 09. Mai. 2005 09:13 <-- editieren / zitieren --> Unities abgeben: Nur für dan_rather
eine lösung wäre noch ein eigener punktfang. (defun pf ( / obj) (SETQ obj (ENTSEL)) (SETQ ele (CAR obj)) (CADR obj) ) ele als globale variable definieren = line oder pline die du angeklickt hast (CADR obj) koordianten des klickpunktes zum verschieben des textes und unterbrechen der linie. punkt evtl. mit inters oder vlax-curve-getClosestPointTo noch auf die linie schieben. ciao georg Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
dan_rather Mitglied Techniker HLK
Beiträge: 97 Registriert: 09.12.2003
|
erstellt am: 09. Mai. 2005 09:55 <-- editieren / zitieren --> Unities abgeben:
@Thomas, geht leider nicht @Georg, Natürlich könnte ich ein Fenster aufziehen. Es geht mir aber darum möglichst wenig Benutzeraktionen ausführen zu müssen(Tempogewinn). Danke an alle für die Hilfe Gruß Dan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
joern bosse Ehrenmitglied Dipl.-Ing. Vermessung
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: 09. Mai. 2005 10:46 <-- editieren / zitieren --> Unities abgeben: Nur für dan_rather
|
CADwiesel Moderator CAD4FM UG
Beiträge: 1968 Registriert: 05.09.2000 AutoCAD, Bricscad Wir machen das Mögliche unmöglich
|
erstellt am: 09. Mai. 2005 11:07 <-- editieren / zitieren --> Unities abgeben: Nur für dan_rather
|
dan_rather Mitglied Techniker HLK
Beiträge: 97 Registriert: 09.12.2003
|
erstellt am: 09. Mai. 2005 11:33 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von joern bosse: Hallo Dan, was geht denn an Thomas seiner Variante nicht?? Bei mir klappt es und ich würde es auch so machen.
Hallo joern, Was heißt es klappt? Hast Du das ganze Prog getestet oder nur einen Auszug daraus? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
joern bosse Ehrenmitglied Dipl.-Ing. Vermessung
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: 09. Mai. 2005 12:51 <-- editieren / zitieren --> Unities abgeben: Nur für dan_rather
Hallo Dan, ich habe das Programm durchlaufen lassen, nachdem ich die Auswahl der Linie über einen Auswahlsatzt mit (ssget "_c" ... erstellt habe. Die Linie wurde an der Position des kopierten Textes aufgebrochen. Was nicht funktioniert hat: -Auswahl von MText -wenn der Textwert nicht geändert wird, wird die Linie nicht aufgebrochen -beim zurücksichern der Sysdtemvariablen "OSMODDE" darf die Variable osmode_save vorher nicht nil gesetzt werden. Ich füge mal den geänderte Code bei: (defun c:test ( / aws) (vl-load-com) (setq osmode_save(getvar "OSMODE")) (setvar "OSMODE" 576) (princ "\nText wählen") (while (setq OBJEKT (ssget "_:S" '((0 . "*TEXT")))) (setq OBJEKT (ssname OBJEKT 0)) (command "_.copy" OBJEKT "" (if (= (cdr (assoc 0 (entget OBJEKT))) "MTEXT") (cdr (assoc 10 (entget OBJEKT))) (cdr (assoc (if (< 0 (cdr (assoc 72 (entget OBJEKT)))) 11 10 ) ;_ end of if (entget OBJEKT) ) ;_ end of assoc ) ;_ end of cdr ) ;_end of if PAUSE ) ;_ end of command (command "_.ddedit" (entlast)) (command) ; ) ;_ end of progn (setq text (entget(entlast))) (setq tb (- (car(cadr(setq a(textbox text))))(car(car a)))) ;(setq tb (- (car(cadr(setq a(textbox(entget(car(entsel"\nText wählen")))))))(car(car a)))) (setq tbg (/ tb 2)) (setq abst (+ tbg 25)) (princ (Cdr(ENTGET (SSNAME (SSGET (GETVAR "lastpoint"))0)))) (setq aws (ssget "_c" (mapcar '(lambda(A) (- A 0.01)) (GETVAR "lastpoint")) (mapcar '(lambda(A) (+ A 0.01)) (GETVAR "lastpoint")) ;(list(cons 0 "*LINE")) )) (if (=(sslength aws)1) (progn ;(setq t_2 (car (entsel"\nzu brechende Linie wählen"))); H I E R soll ;die Linie gewählt sein!! (setvar "OSMODE" 64) (setq schn(getvar "lastpoint")) (setvar "OSMODE" 0) (command "_break" (ssname aws 0) (vlax-curve-getPointAtDist (vlax-ename->vla-object (ssname aws 0)) (- (vlax-curve-getDistAtPoint (vlax-ename->vla-object (ssname aws 0)) schn)abst)) (vlax-curve-getPointAtDist (vlax-ename->vla-object (ssname aws 0)) (+ abst (vlax-curve-getDistAtPoint (vlax-ename->vla-object (ssname aws 0))schn)))) (setvar "OSMODE" 576) )) ) (setvar "OSMODE" osmode_save) (setq osmode_save nil t2 nil schn nil abst nil text nil) )
------------------ viele Grüße Jörn Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Methods & Process Engineer ? Product Configurator Merlin (m/w/d) | Innovative Produkte für namhafte Kunden in einem zukunftsorientierten, internationalen Markt ? das ist SÜSS MicroTec. Die SÜSS-Gruppe mit Hauptsitz in Garching bei München entwickelt und fertigt Prozesslösungen für die Mikrostrukturanwendungen in der Halbleiterindustrie und verwandten Märkten ? ein Bereich, in dem SÜSS MicroTec über 75 Jahre Erfahrung verfügt. Unser Portfolio umfasst ein breites ... | Anzeige ansehen | Prozessmanagement |
|
dan_rather Mitglied Techniker HLK
Beiträge: 97 Registriert: 09.12.2003
|
erstellt am: 09. Mai. 2005 13:03 <-- editieren / zitieren --> Unities abgeben:
|