Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Programmierstil - testen, überschreiben, Layer, Status

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:  Programmierstil - testen, überschreiben, Layer, Status (1754 mal gelesen)
Paulchen
Mitglied
Bauing./SW-Entwickler


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

Beiträge: 1227
Registriert: 19.08.2004

erstellt am: 17. Jun. 2006 14: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

Hallo,

ich habe eine - mehr oder weniger - grundsätzliche Frage. Zwar wurde hier im Forum und auch auf mapcars Seiten bereits über den Stil an sich diskutiert; allerdings habe ich zu einem speziellen Bereich noch kaum etwas Verwertbares gefunden. Vielleicht kann jemand ein paar Tips abgeben...

Es geht, wie oben erwähnt, um eine Stilfrage oder auch "den guten Ton". Ein Beispiel sollte helfen:

Ich habe eine Zeichung mit zwei Layern, "0" und "Test". Beide enthalten irgendwelche Objekte, der Einfachheit halber seien es Linien. Der Layer "Test" wird von mir (oder auch einem beliebigen user) gesperrt - warum auch immer - und eine kleine Lisp-Routine soll auf eben diesem - gesperrten - Layer "Test" eine weitere Linie zeichnen.

Soweit keine allzu schwierige Aufgabenstellung. Meine kleine Lisp-Routine, die einen Strich malen soll, will auf den Layer "Test" zugreifen. Ist dieser gesperrt, so bricht die Routine ab. Ist auch gut so. Ist er nicht gesperrt, wird die Linie gezeichnet. Ebenfalls gut.

An dieser Stelle sehe ich zwei Möglichkeiten:
1. Man kann mit dem Abbruch leben, der Nutzer muß den Layer manuell entsperren und die Routine erneut aufrufen (Eleganz?!).
2. Der Layer "Test" wird vor dem Zeichnen entsperrt, damit eben KEIN Abbruch erfolgt.

Nun zur eigentlichen Frage und der Begründung dieses Postings im Lisp-Forum. Welche der folgenden Vorgehensweisen als Detail zu Punkt 2. würdet ihr empfehlen?

a) Der Layer "Test" wird PAUSCHAL durch Lisp entsperrt, getaut, aktuell gesetzt oder was auch immer, OHNE vorher zu prüfen, ob es nötig ist; immerhin wäre es ja auch möglich, daß er bereits aktuell usw. ist, was bedeutet, das mein pauschales entsperren etc. in diesem Fall umsonst war.

b) Der Status des Layer "Test" wird vorher geprüft, d.h. ich frage ab, ob gesperrt usw. und falls ja, dann entsperre etc. Wahrscheinlich die "sauberere" Lösung - welche aber für den Fall, daß der Layer nicht gesperrt war, ebenfalls unnötig war.

Welche der beiden Varianten benötigt mehr Aufwand bzw. Rechenzeit (was heutzutage eine geringere Rolle spielt)? Gibt es hierfür ein allgemein gültiges Rezept? Und - zu guter letzt - was ist mit dem Stil?

Nach meinem derzeitigen Wissensstand arbeite ich hauptsächlich mit "command ...". Dieses Beispiel läßt sich wohl auch auf andere Fälle anwenden. Ich danke euch für´s lesen und bin gespannt auf eure Antworten!
Freddy

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: 17. Jun. 2006 16:17    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 Paulchen 10 Unities + Antwort hilfreich

Hallo Freddy,

wenn ich für ein Programmablauf einen Layer entsperren muß, dann würde ich dem Benutzer den Hinweis geben, das der Layer "sowieso" entsperrt wurde. Das Programm deswegen abbrechen, mit dem Hinweis "Das Programm konnte nicht fortgeführt werden, weil der Layer ...blala", würde ich nicht machen, weil es für den Benutzer nervig ist.
Deine Frage zur Rechenzeit: die kannst Du IMHOIn my humble oppinion (Meiner Meinung nach) wirklich vernachlässigen, denn in diesem Fall scheinen es ja sogar nur einzelne Abfragen zu sein (keine Liste mit 1000 Layer oder so)

Und hier nochmal ein Beispiel, wie Du abfragen kannst, ob ein Layer gesperrt ist, und wie er in dem Falle entsperrt wird:

Code:

(defun layer_entsperren ( layer / liste)
  (setq liste (entget (tblobjname "LAYER" layer)))
  (if (=(logand (cdr (assoc 70 liste))4)4);;;wenn gesperrt
      (entmod(subst (cons 70 (-(cdr(assoc 70 liste))4))
      (assoc 70 liste)liste))))

schönes Wochenende

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

Jörn

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

Paulchen
Mitglied
Bauing./SW-Entwickler


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

Beiträge: 1227
Registriert: 19.08.2004

erstellt am: 17. Jun. 2006 17:10    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 Jörn,

trotz Wochenende und schönem Wetter eine schnelle Antwort - besten Dank! Dein Hinweis mit

Zitat:
...dann würde ich dem Benutzer den Hinweis geben, das der Layer "sowieso" entsperrt wurde...
ist durchaus hilfreich. Sollte natürlich nur dann auftauchen, wenn der Layer tatsächlich gesperrt war. Benutzer zu nerven, dürfte nicht das Ziel sein :-) Danke auch für die Codeschnipsel, werde sie mir bei Gelegenheit verinnerlichen.

Sommerliche Grüße
Freddy

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: 17. Jun. 2006 18: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 Nur für Paulchen 10 Unities + Antwort hilfreich

Noch zur Ergänzung:
Um eine Linie zu zeichnen,, braucht man den Layer nicht zu entsperren. Neuerzeugung auf gesperrten Layern ist ja erlaubt, nur ändern (und damit auch löschen) nicht.

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

Udo Hübner

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: 18. Jun. 2006 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 Paulchen 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von CAD-Huebner:
Noch zur Ergänzung:
Um eine Linie zu zeichnen,, braucht man den Layer nicht zu entsperren. Neuerzeugung auf gesperrten Layern ist ja erlaubt, nur ändern (und damit auch löschen) nicht.

..aber nur, wenn man mit Command arbeitet ... entmode und vla-put-layer stört der Layerstatus nicht.

Deshalb auch zur Stilfrage .. setzte ich command ein , entmake oder ActivX ?

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

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: 18. Jun. 2006 13:40    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 Paulchen 10 Unities + Antwort hilfreich

Zitat:
...und eine kleine Lisp-Routine soll auf eben diesem - gesperrten - Layer "Test" eine weitere Linie zeichnen.

Zitat:
... Deshalb auch zur Stilfrage .. setzte ich command ein , entmake oder ActivX ?

Völlig egal! Die Linienerzeugung funktioniert immer, egal ob Layer gesperrt oder ungesperrt, egal ob Command, entmake oder ActivX.

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

Udo Hübner

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: 18. Jun. 2006 13: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 Nur für Paulchen 10 Unities + Antwort hilfreich

Hi,
meine Meinung:
Wenn ein Progger meint irgendwelche Sachen verstellen zu müssen, hat er auch die verdammte Pflicht nach Ablauf seiner Progs alles wieder zurückzustellen!

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

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

CADwiesel
Moderator
CAD4FM UG




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

Beiträge: 1968
Registriert: 05.09.2000

AutoCAD, Bricscad
Wir machen das Mögliche unmöglich

erstellt am: 19. Jun. 2006 07:42    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 Paulchen 10 Unities + Antwort hilfreich

Es ist m.E. die Frage, was das prog machen soll. Soll es diese veränderund (Linie malen) durchführen, oder nicht.
Wenn es das soll, muss es das auch tun. Egal erstmal ob man dem User sagt, was nun alles passiert ist, und wieviel Layer entsperrt oder sonstwas wurden. Wichtig ist eben das, was Marcybäby schon sagte. wenn das Tool nur unter bestimmten Bedingungen ausführen darf, prüf eben diese erst ab und dann lass es arbeiten, wenn nicht, kannst du ja immernoch eine Meldung ausgeben, das dies oder das nicht so war wie es sollte.

------------------
Gruß
CADwiesel
Besucht uns im CHAT

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

Paulchen
Mitglied
Bauing./SW-Entwickler


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

Beiträge: 1227
Registriert: 19.08.2004

erstellt am: 19. Jun. 2006 13:03    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

Tach! Zunächst mal ein rießengroßes DANKESCHÖN an alle für die rege Beteiligung. Ich kann von der Arbeit aus nur sporadisch  - z.B. in den Pausen - dabei bleiben :-(

@Udo Hübner:

Zitat:
Um eine Linie zu zeichnen,, braucht man den Layer nicht zu entsperren. Neuerzeugung auf gesperrten Layern ist ja erlaubt, nur ändern (und damit auch löschen) nicht.
OK, OK, hast recht! "Zeichnen" steht hier beispielhaft...

@Marc: Ich gebe Dir recht. So SOLLTE es sein!
@CADwiesel:

Zitat:
...wenn das Tool nur unter bestimmten Bedingungen ausführen darf, prüf eben diese erst ab und dann lass es arbeiten...
... ist eigentlich genau das, was ich zu hören erhofft hatte.

An dieser Stelle sollte ich mich u.U. entschuldigen. Ich habe mich wohl oben nicht deutlich genug ausgedrückt :-( Das gesamte "Layer-sperren-Strich-malen-blabla" war als Beispiel gedacht. Ich versuch´s nochmal. Denkt bitte allgemeiner, globaler oder wie auch immer man das nennen mag. Was macht IHR? PRÜFT ihr ihr z.B. den Layerstatus, bevor was geändert wird? PRÜFT ihr z.B. die Sysvar PDSIZE oder schreibt ihr einfach

Code:
...
(setvar "PDSIZE" 35)
...
ohne Rücksicht auf Verluste? Ich möchte wissen, welches Vorgehen - welcher Stil? - sauberer, ordentlicher ist. Will eben vermeiden, mir Schlampereien anzueignen, die dann später - z.B. hier - wieder zerlegt werden :-) Nehmt es mir nicht krumm, vielleicht formuliere ich falsch oder mache mir zuviele Gedanken um Nebensächlichkeiten. Allerdings habe ich den Eindruck, daß sich nahezu alle an dem BEISPIEL "Layer" festgefahren haben. Trotzdem nochmals: Vielen, vielen Dank für die zahlreichen Tips und... Mahlzeit!

Freddy

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: 19. Jun. 2006 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 Nur für Paulchen 10 Unities + Antwort hilfreich

also meine Funktionen checken erst die übergebenen Parameter und machen erst dann was, wenn alles ok ist. Bsp davon solltest du einige im Forum finden können 

Die andere Herangehensweise ist, das die aufrufende Funktion für die Richtigkeit der Paramter verantwortlich ist. Das kann unter Umständen schneller sein.

Dann gibts noch ne 3. , die sowas alles dem Errorhandling überläßt.


Was ich aber noch für wichtig halte, ist die Trennung von Mach-was-Funktion und Userinterfacefunktion !!

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

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: 19. Jun. 2006 15: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 Paulchen 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von Paulchen:
Ich möchte wissen, welches Vorgehen - welcher Stil? - sauberer, ordentlicher ist

Meiner Meinung nach s.o.:
Code:

...
(setq alt_pdsize (getvar "pdsize"))
(setvar "pdsize" whatever)
...
machwas
...
(setvar "pdsize" alt_pdsize)
...

Noch besser ist das natürlich im Errorhandler aufgehoben...
Vgl. CAD.DE Projekt $Standarderror: http://ww3.cad.de/foren/ubb/Forum145/HTML/000435.shtml#000021
...

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

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

Paulchen
Mitglied
Bauing./SW-Entwickler


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

Beiträge: 1227
Registriert: 19.08.2004

erstellt am: 20. Jun. 2006 12:24    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

Ich danke euch beiden, das hilft ein wenig. Weiß noch nicht so recht, für welche Variante ich mich entscheiden soll. Vermutlich ist die eigene Erfahrung da ein recht guter Lehrmeister. Den "Errorhandler" habe ich mir schon angesehen, ist mir aber (noch) ´ne Nummer zu heftig. Ich möchte ja gerne verstehen, was da passiert, anstatt nur stumpfsinnig zu kopieren, und das dauert wohl noch etwas...

Freddy

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