Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  DCL mit Popup_list mit LSP verknüpfen

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:  DCL mit Popup_list mit LSP verknüpfen (2929 mal gelesen)
copymaster
Mitglied
TZ


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

Beiträge: 33
Registriert: 15.02.2004

erstellt am: 29. Sep. 2006 18: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

Hallo zusammen,

ich bin dabei mir zum ersten mal einen Dialog (DCL) zu basteln und mit einer LSP-Datei zu verknüpfen. In dem Dialog befindet sich lediglich eine Popup_list zur Auswahl von Maßstäben, OK und Cancel-Button.
Der Dialog an sich funktioniert, mein Problem ist den keywert in der LSP-Datei einzubauen um den im Dialog gewählten maßstab weiterzugeben.

Hier meine bisherige LSP-Datei:
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
(DEFUN C:SCL(/ SCALE_LIST DLG)
(SETQ SCALE_LIST (LIST          ;Maßstabsauswahl Liste
  "2:1"
  "1:1"
  "1:2"
; ...
  )
)
(IF (> (SETQ DLG(LOAD_DIALOG "C:\\XY\\test.DCL"))0) ;DCL-File Pfad
  (IF (NEW_DIALOG "TITLE_SETUP" DLG)                ;
  (progn
    (start_list "scale_choose")    ;'scale_choose' ist key von DCL Popup_list
    (mapcar 'add_list SCALE_LIST)  ;liste für DCL laden
    (end_list)
   
    (action_tile "accept" "(done_dialog 1)")
    (setq flag (start_dialog))      ;Dialog aufrufen
  )
  );endif
);endif
);end defun
___________________________________

wäre super, wenn mir da jemand weiterhelfen könnte.
Danke im vorraus 

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: 29. Sep. 2006 19:55    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 copymaster 10 Unities + Antwort hilfreich

(ungetestet)

...
(action_tile "scale_choose" "(setq SCALE (nth (atoi $VALUE)SCALE_LIST))")
(action_tile "accept" (done_dialog 1)")
..
die Wahl ist dann in Scale gespeichert

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

copymaster
Mitglied
TZ


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

Beiträge: 33
Registriert: 15.02.2004

erstellt am: 30. Sep. 2006 19:26    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 erst einmal für die schnelle Antwort. Hab die sache getestet, aber es läuft leider nicht. Als Rückmeldung in ACAD und im LISP-Editor bekomme ich...Fehler: Falsch formatierte Liste in Eingabe

Schaut allerdings alles sehr plausibel aus. ich kenn mich leider nur nicht bei der umlegung der Werte aus, wie mit $VALUE, ...

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: 30. Sep. 2006 21:16    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 copymaster 10 Unities + Antwort hilfreich

Sorry, hat ne Klammer gefehlt (darauf weißt auch die Fehlermeldung hin) Ich habs oben korrigiert

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

copymaster
Mitglied
TZ


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

Beiträge: 33
Registriert: 15.02.2004

erstellt am: 01. Okt. 2006 17:45    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 nochmal 
ja danke, hab das mit der fehlenden Klammer auch gesehen. Hab auch noch weiter gebastelt das es "fast" funktioniert, aber mein Problem ist, dass dem Parameter "scale" der Listenwert, also z.B. "2:1" und nicht ein numerischer Skalierfaktor zugewiesen wird.

Gibt es da ne funktion, mit der sich das umwandeln läßt?

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: 01. Okt. 2006 19:23    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 copymaster 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von copymaster:

Gibt es da ne funktion, mit der sich das umwandeln läßt?

na die mußt du dir selber schreiben 
z.B: mit dem Codeschnipsel

(if(and(setq POS (vl-string-search ":" SCALE))
      (setq FAK1(distof(substr SCALE 1 POS)))
      (setq FAK2(distof(substr SCALE(+ POS 2))))       
  )
  (setq SCALE (/ FAK1 FAK2))
)


eine andere Möglichkeit ist das ganze Proggie anders aufzubauen,
nämlich so: ich hoffe die Codeschnipsel sprechen für sich und du bist mit car cadr und co vertraut ..


(SETQ SCALE_LIST (LIST       
  '("2:1" 2.0)
  '("1:1" 1.0)
  '("1:2" 0.5)
  ; ...
)
....
(start_list "scale_choose")   
(mapcar 'add_list (mapcar 'car SCALE_LIST))
(end_list)
...
(action_tile "scale_choose" "(setq SCALE (cadr(nth (atoi $VALUE)SCALE_LIST)))")
...

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

copymaster
Mitglied
TZ


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

Beiträge: 33
Registriert: 15.02.2004

erstellt am: 02. Okt. 2006 15:46    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

Zitat:
Original erstellt von CADmium:
na die mußt du dir selber schreiben 


Danke vielmals...das mit der Wertzuweisung in der Liste ist ne Prima Idee  alles Funzt supi 

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

copymaster
Mitglied
TZ


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

Beiträge: 33
Registriert: 15.02.2004

PROE WF3

erstellt am: 02. Okt. 2006 16:15    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

da bin ich schon wieder...das eine klappt, aber jetzt häng ich wieder woanders.

Ich wollte gerne noch eine Popuplist hinzufügen für die Formatauswahl. In der Liste steht dann z.B. "A1" "A2" ...Leider funktioniert der Vergleich unten nicht, sondern es werden beide Blöcke eingefügt. Vielleicht liegt aber auch der Fehler in der action_tile funktion...
-----------
;...
(action_tile "Format_choose" "(setq Format (atof (get_tile \"format_choose\")))")
;...
;wenn OK...
(if (= (getvar "format") A1)
(command "._insert" ;irgendnen Block...A1
);end if
(if (= (getvar "format") A2)
(command "._insert" ;irgendnen Block...A2
);end if
---------------

wäre super wenn mir da auch jemand weiterhelfen könnte.

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

Geos
Mitglied
Vermessungstechniker i.R.


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

Beiträge: 1017
Registriert: 21.09.2001

ACAD Map 2010, Win 7 Pro
eigene Lisp's<P>HW: Core i7 860, 2.8 GHz
3.3 GB, NVIDIA GeForce GTS 250

erstellt am: 03. Okt. 2006 07: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 copymaster 10 Unities + Antwort hilfreich

Zitat:
(action_tile "Format_choose" "(setq Format (atof (get_tile \"format_choose\")))")

Ich weiß zwar nicht, was Dir das DCL "liefert", aber das "atof" ist möglicherweise hier fehl am Platz.

Zitat:
if (= (getvar "format") A1)

"format" ist keine Systemvariable - also nix mit getvar

------------------
Schöne Grüße
Ernst

Meine Homepage

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

copymaster
Mitglied
TZ


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

Beiträge: 33
Registriert: 15.02.2004

erstellt am: 03. Okt. 2006 14: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

Ja, das mit dem Vergleich des Formates könnte stimmen, allerdings funktioniert es auch nicht mit:

if (= "FORMAT" A1)
(comand...)
)

Das mit der Funktion action_tile...ist wahrscheinlich auch doppelt gemoppelt mit der zweifachen action_tile zuweisung....

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

copymaster
Mitglied
TZ


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

Beiträge: 33
Registriert: 15.02.2004

PROE WF3

erstellt am: 03. Okt. 2006 20:38    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

Da bin ich nochmal..der Anfänger...
Hab nochmal einen Teil des LISP-Codes eingefügt, mein Problem ist, dass beide Formate (Blöcke) eingefügt werden. Vielleicht kann nochmal jemand nen Blick drauf werfen, wäre super, denn ich komme da leider nicht weiter.

Wie schon oben beschrieben werden die Formate über ne Popup_list ausgewählt...in der liste steht lediglich.."A0" "A1" (key: format_choose).
Nach dem OK-Klick soll der jeweilige Block eingefügt werden..allerdings werden bei mir beide Blöcke eingefügt.

(if ok_click
(progn
  (if (= (get_tile "format_choose") A0)
  (progn
    (command "._insert" Blockxy_A0
  )
  );end if A0
  (if (= (get_tile "format_choose") A1)
  (progn
    (command "._insert" Blockxy_A1
  )
  );end if A1
);end progn
);end if ok_click


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

andi2050
Mitglied



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

Beiträge: 107
Registriert: 11.03.2003

erstellt am: 03. Okt. 2006 23:50    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 copymaster 10 Unities + Antwort hilfreich

Hallo !

Bitte nicht böse sein, aber Dein Code ist ziemlicher Käse !

Du vergleicht nämlich bei den IF's immer das gleiche, nämlich NICHTS ( nil ) !

Der Ausdruck '(= (getvar "format") A1)' wird wahrscheinlich immer zu TRUE evaluieren...
'(getvar "format")' sucht nach der SYSTEMVARIABLE "FORMAT", die gibts aber nicht, d.h. Rückgabe = nil
mit A1 wird die Variable A1 (Symbol !) ausgewertet, wahrscheilich ist die nicht belegt ---> auch nil
d.h es wird (= nil nil) ausgewertet, und das ergibt nun mal 'T.

Damit es funktioniert, kannst Du folgendermaßen vorgehen:

Die Einträge der Listbox in einer Liste speichern:
(setq popup-textlist '("A0" "A1" "Weiß der Geier"...usw.))

diese wird dann ins Popup geladen (ist Dir schon bekannt, nur der Vollständigkeit halber):
(start_list "Format_choose") ; VORSICHT: bei DCL-Key's Groß/Kleinschreibung beachten!
  (mapcar 'add_list popup-textlist )
(endlist)

Mit action_tile die Callbackfunktion definieren (hat ja Cadmium schon gepostet):
(action_tile "Format_choose" "(setq format (nth (atoi $VALUE) popup-textlist ))")

zur Erklärung:
$VALUE enthält beim Aufruf der Callbackfunktion automatisch den aktuellen Wert des Tiles, von dem der Aufruf stammt -> (get_tile ist nicht notwendig).
Bei einem Popup ist dies immer der aktuelle Listindex, als Zahl (jedoch als String). $VALUE muß erst in eine Zahl (Integer) umgewandelt werden, damit man was damit anfangen kann !
Beispiel:
§VALUE --->  "1"
(atoi $VALUE) ---> 1
(nth (atoi $VALUE) popup-textlist) ---> "A1"
... gibt das n-te Element der Liste 'popup-textlist' zurück (wird dann mit setq in der Variable 'format' gespeichert)

Dann die Auswertung der Variable 'format', sinnvol wäre dafür z.B.

(cond ((= format "A0") (command ....<Block für A1 eifügen> ))
      ((= format "A1") (command ....<Block für A2 eifügen> ))
      ((= format "Weiß der Geier") (COMMAND "Geier fragen") )
      ...
      ...
      ('t (alert "Unbekanntes Format"))
)

Guck Dir mal die einzelnen Funktionen in der Hilfe an, wirkt oft Wunder...

Grüße

Andi


[Diese Nachricht wurde von andi2050 am 03. Okt. 2006 editiert.]

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

copymaster
Mitglied
TZ


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

Beiträge: 33
Registriert: 15.02.2004

PROE WF3

erstellt am: 05. Okt. 2006 22:21    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 nochmal...
danke erst einmal für die Erklärungen  das mit dem If vergleich hab ich mir schon gedacht..deshalb hatte ich dies später wieder umgestellt, aber mir war das mit dem $VALUE nicht klar...aber jetzt 

Trotzdem funktioniert der Vergleich bei mir nicht..hab den Vergleich mit cond aufgebaut wie oben beschrieben..bekomme als meldung "unbekanntes Format" wie in alert eingegeben...aber warum? mit dem Value müsste doch wirklich die Bezeichnung ausgelesen werden z.B. "A0"..und wenn ich dass dann mit dem jeweiligen Format vergleiche wie oben beschrieben...

Vielleicht hat ja noch jemand einen hinweis...tut mir echt sorry...falls ich nerve sagt bescheid   

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

Geos
Mitglied
Vermessungstechniker i.R.


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

Beiträge: 1017
Registriert: 21.09.2001

ACAD Map 2010, Win 7 Pro
eigene Lisp's<P>HW: Core i7 860, 2.8 GHz
3.3 GB, NVIDIA GeForce GTS 250

erstellt am: 06. Okt. 2006 07: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 copymaster 10 Unities + Antwort hilfreich

Möglicherweise liegt der Fehler auch in der DCL.
Vielleicht solltest Du mal ALLES (kompl. DCL + LSP) posten.

------------------
Schöne Grüße
Ernst

Meine Homepage

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: 06. Okt. 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 copymaster 10 Unities + Antwort hilfreich

Du hast dein Programm nie wirklich mal debuggt, und dir mal die Rückgaben der popuplist angesehen- richtig?

die Rückgabe der Popuplist ist immer der nth wert der popuplist.
Wenn deine liste bsplw. so aussieht: A0 A1 A2 A3 A4 (alles untereinander)
und du wählst A2 aus, ist die Rückgabe "2" der nth 2. Eintrag der liste

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

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

andi2050
Mitglied



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

Beiträge: 107
Registriert: 11.03.2003

erstellt am: 06. Okt. 2006 15:23    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 copymaster 10 Unities + Antwort hilfreich

Hi !

Probier mal folgendes:
Das letzte Cond-Statement abändern in ('t (alert "Unbekanntes Format")(princ "\nInhalt von 'format':\n")(print format))
)

Dann wir im Textfenster der Inhalt der Variable 'format' ausgegeben.
Damit kannst Du vielleicht erkennen, warum die anderen Bedingungen nicht ansprechen.

Oder einfach mal den Code posten, dann werden Sie geholfen...

Grüße

Andi

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

copymaster
Mitglied
TZ


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

Beiträge: 33
Registriert: 15.02.2004

PROE WF3

erstellt am: 06. Okt. 2006 18:00    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


xy_lsp.txt


xy_dcl.txt

 
Danke erst mal für die vielen Tipps.

Ja, ich hab die neue Alert-Funktion eingebaut (DANKE    ), als rückgabewert bekomme ich gar nichts. meine vermutung ist, dass der aufbau der liste in der lsp oder sogar doch etwas in der dcl nicht stimmt. Ich werd den code mal posten...vielleicht kann mal jemand nen blick reinwerfen.

vielen dank schon mal im vorraus.

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

andi2050
Mitglied



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

Beiträge: 107
Registriert: 11.03.2003

erstellt am: 06. Okt. 2006 20: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 copymaster 10 Unities + Antwort hilfreich

Ich hab mir Deinen Code mal angesehen.

Dabei sind mir 2 Fehler aufgefallen:
- der keyname im DCL ist mit title_choose bezeichnet, im LISP aber mit format_choose

- die Zuweisung mit action_tile ist zwar schön und gut, aber wenn der Benutzer direkt auf OK klickt, ohne die beiden Popups zu wählen, dann wird action_tile nicht aufgerufen -> format bzw. scale wird kein Wert zugewiesen
In diesem Fall ist es m.E. besser, wenn man die Werte beim Verlassen des Dialogfeldes ausliest (vor done_dialog !)

Hier noch ein paar Tips:
- done_dialog kann man ein Argument (Integer) mitgeben, dieser Wert wird dann von start_dialog zurückgegeben (nach beenden des Dialogs).
Dadurch lasst sich ermitteln, welcher Button zum Verlassen des Dialogs geführt hat. (-> siehe CODE)

- die Zuweisung der action_tile Callback-Ausdrücke kann es bei mehreren LISP-Ausdrücken schnell mal unübersichtlich werden, da der Ausdruck im String 'gefangen' ist (z.B wenn Strings im String vorkommen dann muß immer ein \" geschrieben werden...)
Dies lässt sich einfach mit (vl-prin1-to-string (quote(progn ....Callback-Ausdrücke))) umgehen -> Die Ausdrücke können 'normal' geschrieben werden + VLIDE erkennt die Ausdrücke als LISP

- hier ist der Blockname gleich dem Popup-Eintag, d.h man braucht keine COND-Abfrage, sondern kann daraus direkt den Wblock-namen ermitteln.

- bei Command's gibt es gerne Probleme wenn der Objektfang aktiv ist.
Dabei wendet der aufgerufene ACAD-Befehl nämlich an einem übergebenen Punkt erstmal den O-Fang an und verwendet dann den evtl. gefundenen Punkt -> es ist nicht vorhersehbar wo z.B Dein Block landet, wenn in der nähe von 0,0 schon was gezeichnet ist ! Wenn Du den Block sicher bei 0,0 absetzen möchtest, musst Du vorher den Ofang ausschalten. Entweder mit (setvar "OSMODE" 0) oder bei einzelnen Punkten einfach vor der Punktangabe ein "_non" hinzufügen.

Ich hab den Code etwas angepasst, nur mal als Anregung...


Code:
(defun c:title (/ scale_list format_list scale format dcl_id ok path)
  (vl-load-com)
  (setq scale_list  (list '("5:1" 5.0) '("2:1" 2.0) '("1:1" 1.0) '("1:2" 0.5) '("1:2.5" 0.4) '("1:5" 0.2))
        format_list (list "A0" "A1" "A2")
        path        "C:\\Programme\\"
  )
  ;; Dialog initialisieren
  (setq dcl_id (load_dialog (strcat path "XY.dcl")))
  (if (not (new_dialog "title_setup" dcl_id))
    (progn (alert "Dialogfenster kann nicht initialisiert werden !") (exit))
  )
  ;; Popups füllen
  (start_list "scale_choose")
  (mapcar 'add_list (mapcar 'car scale_list))
  (end_list)
  (start_list "title_choose")
  (mapcar 'add_list format_list)
  (end_list)
  ;; Buttons definieren
  (action_tile "accept"
              (vl-prin1-to-string '(progn
                                    (setq format (nth (atoi (get_tile "title_choose")) format_list)
                                          scale  (cadr (nth (atoi (get_tile "scale_choose")) scale_list))
                                    )
                                    (done_dialog 1)
                                    )
              )
  )
  (action_tile "cancel" "(done_dialog 0)")
  ;; Dialog darstellen
  (setq ok (start_dialog))
  (unload_dialog dcl_id)
  ;; Auswerten
  (if (not (zerop ok))
    (title:insert format scale path)
  )
(princ)
)
;;;--------------------------------
;;; Block einfügen
;;;--------------------------------
(defun title:insert (blkname scale path /)
  ;; 'and' wird so lange evaluiert, bis ein Argumet 'nil
  (and (or (numberp scale) (alert "Kein Maßstab"))
      ;; 'or' wird nur so lange evaluiert, bis ein Argument <> 'nil
      (or (findfile (strcat path blkname ".dwg"))
          (alert (strcat "Block '" blkname "' ist nicht verfügber"))
      )
      (command "._insert" (strcat path blkname ".dwg") "_non" "0,0" scale "" "0")
  )
)

Grüße

Andi

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

copymaster
Mitglied
TZ


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

Beiträge: 33
Registriert: 15.02.2004

PROE WF3

erstellt am: 07. Okt. 2006 11: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

Herzlichen Dank erstmal 

ja, einige von den Punkten hab ich auch schon erarbeitet, wie z.B. mit dem Blockeinfügen am Nullpunkt und Drehwinkel 0, allerdings hab ich da den Objektfang nicht berücksichtigt. Hab gedacht, dass bei Koordinatenangabe auch exakt dieser Punkt genommmen und nicht der Objektfang bevorzugt wird. Mit den Pfadangaben ist auch klar...

Ja, nur das mit dem OK war blöd, für den fall das einfach OK geklickt wird tut sich net so viel...

Aber das wichtigste...es funzt...tja, hab's leider nicht alleine hingekriegt..aber vielleicht das nächste mal 

****************************************************************************
Vielen Dank nochmal an alle, die mich hier unterstützt haben und mir vor allem mit den vielen Erklärungen für die Funktionen und Vorgehensweisen geholfen haben.

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

gmk
Mitglied
Dipl.-Ing.(FH) Vermessung


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

Beiträge: 667
Registriert: 23.10.2002

Autocad 2004, WS CadCompass, Normica V2000, WinXP Prof., AMD Athlon 64 X2, 2GB, NVIDIA GeForce 7600GS, HP1055CM

erstellt am: 14. Jul. 2020 12: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 copymaster 10 Unities + Antwort hilfreich

ACHTUNG! Sie antworten auf einen Beitrag der älter als 1 Jahr ist!


Servus!

Ich häng mich hier mal dran, denke das folgende passt dazu ...

DCL-Code
: popup_list {key = ls;}

LISP-Code

(SET_TILE "ls" "60")
(START_LIST "ls")
(MAPCAR 'ADD_LIST '("1" "2" "3" ... "300"))
(END_LIST)

Bis zum Wert 60 bei SET_TILE springt die Auswahl in der POPUP-Liste zum jeweiligen Listeneintrag (hier Wert 60 -> Listeneintrag"61"). Ab 61 sehe ich in der POPUP-Liste ein leeres Feld. Erst nach klicken auf den rechten Pfeil geht die Liste auf und ich kann zum entsprechenden Eintrag scrollen.

Ist das ein Fehler in LISP/DCL oder mache ich was falsch ?

Ciao Georg

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

archtools
Mitglied



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

Beiträge: 823
Registriert: 09.10.2004

Entwickler für AutoCAD, BricsCAD u.a., alle Systeme

erstellt am: 16. Jul. 2020 17:21    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 copymaster 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von gmk:
ACHTUNG! Sie antworten auf einen Beitrag der älter als 1 Jahr ist!


Servus!

Ich häng mich hier mal dran, denke das folgende passt dazu ...

DCL-Code
: popup_list {key = ls;}

LISP-Code

(SET_TILE "ls" "60")
(START_LIST "ls")
(MAPCAR 'ADD_LIST '("1" "2" "3" ... "300"))
(END_LIST)

Bis zum Wert 60 bei SET_TILE springt die Auswahl in der POPUP-Liste zum jeweiligen Listeneintrag (hier Wert 60 -> Listeneintrag"61"). Ab 61 sehe ich in der POPUP-Liste ein leeres Feld. Erst nach klicken auf den rechten Pfeil geht die Liste auf und ich kann zum entsprechenden Eintrag scrollen.

Ist das ein Fehler in LISP/DCL oder mache ich was falsch ?

Ciao Georg



1. Fehler: : popup_list {key = ls;}
richtig: : popup_list {key = "ls";}

2. Fehler: (SET_TILE "ls" "60") wird gesetzt, bevor die PopUp_List gefüllt wird

3. mutmaßlicher Fehler: weil die PopUp_List mit "1" beginnt, ist das 0te (nullte) ELement der liste die "1" und das 60ste Element die "61". Die Indizes von Listenelementen, Arrays usw in der Informatik beginnen in der Regel mit 0.

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

gmk
Mitglied
Dipl.-Ing.(FH) Vermessung


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

Beiträge: 667
Registriert: 23.10.2002

Autocad 2004, WS CadCompass, Normica V2000, WinXP Prof., AMD Athlon 64 X2, 2GB, NVIDIA GeForce 7600GS, HP1055CM

erstellt am: 17. Jul. 2020 17: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 copymaster 10 Unities + Antwort hilfreich

Servus Tom!

Merci für die Hinweise.

1.hab ich übersehen, 3. war nur ein Beispiel, das mit Idex 0 ist mir bekannt.
2. schau ich mir nochmal an, glaub da liegt der Fehler ...

Ciao Georg

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