Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  GC 62

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:  GC 62 (2024 mal gelesen)
marvin101010
Mitglied
ingenieur der architektur ohne diplom, bauzeichner ohne lehre, cad-admin ohne wissen :-)


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

Beiträge: 562
Registriert: 22.01.2003

Pentium 4
Windows XP
Autocad 2002
Autocad 2002LT + Extender
ADT 3.3
ArchiCAD

erstellt am: 06. Feb. 2003 18: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

hallöle allerseits

hab ein problem mit dem gc 62...
er funzt bei "lwpolylines" nich
normahl?????
wenn ja, wie komm ich dann an farbe,
wenn nein...sch****

danke

------------------
alle wege führen nach rom, bis auf den mittleren!

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

Brischke
Moderator
CAD on demand GmbH




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

Beiträge: 4171
Registriert: 17.05.2001

AutoCAD 20XX, defun-tools (d-tools.eu)

erstellt am: 06. Feb. 2003 19:47    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 marvin101010 10 Unities + Antwort hilfreich

Hallo Marvin,

wenn die 62 nicht existiert, dann ist das VONLAYER. Was funktioniert denn nicht?

Grüße Holger

------------------
Holger Brischke
CADlon - Lisp over night!
Wieder 2 neue Tool's im FreeDownload
Wissen wie es gemacht wird? Jetzt Quellcode für die Hälfte

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

marvin101010
Mitglied
ingenieur der architektur ohne diplom, bauzeichner ohne lehre, cad-admin ohne wissen :-)


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

Beiträge: 562
Registriert: 22.01.2003

Pentium 4
Windows XP
Autocad 2002
Autocad 2002LT + Extender
ADT 3.3
ArchiCAD

erstellt am: 07. Feb. 2003 13:25    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 holger...

hatte das problem ähnlich schon mal, damals musste ich dann die
polylinien allerdings sowieso auflösen und ich bin der sache
nicht mehr nachgegangen.
"normale" linien konnte ich dank benwischs hilfe ändern, hier sein
text.

"wenn ein objekt eine "farbe" von layer hat, dann existiert auch kein gruppencode 62 !!
du muß also eine routine einbauen, die überprüft, ob der gruppencode 62 vorh. ist.
wenn ja, dann geht auch (subst neu alt liste).
wenn nicht, dann den gruppencode einbauen, also so z.b.

(setq temp (cons 62 farbwert)
      neu (cons temp neu )
)                              "

diesmal hat sich das problem eigentlich auch wieder erledigt,
allerdings bin ich jetzt neugierig geworden.
wenn kein gc 62 vorhanden ist hab ich damit bei linien, kreisen ect.
keine probleme.
'LWPOLYLINES' jedoch bekomm ich damit nich geändert...komisch!!


------------------
alle wege führen nach rom, bis auf den mittleren!

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

Brischke
Moderator
CAD on demand GmbH




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

Beiträge: 4171
Registriert: 17.05.2001

AutoCAD 20XX, defun-tools (d-tools.eu)

erstellt am: 07. Feb. 2003 22: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 Nur für marvin101010 10 Unities + Antwort hilfreich

Hallo Marvin,

das finde ich auch komisch, der Fehler muß an einer anderen Stelle sein. Wie sieht denn Dein Code aus?

Grüße Holger

------------------
Holger Brischke
CADlon - Lisp over night!
Wieder 2 neue Tool's im FreeDownload
Wissen wie es gemacht wird? Jetzt Quellcode für die Hälfte

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

marvin101010
Mitglied
ingenieur der architektur ohne diplom, bauzeichner ohne lehre, cad-admin ohne wissen :-)


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

Beiträge: 562
Registriert: 22.01.2003

Pentium 4
Windows XP
Autocad 2002
Autocad 2002LT + Extender
ADT 3.3
ArchiCAD

erstellt am: 09. Feb. 2003 18:59    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

@ holger

hatte keinen zur hand, weil ich ihn im moment wie gesagt nicht
brauche, wird aber sicher kommen!!!

habe jetzt mal nen ganz einfachen gebastelt und mit linien, kreisen
und polylinien getestet.
das ergebnis war wie gehabt...linien und kreise wurden blau,
polylinien blieben böllig unberührt.

ähhhm...mir ist bewusst, dass dieser code mindestens vier "setq"
zuviel beinhaltet....seid gnädig ;-)


(defun c:TEST (/ ausw neu temp z)

        (setq z 0)
        (while (= ausw nil)
              (setq ausw (ssget '((0 . "lwpolyline"))))
              (if (= ausw nil) (princ "KEINE POLYLINIE GEWÄHLT"))
        )
        (while (sslength ausw)
              (setq neu  (entget (ssname ausw z))
                    temp (cons 62 5)
                    neu  (cons temp neu)
                    z    (+ z 1)
              )
              (entmod neu)
        )
)

------------------
alle wege führen nach rom, bis auf den mittleren!

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

benwisch
Mitglied
Bautechniker, CAD-Konstrukteur


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

Beiträge: 375
Registriert: 01.02.2001

erstellt am: 10. Feb. 2003 13:49    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 marvin101010 10 Unities + Antwort hilfreich

hi marvin
ich bin zwar auch noch ein "padawan", doch ich habe was ähnliches programmiert und leide unter demselben prob.

...also mal in unserem jugendlichen leichtsinn....prüfen...prüfen...prüfen...und

Code:
(defun C:TEST (/ AUSW NEU TEMP Z)

  (setq Z 0)
  (while (= AUSW NIL)
    (setq AUSW (ssget '((0 . "lwpolyline"))))
    (if (= AUSW NIL)
      (princ "KEINE POLYLINIE GEWÄHLT")
      ) ;_ end if
    ) ;_ end while
  (repeat (sslength AUSW) ;_ ----------------------------->while in repeat geändert
    (setq NEU  (entget (ssname AUSW Z))
          TEMP (list (cons 62 5)) ;_ ----------------------->geändert
          NEU  (append NEU TEMP) ;_ ----------------------->geändert
          Z    (+ Z 1)
          ) ;_ end setq
    (entmod NEU)
    ) ;_ end repeat
  (princ)
  )


was habe ich gemacht...
cons fügt einen wert immer an den ersten platz der liste ein (also nth 0). wenn wir nun diese liste der poly-obj's "entmoden" oder auch mal "entmaken" so gibt autocad nur ein nil aus ! ich interpretiere hieraus einen fehler (die liste soll ja ausgegeben werden im ausgabefenster).
also dachte ich, hänge es an mittels append  (ojeee mapcar's augen rollen sich :-)) und das klappt (siehe hierzu aber auch die variable temp ->list). vermutlich darf vor (-1 . <Objektname: 4178e740> ) nix stehen.

[Diese Nachricht wurde von benwisch am 10. Februar 2003 editiert.]

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

marc.scherer
Ehrenmitglied V.I.P. h.c.
CAD-Administrator



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

Beiträge: 2490
Registriert: 02.11.2001

Windows 10 64bit
AutoCAD Architecture 2018/2019 (deu/eng)
AEC-Collection 2019 (Revit und Zeugs)
Wenn sich's nicht vermeiden läßt:
D-A-CH Erweiterung (mies implementierter Schrott)

erstellt am: 10. Feb. 2003 17:43    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 marvin101010 10 Unities + Antwort hilfreich

Hi,
wenn Du das append weg haben willst:
Code:

(setq NEU  (reverse (entget (ssname AUSW Z)))
      TEMP (cons 62 5)
      NEU  (reverse (cons TEMP NEU))
      Z    (+ Z 1)
)

Und ist das: "Z (+ Z 1)" jetzt wo Du repeat verwendest nicht total überflüssig?

------------------
Ciao,
Marc

[Diese Nachricht wurde von marc.scherer am 10. Februar 2003 editiert.]

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

marvin101010
Mitglied
ingenieur der architektur ohne diplom, bauzeichner ohne lehre, cad-admin ohne wissen :-)


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

Beiträge: 562
Registriert: 22.01.2003

Pentium 4
Windows XP
Autocad 2002
Autocad 2002LT + Extender
ADT 3.3
ArchiCAD

erstellt am: 10. Feb. 2003 17:52    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

ok...seh schon, war doch nich so einfach, dass ich
von selber hätte draufkommen können...
dank euch allen, wird mir bald tierisch helfen!!!

------------------
alle wege führen nach rom...bis auf den mittleren!

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

benwisch
Mitglied
Bautechniker, CAD-Konstrukteur


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

Beiträge: 375
Registriert: 01.02.2001

erstellt am: 10. Feb. 2003 19:11    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 marvin101010 10 Unities + Antwort hilfreich

Zitat:

wenn Du das append weg haben willst:
Code:

(setq NEU  (reverse (entget (ssname AUSW Z)))
      TEMP (cons 62 5)
      NEU  (reverse (cons TEMP NEU))
      Z    (+ Z 1)

)



*klatsch auf die stirn*
so genial wie simpel !!
Zitat:

Und ist das: "Z (+ Z 1)" jetzt wo Du repeat verwendest nicht total überflüssig?
(ssname ausw z)) <--- brauch' ich das nicht darfür, wenn es mehrere obj's sind ??
habe das deswegen in repeat umgewandelt, weil ich mit der while methode eine fehlermeldung am schluß bekam --> ; Fehler: Fehlerhafter Argumenttyp: lentityp nil


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

marc.scherer
Ehrenmitglied V.I.P. h.c.
CAD-Administrator



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

Beiträge: 2490
Registriert: 02.11.2001

Windows 10 64bit
AutoCAD Architecture 2018/2019 (deu/eng)
AEC-Collection 2019 (Revit und Zeugs)
Wenn sich's nicht vermeiden läßt:
D-A-CH Erweiterung (mies implementierter Schrott)

erstellt am: 11. Feb. 2003 08:49    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 marvin101010 10 Unities + Antwort hilfreich

Hi,
*klatsch auf die stirn mit'm Hammer*
sorry, da war ich mit meiner Kritik zu voreilig, habe nur drauf geachtet, daß das while ja jetzt weg ist...
Nix für ungut.

------------------
Ciao,
Marc

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

mapcar
Mitglied
CADmin



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

Beiträge: 1250
Registriert: 20.05.2002

Time flies like an arrow, fruit flies like a banana (Groucho Marx)

erstellt am: 11. Feb. 2003 14:20    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 marvin101010 10 Unities + Antwort hilfreich

Hi Leute,

übertreibt's nicht: (append) ist ja nicht eine unbrauchbare Funktion! Man muss nur die Zusammenhänge kennen. In diesem Fall ist append effektiver! Bei jedem Aufruf von append muss einmal die Liste von Anfang bis Ende durchlaufen werden, um das Ende zu finden und dranhängen zu können. Es wird aber nur ein einziges Pair drangehängt, also bleibt es bei diesem einen Durchlauf. Die Konstruktion mit dem doppelten reverse muss aber zweimal durch!

Die Erklärung, warum die Farbe nicht am Listenanfang stehen darf, liegt in den 100ern SubclassMarkern begründet. Eine Datenliste für eine Polylinie ist so aufgebaut:

( <allgemeine Daten...> (100 . "AcDbEntity") <Entity-Daten ...>
(100 . "AcDbPolyline") <polyline-Daten ...> )

GC 62 gilt für alle (grafischen!) Entities, also muss er irgendwo nach (100 . "AcDbEntity") und vor (100 . "AcDbPolyline") kommen.
Die Gruppencodes sind ja keineswegs fest - GC11 ist bei einer Linie was anderes als bei einem Text. Deswegen muss die Reihenfolge (...(100 . "AcDbLine)...(10 ...)...) gewahrt werden. Ein entmake mit (...(10 ...)...(100 . "AcDbLine)...) sollte eigentlich gar nicht funktionieren, da GC10 nicht für AcDbEntity, sondern für AcDbLine definiert ist. In der Praxis geht das meiste dann doch - aber eben nicht alles. Was AutoCAD da durchgehen lässt und was nicht, ist manchmal undurchsichtig.

Gruss, Axel

------------------
http://www.tutorial.autolisp.info

http://www.advanced.autolisp.info


http://www.activex.autolisp.info

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

marc.scherer
Ehrenmitglied V.I.P. h.c.
CAD-Administrator



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

Beiträge: 2490
Registriert: 02.11.2001

Windows 10 64bit
AutoCAD Architecture 2018/2019 (deu/eng)
AEC-Collection 2019 (Revit und Zeugs)
Wenn sich's nicht vermeiden läßt:
D-A-CH Erweiterung (mies implementierter Schrott)

erstellt am: 11. Feb. 2003 14:31    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 marvin101010 10 Unities + Antwort hilfreich

Hi,
die Frage stellt sich dann natürlich, ist ein append schneller als zwei reverse?
Ist reverse mit append vergleichbar?
Wie verhalten die sich zueinander?

------------------
Ciao,
Marc

[Diese Nachricht wurde von marc.scherer am 11. Februar 2003 editiert.]

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

marc.scherer
Ehrenmitglied V.I.P. h.c.
CAD-Administrator



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

Beiträge: 2490
Registriert: 02.11.2001

Windows 10 64bit
AutoCAD Architecture 2018/2019 (deu/eng)
AEC-Collection 2019 (Revit und Zeugs)
Wenn sich's nicht vermeiden läßt:
D-A-CH Erweiterung (mies implementierter Schrott)

erstellt am: 11. Feb. 2003 18: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 marvin101010 10 Unities + Antwort hilfreich

Hi,
bei einem Versuch mit 10.000.000 Wiederholungen ergab sich ein Verhältnis Append/2xReverse = 0.725488.
Append ist in diesem Fall also mal schneller.
(Eigentlich logisch, wie Axel schon sagte...)

Bei nur einem reverse: 1.25815, aber mit nur einem geht's halt net.


------------------
Ciao,
Marc

[Diese Nachricht wurde von marc.scherer am 11. Februar 2003 editiert.]

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

mapcar
Mitglied
CADmin



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

Beiträge: 1250
Registriert: 20.05.2002

Time flies like an arrow, fruit flies like a banana (Groucho Marx)

erstellt am: 12. Feb. 2003 10: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 marvin101010 10 Unities + Antwort hilfreich

Lisp hat immer nur einen Zeiger auf den Anfang einer Liste. Bei einem
Append muss also (n - 1) mal der Zeiger auf das nächste Listenelement umgesetzt werden, um auf das letzte Element zu kommen (n ist die Länge der Liste). Dann erst hat der Interpreter das Ende gefunden, und es kommt noch eine Operation hinzu, um das neue Element anzuhängen. Es spielt keine Rolle, ob das anzuhängende Element ein Atom oder eine Liste ist. Also: Ein Append bei Länge n benötigt genau n Operationen.

Ein Reverse ist komplexer: Für das Durchlaufen der Input-Liste werden
ebenso n Operationen gebraucht. Gleichzeitig wird eine Kopie angelegt,
wobei hier eine Op für das Kopieren eines Elements hinzukommt sowie
eine weitere Op für das Umsetzen des Zeigers in der Output-Liste. Ein
Reverse benötigt also 3*n Operationen, d.h. es benötigt die dreifache
Zeit eines Append.

Schlimm wird's, wenn mit Append eine Liste sukzessive aufgebaut wird -
nehmen wir als Länge n mal 1000 Elemente an. Am Anfang hat die Liste
die Länge 1, dann 2, dann 3 usw. Jedesmal muss die Liste wieder von
vorn durchlaufen werden, denn es gibt in Lisp keinen Zeiger, der das
Ende einer Liste zwischenspeichert.

Anschauliches Beispiel: Ich möchte bei einer Party meinen Gästen den
Weg verschönern, indem ich auf jede Stufe meiner Treppe ein Teelicht
stelle. Die Kiste mit den Teelichten steht am oberen Ende, und ich nehme immer eines heraus, mache es an und bringe es zu der entsprechenden Stufe. Wenn ich im Hochparterre wohne und es nur 7 Stufen sind - kein Problem. Wenn ich aber im vierten Stock wohne, dann werde ich im Erdegeschoss ganz schön kämpfen müssen!

Statt Append kann man eine Liste aber auch mit cons aufbauen und sie
zum Schluss mit reverse umkehren. Das entspricht der deutlich besseren
Entscheidung, sich die Kiste mit den Teelichten unter den Arm zu klemmen und auf dem Weg zur Haustür immer eines abzusetzen. Den Weg habe ich jetzt nur einmal - allerdings muss ich zum Schluss mit dem Karton wieder nach oben (ich will ja schliesslich selbst auch an meiner Party teilnehmen). Dieser Rückweg entspricht genau dem Reverse am Schluss.

Wenn man Details unter den Tisch kehrt, wird die Cons-Methode doppelt
so teuer, wenn die Treppe/Liste doppelt so lang wird. Daher sagt man,
die Rechenzeit steigt linear an. Bei der Append-Methode ist keine
Linearität gegeben - die Rechenzeit steigt wesentlich drastischer:
Nach der Gaussschen Summenformel sind es (n+1)*(n/2) Operationen.
Bei n=1000 wird mit Append die Liste also in 500500 Ops aufgebaut,
mit der Cons-Methode sind es 3n + n Ops, also 4000. Das macht doch
einen Unterschied, oder? Wer's nicht glaubt, bitte die Beispiele
mit den Teelichten in einem 10stöckigen Haus praktisch nachvollziehen;-)

Diese Werte sind theoretisch - bei kurzen Listen spielen hier auch noch viele andere Faktoren eine Rolle (Funktionsoverhead usw.). Je länger die Listen werden, umso weniger spielen solche Dinge eine Rolle. Lässt man Details wie absolute Summanden und Koeffizienten auch noch weg, ergibt sich eine Cons:Append-Verhalten wie n:n².

Cons ist die grundlegende Funktion, auf der sozusagen die ganze Sprache Lisp aufgebaut ist. Append dient zwar auch einem guten Zweck, ist aber letztendlich überflüssig. In kleinen Lisp-Interpretern (z.B. für Online-Zwecke) ist Append nicht als interne Funktion definiert, sondern wird einfach in die reverse/cons/reverse-Methode aufgelöst. Das kostet bei sehr kurzen Listen ein paar Mikrosekunden, und fertig.

Alles klar?

------------------
http://www.tutorial.autolisp.info

http://www.advanced.autolisp.info


http://www.activex.autolisp.info

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

marc.scherer
Ehrenmitglied V.I.P. h.c.
CAD-Administrator



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

Beiträge: 2490
Registriert: 02.11.2001

Windows 10 64bit
AutoCAD Architecture 2018/2019 (deu/eng)
AEC-Collection 2019 (Revit und Zeugs)
Wenn sich's nicht vermeiden läßt:
D-A-CH Erweiterung (mies implementierter Schrott)

erstellt am: 12. Feb. 2003 10:53    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 marvin101010 10 Unities + Antwort hilfreich

Hi Axel,
"Alles klar?"
Natürlich, wollte ich auch gerade schreiben... ;-).

------------------
Ciao,
Marc

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

benwisch
Mitglied
Bautechniker, CAD-Konstrukteur


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

Beiträge: 375
Registriert: 01.02.2001

erstellt am: 12. Feb. 2003 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 marvin101010 10 Unities + Antwort hilfreich

puhhh....
ich glaube, ich hab's gefressen und weil mein skript ja nur kleine "äpfel" hat, habe ich mich auch für das append entschieden...

mein skript, welches ich unten anhänge, setzt alle gewählten objekte auf die aktuellen eigenschaften, also der umgekehrte fall von meinem bw_set_act skript (im forum "RuA"zu finden), welches die eigenschaften von einem objekt als aktuell für neue setzt (dropdownlisten, farbe, layer ...). allerdings werden alle poly's auf die "tblsearch" einstellungen gesetzt, da ich irgendwie bei diesen dingern nix auf "vonlayer" entmoden oder entmaken kann (elemente werden korrekt aus der liste entnommen aber beim übertragen ignoriert). Weiterhin habe ich über not-listen bestimmt, daß blöcke,bemassungen und führungen nicht berücksichtigt werden (gab bei mir prob's).
ja, und weil ich neugierig war, habe ich dann mal versucht, einen ganzen plan, also rund 8000 objekte auf einmal zu bearbeiten. um den fortlauf zu beobachten habe ich den fortschrittsbalken (acet-uni-process) eingebaut. hierbei konnte ich gut sehen, wo das skript stockt.....es waren schraffuren, was aber wohl eher am skalierfaktor (stichwort: importierung) lag.
kurioserweise wollen nicht alle objekte entmaked oder entmoded werden, poly's wollen entmoded werden und alle andere entmake ich. hängt wohl mit dem ändern und dem hinzufügen der obj-liste zusammen.

@mapcar
danke für diese ausführliche info und den anschaulichen bsp... :-)

@marvin
vielleicht kannste was mit desem skript anfangen...
die variablen an anfang können ja auch auf feste werte gesetzt werden.

Code:

(defun C:BW_SETPROP2OBJ
      (/ OBJ ELIST X LAYER LTFAKTOR COLOR LTYPE WEIGHT)
  (setq LAYER    (getvar "clayer")
        COLOR    (getvar "cecolor")
        LTYPE    (getvar "celtype")
        WEIGHT  (getvar "celweight")
        LTFAKTOR (getvar "celtscale")
        X        0
        ) ;_ end setq
  (if (/= (strcase COLOR) (strcase "ByLayer"))
    (setq COLOR (atoi COLOR))
    (setq COLOR 0) ;_ wenn von Layer, für einfachere Abfragung
    ) ;_ end if
  (if (= (strcase LTYPE) (strcase "ByLayer"))
    (setq LTYPE 0)
    ) ;_ end if
  (while (not (setq OBJ (ssget '((-4 . "<NOT")
                                (0 . "INSERT") ;_keine Blöcke
                                (-4 . "NOT>")
                                (-4 . "<NOT")
                                (0 . "DIMENSION") ;_keine Bemassung
                                (-4 . "NOT>")
                                (-4 . "<NOT")
                                (0 . "LEADER") ;_keine Führung
                                (-4 . "NOT>")
                                )
                              ) ;_ end ssget
                    ) ;_ end setq
              ) ;_ end not
    (princ "\nDie Auswahlliste ist leer...versuch's nochmal.")
    ) ;_ end while
  (command "_UNDO" "_MARK") ;_ Marke für Rückgängig
  (acet-ui-progress "Arbeite..." (sslength OBJ)) ;_ Bestimme Balkenlänge
  (repeat (sslength OBJ)
    (setq ELIST (entget (ssname OBJ X)))
    ;; Beginn ...
    (setq ELIST (BW_SUPPE ELIST 8 LAYER)) ;_Layer
    ;; ***************************
    (if (assoc 62 ELIST) ;_ prüfen ob obj überhaupt eine farbe hat !
      (cond
        ((= COLOR 0) (setq ELIST (BW_REMOVE ELIST (assoc 62 ELIST))))
        ((/= COLOR 0) (setq ELIST (BW_SUPPE ELIST 62 COLOR)))
        ) ;_ end cond
      (cond ((/= COLOR 0) (setq ELIST (BW_APFEL ELIST 62 COLOR))))
      ) ;_ end if
    ;; ***************************
    (if (assoc 6 ELIST)
      (cond ((= LTYPE 0) (setq ELIST (BW_REMOVE ELIST (assoc 6 ELIST))))
            ((/= LTYPE 0) (setq ELIST (BW_SUPPE ELIST 6 LTYPE)))
            ) ;_ end cond
      (cond ((/= LTYPE 0) (setq ELIST (BW_APFEL ELIST 6 LTYPE))))
      ) ;_ end if
    ;; ***************************
    (if (assoc 370 ELIST)
      (setq ELIST (BW_SUPPE ELIST 370 WEIGHT))
      (setq ELIST (BW_APFEL ELIST 370 WEIGHT))
      ) ;_ end if
    ;; ***************************
    (if (assoc 48 ELIST)
      (cond ((= (assoc 48 ELIST) LTFAKTOR)
            (setq ELIST (BW_REMOVE ELIST (assoc 48 ELIST)))
            )
            ((/= (assoc 48 ELIST) LTFAKTOR)
            (setq ELIST (BW_SUPPE ELIST 48 LTFAKTOR))
            )
            ) ;_ end cond
      (cond ((/= (assoc 48 ELIST) LTFAKTOR)
            (setq ELIST (BW_APFEL ELIST 48 LTFAKTOR))
            )
            ) ;_ end cond
      ) ;_ end if
    (if (and (/= (cdr (assoc 0 ELIST)) "POLYLINE")
            (/= (cdr (assoc 0 ELIST)) "LWPOLYLINE")
            ) ;_ end and
      (progn (entmake ELIST) (entdel (ssname OBJ X))) ;_ Alle nicht Poly's werden neu erstellt
      (entmod ELIST) ;_ Alle Poly's werden modifiziert
      ) ;_ end if
    (setq X (1+ X))
    (acet-ui-progress -1) ;_ Balken animieren
    ) ;_ end repeat
  (acet-ui-progress) ;_ Balken schließen
  (princ)
  ) ;_ end defun

;;; SUBS ***************

(defun BW_REMOVE (LISTE ELEMENT / TEMPLI)
  (if (and (/= (cdr (assoc 0 ELIST)) "POLYLINE")
          (/= (cdr (assoc 0 ELIST)) "LWPOLYLINE")
          ) ;_ end and
    (progn (foreach ITEM LISTE
            (if (/= ITEM ELEMENT)
              (setq TEMPLI (append TEMPLI (list ITEM)))
              ) ;_ end if
            ) ;_ end foreach
          ) ;_ end progn
    (BW_SUPPE LISTE
              (car ELEMENT)
              (cdr (assoc (car ELEMENT) (tblsearch "LAYER" LAYER)))
              ) ;_ end BW_APFEL
    ) ;_ end if
  ) ;_ end defun
(defun BW_SUPPE (LISTE GRGC ELEMENT)
  (subst (cons GRGC ELEMENT) (assoc GRGC LISTE) LISTE)
  ) ;_ end defun
(defun BW_APFEL (LISTE GRGC ELEMENT)
  (append LISTE (list (cons GRGC ELEMENT)))
  ) ;_ end defun
(princ
  "\nAktuelle Eigenschaften auf andere Objekte zuweisen - START: bw_setprop2obj\n¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯"
  ) ;_ end princ



Nachtrag...aktueller linientypfaktor (celtscale + GC48) funzt jetzt auch...

[Diese Nachricht wurde von benwisch am 13. Februar 2003 editiert.]

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