| |
| 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: Genauigkeit von Command Linie abhängig von Zoomstatus (1215 mal gelesen)
|
Uwe. Mitglied Student
Beiträge: 5 Registriert: 08.06.2007 ACAD 2004
|
erstellt am: 05. Sep. 2007 13:18 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich befasse mich seit kurzem mit AutoLisp, ich möchte einfache Geometrien zeichnen lassen! Das klappt soweit gut (siehe Bsp. "linien.lsp"). Vorgehensweise: bei geöffnetem ACAD 2004 -> AutoLisp -> Laden ... dann "A" starten des Programms Problem ist: wenn vor Start des Programms der Zoombereich groß ist, d.h. herausgezoomt, zeichnet AutoCAD sehr ungenau, d.h. anstatt die Phasen mit 1,2mm zu zeichnen, werden diese eng beieinander liegenden Punkte als ein Punkt gewertet, so scheint es. Es entsteht somit eine falsche Geometrie! Ist vorher auf ein bestimmtes Maß herangezoomt, z.B. an Koordinatenursprung, klappt´s einwandfrei! Was ist die Ursache? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
joern bosse Ehrenmitglied Dipl.-Ing. Vermessung
Beiträge: 1763 Registriert: 11.10.2004 Window 11 ACAD 2021 CIVIL 2021 BricsCAD ab V14 11th Gen Intel(R) Core(TM) i7-1165G7 @ 2.80GHz 2.80 GHz 32.0GB RAM NVIDIA GeForce MX450<P>
|
erstellt am: 05. Sep. 2007 13:29 <-- editieren / zitieren --> Unities abgeben: Nur für Uwe.
|
CAD-Huebner Ehrenmitglied V.I.P. h.c. Verm.- Ing., ATC-Trainer
Beiträge: 9803 Registriert: 01.12.2003 One AutoCAD 2.5 - 2024, AutoCAD, Civil 3D, Win10/Win11
|
erstellt am: 05. Sep. 2007 13:30 <-- editieren / zitieren --> Unities abgeben: Nur für Uwe.
|
tunnelbauer Ehrenmitglied V.I.P. h.c. Bauingenieur
Beiträge: 7085 Registriert: 13.01.2004 ich hab eh keine Probleme damit...
|
erstellt am: 05. Sep. 2007 13:33 <-- editieren / zitieren --> Unities abgeben: Nur für Uwe.
Und bei Gelegenheit auch sauberer programmieren... Was soll das Code:
(command "")
bewirken?Desweiteren: einmal steht linie drin - dann wieder _arc; dieses babylonische Sprachgewirr vereinheitlichen... ------------------ Grüsse Thomas [Diese Nachricht wurde von tunnelbauer am 05. Sep. 2007 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Uwe. Mitglied Student
Beiträge: 5 Registriert: 08.06.2007 ACAD 2004
|
erstellt am: 05. Sep. 2007 14:02 <-- editieren / zitieren --> Unities abgeben:
Danke für die Antworten! Es funktioniert jetzt prima. Sorry für das Programmierwirrwarr (habe mal optimiert ), komme nich wirklich mit der AutoCAD-Hilfe zurecht! Und sonst finde ich auch keine Hilfen... Ich würde gern die gezeichnete Geometrie an der y-Achse spiegeln! Welchen Befehl führe ich wie aus? _mirror ? Spiegelachse wäre '(0 0) und '(0 10) zum Beispiel. Danke im voraus... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 05. Sep. 2007 14:07 <-- editieren / zitieren --> Unities abgeben: Nur für Uwe.
(command "_mirror" (ssget "_X" (list(cons 410 (getvar "CTAB")))) "" '(0 0 0) '(0 10 0) "_n") und Hilfe, um sich Autolisp anzueignen findest du u.a.hier P.S. Code in der Sysinfo ist nicht so prickelnd .. da ist wohl was schief gelaufen?! ------------------ - 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 |
fuchsi Mitglied Programmierer c#.net Datawarehouse
Beiträge: 1201 Registriert: 14.10.2003 AutoCad Version 2012 deu/enu <P>Windows 7 64bit
|
erstellt am: 05. Sep. 2007 14:28 <-- editieren / zitieren --> Unities abgeben: Nur für Uwe.
Zitat: Original erstellt von Uwe.: Ich würde gern die gezeichnete Geometrie an der y-Achse spiegeln! Welchen Befehl führe ich wie aus? _mirror ? Spiegelachse wäre '(0 0) und '(0 10) zum Beispiel.Danke im voraus...[/B]
(setq OldOsmode (getvar "OSMODE")) (setvar "OSMODE" 0) (setq P0 '(3 0 0) P1 '(30 0 0) P2 '(30 15 0) P3 '(45 15 0) P4 '(45 40 0) P5 '(43 42 0) P6 '(43 40 0) P7 '(28 42 0) P8 '(26.8 43.2 0) P9 '(26.8 95 0) P10 '(28 96.2 0) P11 '(68 96.2 0) P12 '(68 110 0) P13 '(100 110 0))
(setq LastObj (entlast)) (while (and LastObj (entnext LastObj)) (setq LastObj (entnext LastObj))) (command "._line" P0 P1 "") (command "._line" P3 P4 "") (command "._line" P9 P10 P11 P12 P13 "") (command "._line" P5 P7 "") (command "._line" P7 P8 P9 "") (command "._arc" P4 "_c" P6 P5 "") (command "._arc" P1 "_c" P2 P3 "") (command "._arc" '(0 -3 0) "_c" '(0 0 0) P0) (command "._mirror") (while (if LastObj (setq Lastobj (entnext LastObj)) (setq LastObj (entnext))) (command LastObj) ) (command "" (list 0 0) (list 0 10) "_no") (setvar "OSMODE" OldOsmode) ------------------ Ing. Anton Fuchs WWW.FFZELL.AT.TC Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Uwe. Mitglied Student
Beiträge: 5 Registriert: 08.06.2007 ACAD 2004
|
erstellt am: 05. Sep. 2007 15:01 <-- editieren / zitieren --> Unities abgeben:
@fuchsi Danke funzt super! Steige zwar noch nicht hinter den ablauf der schleife, ich weiß nur das "entlast" das letzte Element aufruft, und dann immer das vorherige oder so... naja bis alle "selektiert" sind... @CADmium: erklär mal die Systemvariable "CTAB" und was soll "410" bedeuten? Besten Dank
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 05. Sep. 2007 15:05 <-- editieren / zitieren --> Unities abgeben: Nur für Uwe.
(getvar "CTAB") = aktuelles Layout (ssget "_X" (list(cons 410 (getvar "CTAB")))) = alle Objekte im aktuellen Layout wählen ------------------ - 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 |
Uwe. Mitglied Student
Beiträge: 5 Registriert: 08.06.2007 ACAD 2004
|
erstellt am: 05. Sep. 2007 15:06 <-- editieren / zitieren --> Unities abgeben:
|
fuchsi Mitglied Programmierer c#.net Datawarehouse
Beiträge: 1201 Registriert: 14.10.2003 AutoCad Version 2012 deu/enu <P>Windows 7 64bit
|
erstellt am: 05. Sep. 2007 15:07 <-- editieren / zitieren --> Unities abgeben: Nur für Uwe.
Zitat: Original erstellt von Uwe.: @fuchsiDanke funzt super! Steige zwar noch nicht hinter den ablauf der schleife, ich weiß nur das "entlast" das letzte Element aufruft, und dann immer das vorherige oder so... naja bis alle "selektiert" sind... @CADmium: erklär mal die Systemvariable "CTAB" und was soll "410" bedeuten? Besten Dank
CTAB gibt dir den aktuellen Bereich zurück (z.B.: Model, Layout1 , Layout2 usw.) dieser Berreich ist bei jedem Objekt unter dem Gruppencode 410 verspeichert. Das heisst jedes Objekt im Modellbereich hat unter dem Gruppencode 410 der Wert Model verspeichert. mit demm (SSget "X" (list (cons 410 (getvar "CTAB")))) bekommst du alle Objekte des gerade aktiven Berreichs. In deinem Fall würde diese Methode nur funktionieren, wenn du ausser deinen per Lisp erzeugten Objekten sonst NICHTS in der zeichnung hast, sonst werden nämlich alle im aktuellen bereich befindlichen Objekte gespiegelt. ------------------ Ing. Anton Fuchs WWW.FFZELL.AT.TC Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
fuchsi Mitglied Programmierer c#.net Datawarehouse
Beiträge: 1201 Registriert: 14.10.2003 AutoCad Version 2012 deu/enu <P>Windows 7 64bit
|
erstellt am: 05. Sep. 2007 15:18 <-- editieren / zitieren --> Unities abgeben: Nur für Uwe.
Na dann gehen wir mal, eineige inge Schritt für Schritt durch (setq OldOsmode (getvar "OSMODE")) (setvar "OSMODE" 0) Merken des alten Objektfanges und Löschen des Objektfanges (setq LastObj (entlast)) Merken des letzten Objektes. Alle nachfolgenden Objekte sind dann von deinem LISP erzeugt worden Hier gibt es 3 Möglichkeiten, die zu beachten sind 1. Zeichnung ist leer die Variable LastObj = nil 2. Das letzte Objekt war ein INSERT mit Attributen -> Es gibt noch NachfolgeObjekte 3. Das letzte Objekt ist irgenein sonstiges AutocadObjekt -> Es gibt keine Nachfolgeobjekte (while (and LastObj (entnext LastObj)) (setq LastObj (entnext LastObj))) Wegen dieser drei Möglichkieten diese Schleife Sollange eine Schleife durchlaufen, solange (entnext LastObj) noch Objekte zurückgibt. Damit werden bei Blöcken mit Attributen auch die Attribute durchlaufen. Am Ende der Schleife zeigt die Variable LastObj auf das SEQUEND des Blockes und damit wirklich auf das allerletzte Objekt in der datenbank Würde man das nicht beachten, würde sonst der Block mit den Attributen auch mitgespiegelt werden. (and LastObj (entnext LastObj)) Die AND Verknüpfung in der Scheifenbedingung ist deshalb, wenn die zeichnung leer ist, ist die Variable LastObj nil, darum auch in der Schleifenbedingung berücksichtigt.
........
(command "._mirror") Start des Befehls spiegeln. Autocad Befehle über Command müssen nicht abgeschlossen werden, sondern können mit nachfolgenden Commands weietr abgearbeietet werden. (while (if LastObj (setq Lastobj (entnext LastObj)) (setq LastObj (entnext)))
Hier jetzt alle Objekte nach dem letzten Objekt einzeln durchlaufen. War es eine leere zeichnung wird begonnen mit (setq LastObj (entnext)) ansonsten mit setq LastObj (entnext LastObj)) Entnext gibt einfach das in der datenbank als nächstes gespeicherte Objekt zurück. Ohne Argumnet aufgerudfen gibt es das erste Objekt zurück. (das ja logischerweise dann dein erstes per Lisp erzeugte Linie ist, da ja die zeichnung leer war) (command LastObj) die einzelnen Objekte nacheinander der Spiegeln Objektwahl übergeben.
) (command "" (list 0 0) (list 0 10) "_no") Den befehl Spiegeln dann anschliessen. (setvar "OSMODE" OldOsmode) Objektfang auf den gemerkten zurücksetzten
------------------ Ing. Anton Fuchs WWW.FFZELL.AT.TC
[Diese Nachricht wurde von fuchsi am 05. Sep. 2007 editiert.] [Diese Nachricht wurde von fuchsi am 05. Sep. 2007 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Uwe. Mitglied Student
Beiträge: 5 Registriert: 08.06.2007 ACAD 2004
|
erstellt am: 05. Sep. 2007 15:35 <-- editieren / zitieren --> Unities abgeben:
|