| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| Request a special discount on NVIDIA RTX 5000 Ada Generation GPU !, eine Pressemitteilung
|
Autor
|
Thema: Anfängerproblem Punkte auswählen Objektfang (956 mal gelesen)
|
KeMü Mitglied Straßenplaner
Beiträge: 5 Registriert: 19.02.2008 AUTODESK CIVIL 3D 2007 SP3 Aufsatz: VESTRA Civil 3D 2007 MS Windows 2000 Professional SP4
|
erstellt am: 19. Feb. 2008 17:28 <-- editieren / zitieren --> Unities abgeben:
Hallo Forum, ich bin gerade an meinen ersten Lisp-Schritten und mache wahrscheinlich einen grundlegenden Anfängerfehler. Im Forum und meinen Büchern habe ich dazu auch nichts gefunden, vielleicht kann mir ja hier jemand helfen? Ich habe eine Lisp geschrieben, die mir die Neigung zwischen zwei Punkten in Prozent genau in die 2D-Mitte zweier Punkte als Text ausliest. Zum Testen habe ich mir eine 3D-Linie gezeichnet. Nach dem Start der Lisp-Datei werde ich aufgefordert zwei Punkte einzugeben. Wenn ich die Punkte frei wähle (oder mit "nächster Punkt"), plaziert mir das Programm den gewünschten Text genau zwischen die Punkte. Wenn ich diese Punkte jedoch mit dem Objektfang Endpunkt auswähle (und alle anderen Fangmodi ausgeschaltet sind), wird der neue Text auf die Koordinate eines der beiden ausgewählten Punkte gesetzt und nicht auf die berechnete Mitte (pt3). Anscheinend wird die richtig? ermittelte Koordinate von pt3 dann im command "Text" ignoriert? So sieht meine Lisp aus: (defun c:test (/ ech ang pt1 pt2 pt3 x1 y1 x2 y2 x3 y3 ) (setq ech (getvar "CMDECHO")) (setvar "CMDECHO" 0) (princ "\n Angabe über %-Neigung zweischen zwei Punkten") (princ "\n Wert wird als Text in die Mitte der Punkte gesetzt") (SETQ pt1 (getpoint "\nErster Punkt:")) (SETQ pt2 (getpoint pt1 "\nZweiter Punkt:")) ;xy Koordinaten der Punkte filtern (ein anderer Weg wäre über "Polar") (SETQ x1 (car pt1)) (SETQ y1 (cadr pt1)) (SETQ x2 (car pt2)) (SETQ y2 (cadr pt2)) ;pt3 2D-Mittelpunkt zwischen den zwei gewählten Punkten (SETQ X3 (/ (+ X1 X2) 2.0)) (SETQ y3 (/ (+ y1 y2) 2.0)) (SETQ pt3 (list x3 y3)) ;Testausdruck zu Prüfen von pt3-Koordinate (princ pt3) ;Text wird auf den 2D-Mittelpunkt der angetippten Punkte gesetzt ;; Prozent ist noch ein Platzhalter (command "text" pt3 "2" "0" "Prozent") (setvar "CMDECHO" ech) (princ) ) Kann mich jemand einlispen? Danke Kerstin Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
tunnelbauer Ehrenmitglied V.I.P. h.c. Bauingenieur
Beiträge: 7085 Registriert: 13.01.2004 ich hab eh keine Probleme damit...
|
erstellt am: 19. Feb. 2008 17:50 <-- editieren / zitieren --> Unities abgeben: Nur für KeMü
ergänze dein Tool um folgende fett gedruckten Zeilen: Code:
(defun c:test (/ ech ang pt1 pt2 pt3 x1 y1 x2 y2 x3 y3 ) (setq ech (getvar "CMDECHO")) (setvar "CMDECHO" 0) (setq oldsnco (getvar "OSNAPCOORD")) (setvar "OSNAPCOORD" 0) (princ "\n Angabe über %-Neigung zweischen zwei Punkten") (princ "\n Wert wird als Text in die Mitte der Punkte gesetzt") (SETQ pt1 (getpoint "\nErster Punkt:")) (SETQ pt2 (getpoint pt1 "\nZweiter Punkt:")) ;xy Koordinaten der Punkte filtern (ein anderer Weg wäre über "Polar") (SETQ x1 (car pt1)) (SETQ y1 (cadr pt1)) (SETQ x2 (car pt2)) (SETQ y2 (cadr pt2)) ;pt3 2D-Mittelpunkt zwischen den zwei gewählten Punkten (SETQ X3 (/ (+ X1 X2) 2.0)) (SETQ y3 (/ (+ y1 y2) 2.0)) (SETQ pt3 (list x3 y3)) ;Testausdruck zu Prüfen von pt3-Koordinate (princ pt3) ;Text wird auf den 2D-Mittelpunkt der angetippten Punkte gesetzt ;; Prozent ist noch ein Platzhalter (command "text" pt3 "2" "0" "Prozent") (setvar "CMDECHO" ech) (setvar "OSNAPCOORD" oldsnco) (princ) )
------------------ Grüsse Thomas Korrekturen zum Kochbuch AutoLISP Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KeMü Mitglied Straßenplaner
Beiträge: 5 Registriert: 19.02.2008 AUTODESK CIVIL 3D 2007 SP3 Aufsatz: VESTRA Civil 3D 2007 MS Windows 2000 Professional SP4
|
erstellt am: 19. Feb. 2008 18:21 <-- editieren / zitieren --> Unities abgeben:
Danke für die schnell Antwort. Das Umstellen der Objektfangpriorität hat leider auch nicht geholfen. Aber es hat mich auf die Idee gebracht den OSNAP zu ändern: (setvar "OSMODE" 75) (Endpunkt, Punkt, Mitte, Basis) Damit geht es jetzt meisten, aber nicht immer. Was ich nicht wirklich begreife, was aber für die Anwendung vorerst reicht. Wenn OSMODE z.B. auf 1 (Endpunkt) steht, wird der Text immer auf die Koordinate des ersten ausgewählten Punktes (pt1)und nicht auf den berechneten Punkt pt3 gesetzt, seltsam. Vielleicht weiß ja noch jemand den Grund, ich würde das ja gerne verstehen. Gruß Kerstin Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
tunnelbauer Ehrenmitglied V.I.P. h.c. Bauingenieur
Beiträge: 7085 Registriert: 13.01.2004 ich hab eh keine Probleme damit...
|
erstellt am: 19. Feb. 2008 18:27 <-- editieren / zitieren --> Unities abgeben: Nur für KeMü
Ja - ein anderer Grund dafür ist (du kannst es mal testen in dem du OSNAPCOORD händisch auf 0 stellst), dass deine OSnaps nicht richtig gesetzt sind. Das bedeutet: Zum einen musst du die "Osnaps" ausschalten und zum anderen musst die "Running OSnaps" einschalten. Zitat:
Type: Integer Saved in: Registry Initial value: 4133Sets running Object Snap modes using the following bitcodes: 0 NONe 1 ENDpoint 2 MIDpoint 4 CENter 8 NODe 16 QUAdrant 32 INTersection 64 INSertion 128 PERpendicular 256 TANgent 512 NEArest 1024 QUIck 2048 APParent Intersection 4096 EXTension 8192 PARallel
To specify more than one object snap, enter the sum of their values. For example, entering 3 specifies the Endpoint (bitcode 1) and Midpoint (bitcode 2) object snaps. Entering 16383 specifies all object snaps. When object snaps are switched off using the Osnap button on the status bar, a bitcode of 16384 (0x4000) is returned, in addition to the normal value of OSMODE. With this additional value, developers can write applications for AutoCAD, and distinguish this mode from Object Snap modes that have been turned off from within the Drafting Settings dialog box. Setting this bit toggles running object snaps off. Setting OSMODE to a value with this bit off toggles running object snaps on.
Somit kommt hinzu:
Code:
(setvar "OSMODE" (logior (getvar "OSMODE") 16384)) (einführend)bzw. (setvar "OSMODE" (logand (getvar "OSMODE") 16383)) (abschließend)
------------------ Grüsse Thomas Korrekturen zum Kochbuch AutoLISP Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KeMü Mitglied Straßenplaner
Beiträge: 5 Registriert: 19.02.2008 AUTODESK CIVIL 3D 2007 SP3 Aufsatz: VESTRA Civil 3D 2007 MS Windows 2000 Professional SP4
|
erstellt am: 19. Feb. 2008 19:10 <-- editieren / zitieren --> Unities abgeben:
Mensch bist du schnell! Das händische Umstellen des OSNAPCOORD auf 0 ändert leider auch nichts. Wenn ich den OSMODE auf 1 setze, ist doch der Running Osnap richtig auf Endpunkt gesetzt? Mit (setvar "OSMODE" (logior (getvar "OSMODE") 16384) schalte ich den fortlaufenden OFANG doch ganz aus? Und müsste bei jeder Auswahl den temporären Objektfang z.B. auf Endpunkt setzen, da wir dieses Tool später wahrscheinlich sehr häufig benutzen, wäre das sehr aufwändig (aber besser als nichts) bzw. vielleicht habe ich dich auch nicht ganz richtig verstanden? Mit freundlichem Gruß Kerstin Werde mich jetzt auf ins Kino machen, vielleicht bekomme ich den Kopf dann frei)
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KeMü Mitglied Straßenplaner
Beiträge: 5 Registriert: 19.02.2008 AUTODESK CIVIL 3D 2007 SP3 Aufsatz: VESTRA Civil 3D 2007 MS Windows 2000 Professional SP4
|
erstellt am: 20. Feb. 2008 10:21 <-- editieren / zitieren --> Unities abgeben:
Ich habe noch etwas gebastelt und es funktioniert, wenn: (setvar "OSNAPCOORD" 1) also die Skribteingabe Vorrang hat, ich nehme an, dass meine Lisp so einer Art Skribt ist. Jetzt funktioniert es einwandfrei und die im command übergebene Koordinate wird auch immer benutzt. Vielen Dank für die Hilfe Kerstin Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADchup Ehrenmitglied V.I.P. h.c.
Beiträge: 3336 Registriert: 14.03.2001 Sicher ist, dass nichts sicher ist. Selbst das nicht. Joachim Ringelnatz
|
erstellt am: 20. Feb. 2008 10:23 <-- editieren / zitieren --> Unities abgeben: Nur für KeMü
|