Hoofdmenu

lisp en dcl

Gestart door AadAad19601960, di 08 11 2022, 19:12:04

Vorige topic - Volgende topic

AadAad19601960

Wie o wie kan deze lisp en dcl bestanden werkend maken.
Er zitten een paar fouten in maar ik ben nog een newbie en kan ze niet ontdekken.
Had eerst alles over getypt maar was bang dat ik toch een paar type fouten had gemaakt ,dus alles gekopieerd helaas zonder resultaat , nog steeds niet werkend.
Ik heb een site van internet geplukt (jefferypsanders.com) maar helaas werkt het merendeel van de  voorbeelden niet.

SAMPLE7 : dialog {
         label = "Sample Dialog Box Routine - Part 7";
          : column {
            : row {
              : boxed_column {
                : radio_column  {
                  key = "radios";
                  : radio_button {
                    label = "Draw Circle";
                    key = "drawcir";
                    value = "1";
                  }
                  : radio_button {
                    label = "Draw Polygon";
                    key = "drawpol";
                    value = "0";
                  }
                }
                : popup_list {
                  key = "numsides";
                  label = "Number of Sides";
                  width = 25;
                  fixed_width_font = true;
                }
                : toggle {
                  key = "saveset";
                   label = "Save settings";
                }
              }
              : row  {
                : list_box {
                  label ="Select Layer";
                  key = "layerList";
                  height = 5;
                  width = 15;
                  multiple_select = false;
                  fixed_width_font = true;
                  value = "";
                }
              }
            }
            : row {
              : button {
                key = "accept";
                label = " Okay ";
                is_default = true;
              }
              : button {
                key = "cancel";
                label = " Cancel ";
                is_default = false;
                is_cancel = true;
              }
            } 
          }

}




(defun C:SAMPLE7()

   (defun saveVars()
  (setq radios(get_tile "radios"))

  ;;;--- Get the number of sides selected from the list
  (setq sStr(get_tile "numsides"))
  (if(= sStr "")
    (setq numSides nil)
    (setq numSides(nth (atoi sStr) numSides))
  )

  ;;;--- See if the user wants to save the settings
  (setq saveSet(atoi(get_tile "saveset")))

  ;;;--- Get the selected item from the layer list
  (setq sStr(get_tile "layerlist"))

  ;;;--- If the index of the selected item is not "" then something was selected
  (if(/= sStr "")
    (progn

      ;;;--- Something is selected, so convert from string to integer
      (setq sIndex(atoi sStr))

      ;;;--- And get the selected item from the list
      (setq layerName(nth sIndex layerList))
    )

    ;;;--- Else, nothing is selected
    (progn

      ;;;--- Set the index number to -1
      (setq sIndex -1)

      ;;;--- And set the name of the selected item to nil
      (setq layerName nil)
    )
  )
)

(defun toggleRadio(a)
   ;if circle is selected
   (if(= a 1)
      (mode_tile "numsides" 1) ;disable
      ;else
      (mode_tile "numsides" 0) ;enable
    )
)


  ;;;--- Load the dcl file from disk into memory
  (if(not(setq dcl_id (load_dialog "SAMPLE7.dcl")))
    (progn
      (alert "The DCL file could not be loaded!")
      (exit)
    )
   
    ;;;--- Else, the DCL file was loaded
    (progn

      ;;;--- Load the definition inside the DCL file
      (if (not (new_dialog "SAMPLE7" dcl_id))
        (progn
        (alert "The SAMPLE7 definition could not be loaded!")
          (exit)
        )

        ;;;--- Else, the definition was loaded
        (progn

          (setq layerList(list "0" "DIM" "HIDDEN" "STR" "TX" "WELD"))
          (setq numSides(list "4" "6" "8" "12" "16"))

          ;;;--- Add the layer names to the dialog box
          (start_list "layerlist" 3)
          (mapcar 'add_list layerList)
          (end_list)

          ;;;--- Add the number of sides to the dialog box
          (start_list "numsides" 3)
          (mapcar 'add_list numSides)
          (end_list)

  (if(/= (getvar "USERS1") "")
            (progn
              (setq radios (getvar "users1"))
              (setq numStr (getvar "users2"))
              (setq saveSet(getvar "users3"))
              (setq layerIndex(getvar "users4"))
              (set_tile "radios" radios)
              (set_tile "numsides" numStr)
              (set_tile "saveset" saveSet)
              (set_tile "layerlist" layerIndex)
            )
          )
  ;;;--- Only disable the numSides popup_list if a circle is being drawn
          (if(= radios "drawcir")
            (mode_tile "numsides" 1)
          )

 

          ;;;--- If an action event occurs, do this function
  (action_tile "drawcir" "(toggleRadio 1)")
          (action_tile "drawpol" "(toggleRadio 2)")
          (action_tile "cancel" "(done_dialog 1)")
          (action_tile "accept" "(saveVars)(done_dialog 2)")

          ;;;--- Display the dialog box
          (start_dialog)

          ;;;--- Unload the dialog box
          (unload_dialog dcl_id)

          ;;;--- If the cancel button was pressed - display message
          (if (= ddiag 1)
            (princ "\n \n ...SAMPLE7 Cancelled. \n ")
          )

          ;;;--- If the "Okay" button was pressed
          (if (= ddiag 2)
            (progn

     
      ;;;--- Save the old layer and reset to new layer
              (setq oldLay(getvar "clayer"))
              (setvar "clayer" layerName)

              ;;;--- See what needs to be drawn
              (if(= radios "drawcir")
                (progn
                  (setq pt(getpoint "\n Center point: "))
                  (command "circle" pt pause)
                )

                ;;;--- Else draw a polygon
                (progn
                  (setq pt(getpoint "\n Center Point: "))
                  (command "polygon" numSides pt "C" pause)
                )
              )

              ;;;--- See if we need to save the settings
              (if(= saveSet 1)
                (progn

                  ;;;--- Add code here to save the settings as defaults
                  (setvar "USERS1" radios)
                  (setvar "USERS2" numStr)
                  (setvar "USERS3" (itoa saveSet))
                  (setvar "USERS4" sSTR)

                )
              )
            )
          )

        )
      )
    )
  )

  ;;;--- Suppress the last echo for a clean exit
  (princ)
)

gery

Staan beide bestanden in 1 van de zoekpaden van AutoCAD?
AutoCAD 2020 - Windows 10

gery

Kan je kort omschrijven wat deze routine zou moeten doen?
AutoCAD 2020 - Windows 10

bart

https://www.jefferypsanders.com/autolisp_DCL_Part7.html

Er staat ergens dat je sample <enter> moet ingeven om te starten dat moet m.i.  sample7 zijn
staat de lisp en de dcl in een door autocad vertrouwde map?
Wat krijg je precies voor melding als het niet werkt?

je kan de bestanden linksboven op de pagina in de link gewoon downloaden overtypen of copypast is niet nodig

welke editor gebruik je voor het bewerken van de bestanden het moet gewoon platte tekst zijn

Domme vragen bestaan niet.
Domme antwoorden wel.

m.vr. groet Bart

AadAad19601960

Dit zou moeten verschijnen als het zou werken (zie bijlagen) en daar kan dan uit gekozen worden
De beide bestanden staan in een vertrouwde map.

bart

en die map staat ook in het zoekpad onder options? en de lisp is geladen?

ik heb de pagina gelezen.
de vraag is wat jij wel op je scherm ziet.
Domme vragen bestaan niet.
Domme antwoorden wel.

m.vr. groet Bart

AadAad19601960

Alleen het linker gedeelte van het dialoog venster is te zien wanneer ik het programma opstart.

roy_043

Er zijn een aantal problemen:

  • De key attributen in de DCL zijn hoofdlettergevoelig. In de DCL wordt "layerList" gebruikt terwijl in de LSP "layerlist" wordt gebruikt.
  • De return van start_dialog wordt niet opgeslagen, ddiag blijft dus nil.
  • Het gebruik van de USERS* variabelen is problematisch. Slechts 5 zijn beschikbaar, dus een 2e applicatie die deze techniek gebruikt zal al gauw conflicteren met deze.
  • De variabelen zijn niet gelokaliseerd.

In de bijlagen zijn de 2 eerstgenoemde problemen opgelost. Ook worden de USERS* waarden geïnitialiseerd, dit is veel gemakkelijker (zowel voor de programmeur als de gebruiker).

EddyBeerke

Heb je Jeffery P. Sanders ook gevraagd of in ieder geval gemeld dat zijn voorbeeld niet werkt?
Heb ik ooit wel gedaan en kreeg netjes een reactie terug dat hij het zou gaan aanpassen.
Civil3d 2022, Blender 3.4 gebruiker
Gebruiker sinds AutoCAD R12

http://eddylucas.c1.biz/
https://www.google.com/maps/contrib/109381066561676463628/photos/

AadAad19601960

Dank voor jullie hulp.
Ik vind het alleen jammer dat er mensen dingen op het internet zetten die niet werken.
Zeker als je wil gaan leren programmeren is dit niet echt motiverend.
Ik heb al verschillende pdf bestanden en pagina's  van het internet afgehaald waar het meeste niet van werkten.


gery

Citaat van: AadAad19601960 op zo 13 11 2022, 16:19:20
Ik vind het alleen jammer dat er mensen dingen op het internet zetten die niet werken.
Zeker als je wil gaan leren programmeren is dit niet echt motiverend.
Ik heb al verschillende pdf bestanden en pagina's  van het internet afgehaald waar het meeste niet van werkten.
Meestal werkt dat allemaal wel maar is er op je eigen computer vanalles fout.
AutoCAD 2020 - Windows 10

bart

Je kreeg wel iets op je scherm en er verschijn geen foutmelding.

op code valt altijd wel iest aan te merken en meestal wordt dat alleen maar meer als de code ouder begint te worden
Domme vragen bestaan niet.
Domme antwoorden wel.

m.vr. groet Bart

AadAad19601960

https://www.afralisp.net/
https://www.autolisp-exchange.com/

Heb ik ook al allebei doorgespit zitten ook de menige fouten in.

Heb je Jeffery P. Sanders ook gevraagd of in ieder geval gemeld dat zijn voorbeeld niet werkt?
Heb ik ooit wel gedaan en kreeg netjes een reactie terug dat hij het zou gaan aanpassen.

Heeft hij nog niet  aangepast!


Meestal werkt dat allemaal wel maar is er op je eigen computer vanalles fout.

Lijkt me sterk ,als ik alles kopieer  en plak zou het foutloos moeten zijn als het er goed opgezet is .

gery

Citaat van: AadAad19601960 op di 15 11 2022, 21:07:12
Meestal werkt dat allemaal wel maar is er op je eigen computer vanalles fout.

Lijkt me sterk ,als ik alles kopieer  en plak zou het foutloos moeten zijn als het er goed opgezet is .
AutoCAD is uitgebreid in te stellen en aan te passen, foute instellingen en/of aanpassingen op je eigen computer kunnen er voor zorgen dat bepaalde codes niet correct werken. Ik weet uit ervaring dat velen AutoCAD op hun computer om zeep kunnen helpen, waarbij veelal een volledige herinstallatie noodzakelijk is om het terug in orde te krijgen.
Trouwens, wees blij dat er code te vinden is op het Internet, dat die niet perfect is en/of niet aansluit bij jouw noden kan je de schrijver ervan niet kwalijk nemen, bij hem/haar zal het wel werken dus zit het probleem hoogstwaarschijnlijk bij jouw computer.
AutoCAD 2020 - Windows 10