Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Simulation beschleunigen / command Befehl ersetzen

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
Autor Thema:   Simulation beschleunigen / command Befehl ersetzen (1418 mal gelesen)
THE_ONE
Mitglied
Student, Alter:23


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

Beiträge: 299
Registriert: 27.04.2005

AMD XP 2000, 512MB-RAM, WIN XP Pro
Readon 9600Pro
VIZ 2005, Autocad 2007,(Mechanical)

erstellt am: 09. Jun. 2009 17: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

Hallo!

Habe hier eine kleine Simulation mit Lisp geschrieben! Habe später vor etwas größeres (aufwendigeres) zu machen.

Code:
(defun C:Dreh(/ x)
  (setq x 30)
  ;(command "_.pline" "950,500" "1050,500" "1000,500" "1000,550" "1000,450" "")
  (command "_.rectang" "975,475" "1025,525")
  (command "_.pline" "950,500" "1050,500" "1050,550" "1000,550" "1000,450" "950,450" "950,550" "1050,550" "1050,450" "1000,450" "")
  (setq y 0)
  (while (<= y 89)
(command "_.rotate" (entlast) "" "1000,500" "1")
    (setq y (+ y 1))
      (command "_delay" x)
  )
)

Das Problem ist nur dass es schon jetzt teilweise stockt und nicht fließend läuft. Kann mir jemand sagen wie ich das ganze beschleunigen kann sodass es nicht mehr ruckelt? Ich glaube es liegt am rotate command, weiß aber nicht durch was ich diesen ersetzen könnte. Hab schon mal hier gelesen das alle command Befehle langsam sind. Wie tritt man dem entgegen.

Lg THE_ONE

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: 13435
Registriert: 30.11.2003

.

erstellt am: 09. Jun. 2009 17:09    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 THE_ONE 10 Unities + Antwort hilfreich

du kannst ENTMAKE und ENTDEL nutzen oder dir GRDRAW angucken ...

------------------
  - 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

THE_ONE
Mitglied
Student, Alter:23


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

Beiträge: 299
Registriert: 27.04.2005

AMD XP 2000, 512MB-RAM, WIN XP Pro
Readon 9600Pro
VIZ 2005, Autocad 2007,(Mechanical)

erstellt am: 10. Jun. 2009 00:08    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

Hier nun mein heutiges Ergebnis.
    
Habe lange gebraucht da ich nicht wirklich gewusst habe, wie ich bei meiner Polylinie alle Koordinatenelemente am einfachsten bekomme (da alle mit 10 beginnen und assoc ja nur das erste liefert), um diese dann durch neue (gedrehte) zu ersetzen.

Wäre daher über jeden Verbesserungsvorschlag dankbar.
Außerdem ruckelt es beim ersten Durchlauf noch immer. Beim Zweiten läuft es dann aber einigermaßen flüssig wie man sehen kann.
Wollte außerdem noch das eine Schraffur (die Fläche die vom mittleren und dem fette Quadrat eingeschlossen wird) mitrotiert, aber das war mir dann doch etwas zuviel, da sich ja die Gestalt der Schraffur laufend ändert.      - Daher lass ich es mal so wie es ist.
Lg THE_ONE

Code:

(defun C:Dreh(/ x)
   (setq time 40)
   (command "_UCS" "_w")
   (setq xm 1000.0)
   (setq ym 500.0)
   (command "_.rectang" "975,475" "1025,525")

  (setq coor (list
    (list 950.0 500.0 )
    (list 1050.0 500.0)
    (list 1050.0 550.0)
    (list 1000.0 550.0)
    (list 1000.0 450.0)
    (list 950.0 450.0 )
    (list 950.0 550.0 )
    (list 1050.0 550.0)
    (list 1050.0 450.0)
    (list 1000.0 450.0)
    )
)
(setvar "clayer" "2")
;;Kann man das besser machen??????
(command "_.pline")
(foreach x coor
(command x)
)
(command "")
(setvar "clayer" "0")

(setq ed (entget(entlast))) ;; grab polyline

(setvar "clayer" "1")
   (command "_.rectang" (list xm ym) (list (+ xm 50.0) (+ ym 50.0)) )
   (setq big (entget(entlast)))
(setvar "clayer" "0")

 
(setq winkel (/ (* 1.0 PI) 180.0) )
(setq y 1)

;;jetzt wird einmal im Kreis rotiert

(while  (<= y 360)
(progn
  (setq ed (rotate xm ym winkel ed))
  (setq big (rotate xm ym winkel big))
 
  (setq small_ed ed)
  (setq y (1+ y))
  ;(entmod ed)
  (command "_delay" time)
  )
)
)

(defun rotate (x1 y1 angle1 object)
(setq small_ed object)
(while (/= (assoc 10 small_ed) nil)
   (progn
   (setq x (cdr(assoc 10 small_ed)))

   (setq object (subst (list 10 (+ (* (- (car x) x1) (cos angle1)) (* -1.0 (- (cadr x) y1) (sin angle1)) x1)
         (+ (* (- (car x) x1) (sin angle1)) (* (- (cadr x) y1) (cos angle1)) y1)
)
(assoc 10 small_ed )
object ))
   (setq small_ed (cdr (member (assoc 10 small_ed) small_ed)) )
  )
)
(entmod object)
)



[Diese Nachricht wurde von THE_ONE am 10. Jun. 2009 editiert.]

[Diese Nachricht wurde von THE_ONE am 10. Jun. 2009 editiert.]

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

THE_ONE
Mitglied
Student, Alter:23


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

Beiträge: 299
Registriert: 27.04.2005

AMD XP 2000, 512MB-RAM, WIN XP Pro
Readon 9600Pro
VIZ 2005, Autocad 2007,(Mechanical)

erstellt am: 10. Jun. 2009 00:22    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

Doppelpost - bitte löschen

[Diese Nachricht wurde von THE_ONE am 10. Jun. 2009 editiert.]

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: 10. Jun. 2009 08:27    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 THE_ONE 10 Unities + Antwort hilfreich

Wenn du ein Foto von einem Schloß machen möchtest, drehst du dann das Schloß oder wechselst du den Standort?

------------------
Grüsse

Thomas

Korrekturen zum Kochbuch AutoLISP

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: 13435
Registriert: 30.11.2003

.

erstellt am: 10. Jun. 2009 08: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 Nur für THE_ONE 10 Unities + Antwort hilfreich

ok .. mal eine etwas universellere Rotatefunktion ....

(vl-load-com)
(defun ROTATE (OBJ PKT DELTA DELAY / ENDE)
  (if(and(setq OBJ(cond
                    ((=(type OBJ)'VLA-OBJECT)OBJ)
                    ((=(type OBJ)'ENAME)(vlax-ename->vla-object OBJ))
                  )
        )
        (numberp DELTA)
        (numberp DELAY)
        (=(type PKT) 'LIST)
        (=(length PKT) 3)
        (vl-every 'numberp PKT)
    )
   
    (repeat 1000
      (vla-rotate OBJ (vlax-3d-point PKT) DELTA)
      (vla-update OBJ)
      (setq ENDE (+(getvar "MILLISECS")DELAY))
      (While(<(getvar "MILLISECS")ENDE))   
    ) 
  )

Aufruf z.B.
       
(ROTATE
  (car(entsel"\nObjekt wählen:"))
  (getpoint "\nDrehpunkt wählen: ")
  (*(/ 1.0 180.0)PI)
  10

------------------
  - 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

THE_ONE
Mitglied
Student, Alter:23


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

Beiträge: 299
Registriert: 27.04.2005

AMD XP 2000, 512MB-RAM, WIN XP Pro
Readon 9600Pro
VIZ 2005, Autocad 2007,(Mechanical)

erstellt am: 10. Jun. 2009 10:44    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

Wahnsinn! Wie du das immer hin bekommst.  Du brauchst zum effektiven rotieren nur eine Zeile:    
Leider bekomme ich beim ausführen:
Code:
; error: bad argument type: listp 40
 
hab dann nachgeschaut wo der Fehler ist. Und zwar ist das der DELAY wert, also wenn ich das ausführe:
Code:
(ROTATE
  (car(entsel"\nObjekt wählen:"))
  (getpoint "\nDrehpunkt wählen: ")
  (*(/ 1.0 180.0)PI)
  50


bekomme ich
Code:
; error: bad argument type: listp 50

Mit numberp prüfst du das ja ab, verstehe daher nicht warum der Fehler kommt.

[Diese Nachricht wurde von THE_ONE am 10. Jun. 2009 editiert.]

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: 13435
Registriert: 30.11.2003

.

erstellt am: 10. Jun. 2009 11: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 Nur für THE_ONE 10 Unities + Antwort hilfreich

.... den Fehler kann ich mit dem Code nicht nachvollziehen .. sorry ...

------------------
  - 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

THE_ONE
Mitglied
Student, Alter:23


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

Beiträge: 299
Registriert: 27.04.2005

AMD XP 2000, 512MB-RAM, WIN XP Pro
Readon 9600Pro
VIZ 2005, Autocad 2007,(Mechanical)

erstellt am: 10. Jun. 2009 11:08    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

Sorry meine Blödheit natürlich funktioniert dein Code - Unities sind unterwegs.         

Von wo hast du eigentlich die Systemvariable "MILLISECS" her. Die ist nirgends dokumentiert. Startet die in dem Moment wo ACAD gestartet wird?

 

Zitat:

Nachtrag: Infos dazu habe ich hier gefunden -> http://ww3.cad.de/foren/ubb/Forum145/HTML/002385.shtml

Danke an CADmium für seine tolle und hilfreiche Arbeit hier im Board.


[Diese Nachricht wurde von THE_ONE am 10. Jun. 2009 editiert.]

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: 13435
Registriert: 30.11.2003

.

erstellt am: 10. Jun. 2009 11:14    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 THE_ONE 10 Unities + Antwort hilfreich

na dann mußt du die funktion auch mit rotate2 aufrufen ...sonst wird deine alte genommen die zufällig rotate heißt ... 

------------------
  - 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

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)2020 CAD.de | Impressum | Datenschutz