Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Genauigkeit von Command Linie abhängig von Zoomstatus

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:  Genauigkeit von Command Linie abhängig von Zoomstatus (1156 mal gelesen)
Uwe.
Mitglied
Student

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

Beiträge: 5
Registriert: 08.06.2007

ACAD 2004

erstellt am: 05. Sep. 2007 13:18    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


Linien.lsp.txt

 
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


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

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: 05. Sep. 2007 13:29    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 Uwe. 10 Unities + Antwort hilfreich

Hallo Uwe,
nur so auf Verdacht:
setze mal OSNAPCOORD auf 1 oder deaktiviere vor dem Programmdurchlauf den Objektfang.

------------------
viele Grüße

Jörn

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

CAD-Huebner
Ehrenmitglied V.I.P. h.c.
Verm.- Ing., ATC-Trainer



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

Beiträge: 9732
Registriert: 01.12.2003

One AutoCAD 2.5 - 2023, Civil 3D, Win10/win11

erstellt am: 05. Sep. 2007 13:30    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 Uwe. 10 Unities + Antwort hilfreich

Evt. Objektfang vorher ausschalten?

------------------
Mit freundlichem Gruß

Udo Hübner

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

tunnelbauer
Ehrenmitglied V.I.P. h.c.
Bauingenieur



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

Beiträge: 7085
Registriert: 13.01.2004

ich hab eh keine Probleme damit...

erstellt am: 05. Sep. 2007 13:33    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 Uwe. 10 Unities + Antwort hilfreich

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

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

Beiträge: 5
Registriert: 08.06.2007

ACAD 2004

erstellt am: 05. Sep. 2007 14: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

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




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

Beiträge: 13508
Registriert: 30.11.2003

.

erstellt am: 05. Sep. 2007 14:07    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 Uwe. 10 Unities + Antwort hilfreich

(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


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

Beiträge: 1201
Registriert: 14.10.2003

AutoCad Version 2012 deu/enu
<P>Windows 7 64bit

erstellt am: 05. Sep. 2007 14: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 Nur für Uwe. 10 Unities + Antwort hilfreich

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

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

Beiträge: 5
Registriert: 08.06.2007

ACAD 2004

erstellt am: 05. Sep. 2007 15:01    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

@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




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

Beiträge: 13508
Registriert: 30.11.2003

.

erstellt am: 05. Sep. 2007 15:05    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 Uwe. 10 Unities + Antwort hilfreich

(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

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

Beiträge: 5
Registriert: 08.06.2007

ACAD 2004

erstellt am: 05. Sep. 2007 15: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

[Diese Nachricht wurde von Uwe. am 05. Sep. 2007 editiert.]

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

fuchsi
Mitglied
Programmierer c#.net Datawarehouse


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

Beiträge: 1201
Registriert: 14.10.2003

AutoCad Version 2012 deu/enu
<P>Windows 7 64bit

erstellt am: 05. Sep. 2007 15:07    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 Uwe. 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von Uwe.:
@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


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


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

Beiträge: 1201
Registriert: 14.10.2003

AutoCad Version 2012 deu/enu
<P>Windows 7 64bit

erstellt am: 05. Sep. 2007 15:18    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 Uwe. 10 Unities + Antwort hilfreich

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

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

Beiträge: 5
Registriert: 08.06.2007

ACAD 2004

erstellt am: 05. Sep. 2007 15:35    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

Vielen Dank! 

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