Vytisknout stránku | Zavřít okno

LISP - ukončení funkce

Vytištěno z: CAD Fórum
Kategorie: Autodesk - stavebnictví, strojírenství, CAD/GIS
Název fóra: CAD programování
Popis fóra: Otázky programování - nadstavby a utility pro CAD a GIS aplikace Autodesk (VBA, AutoLISP, ARX/C++, .Net, JavaScript, Python, MEL...)
URL: https://www.cadforum.cz/forum/forum_posts.asp?TID=3140
Datum vytištění: 18.čer.2026 v 05:29


Téma: LISP - ukončení funkce
Odeslal: Radim Cech
Předmět: LISP - ukončení funkce
Datum odeslání: 22.zář.2006 v 15:41
Obracímse s prosbou. Mám LISP na popis poloměru obloku, velikost písma a odsazení je závislé na proměnné USERR1, vše je funkční, až na jednu věc. Po popsání poloměru se funkce znovu spustí a vypíše nesmyslné hlášky. Můžete mi někdo poradit, kde je chyba? Jsem v LISPu laik, tak k přiloženému kódu prosím o shovívavost
 
;Popis poloměru oblouku
(defun C:POLOMER ( / pt1 cen mid end D1 p)
 (if (= 0 (getvar "USERR1"))     ; kontrola nastaveni hodnoty USERR1, nesmi byt 0
      (progn
         (setq def_userr1 1)
         (setq def_userr1 (getreal "\nZadej userr1: "))
         (setvar "USERR1" def_userr1)
      ) ;progn
   ) ;if

 (setq  Ods  (* 3.5 (getvar "USERR1")) ; odsazeni textu od osy
         VT  (* 2.5 (getvar "USERR1")) ; velikost pisma
         Uhly  (getvar "AUNITS") 
  Delky  (getvar "LUNITS")
  Smer  (getvar "ANGDIR")
  Nula  (getvar "ANGBASE")
  Mista  (getvar "LUPREC")
  KonNul  (getvar "DIMZIN")
  Uchop  (getvar "OSMODE")
  
 )        ;setq
 
 (setvar "AUNITS" 2)
 (setvar "LUNITS" 2)
 (setvar "ANGDIR" 0)
 (setvar "ANGBASE" 0)
 (setvar "LUPREC" 2)
 (setvar "DIMZIN" 1)
 (setvar "OSMODE" 0)
 (setvar "UCSFOLLOW" 0) 

  (setq pt1 (cadr (entsel "Ukaž oblouk: "))
              cen (osnap pt1 "_CEN")
              mid (osnap pt1 "_MID") 
              end (osnap pt1 "_END")
               D1 (distance cen mid)
        IP (list 0 (- D1 Ods) 0)
  )
 (COMMAND "_UCS" "3" cen mid end)
 (COMMAND "_UCS" "Z" "300")
; (COMMAND "TEXT" "J" "C" "0,0,0" VT "0" (STRCAT "R"(RTOS D1 2 1)) "") ;popis na střed oblouku
 (COMMAND "TEXT" "J" "C" IP VT "0" (STRCAT "R"(RTOS D1 2 1)) "")      ;popis přímo k oblouku s odsazením 
 (COMMAND "_UCS" "W") 
 (setvar "AUNITS" Uhly)
 (setvar "LUNITS" Delky)
 (setvar "ANGDIR" Smer)
 (setvar "ANGBASE" Nula)
 (setvar "LUPREC" Mista)
 (setvar "DIMZIN" KonNul)
 (setvar "OSMODE" Uchop)
  
)
(princ "C:POLOMER - měření poloměru oblouku (CZ V/1997)" )
(princ)


-------------
R.C.

OSTRAVA



Odpovědi:
Odeslal: vknop
Datum odeslání: 22.zář.2006 v 16:44
Ty uvozovky za (STRCAT "R"(RTOS D1 2 1)) jsou jaksi navíc


Odeslal: Radim Cech
Datum odeslání: 22.zář.2006 v 16:53

Nechápu proč se na konci se pak objeví to 33. Ničemu to nevadí, ale prostě nechápu.

Command: TEXT
Current text style:  "ARIALNARROW"  Text height:  1.50
Specify start point of text or [Justify/Style]: J Enter an option
[Align/Fit/Center/Middle/Right/TL/TC/TR/ML/MC/MR/BL/BC/BR]: C
Specify center point of text:
Specify height <1.50>: 1.500000000000000
Specify rotation angle of text <0g>: 0
Enter text: R3.6
Command: _UCS
Current ucs name:  *NO NAME*
Specify origin of UCS or [Face/NAmed/OBject/Previous/View/World/X/Y/Z/ZAxis]
<World>: W
Command: 33

 
 


-------------
R.C.

OSTRAVA


Odeslal: vknop
Datum odeslání: 22.zář.2006 v 17:16
Původně odeslal(a) Radim Cech Radim Cech napsal(a):

Nechápu proč se na konci se pak objeví to 33. Ničemu to nevadí, ale prostě nechápu.
...
Command: 33
Protože je nastaven úchop konec + průsečík :-)
Ale je to proto, že lisp funkce vrací výsledek, v tomto případě 33 z přiřazení OSMODE. Proto se na konec lispu píše (princ), protože princ "nic", vrací taky nic a proto se pak na konci nic nezobrazí.


Odeslal: Radim Cech
Datum odeslání: 22.zář.2006 v 17:24
Tam přece (princ) je? Tomu "vracení" 33 rozumím, ale proč se objeví na příkazové řádce, tomu ne. Co tam má tedy ještě dopsat?

-------------
R.C.

OSTRAVA


Odeslal: vknop
Datum odeslání: 22.zář.2006 v 17:36
Původně odeslal(a) Radim Cech Radim Cech napsal(a):

Tam přece (princ) je? Tomu "vracení" 33 rozumím, ale proč se objeví na příkazové řádce, tomu ne. Co tam má tedy ještě dopsat?
(princ), ale na konec funkce. To (princ), které už tam je, má vliv jen při načítání ze souboru, ale na (C:Polomer) nemá vůbec žádný vliv.


Odeslal: Radim Cech
Datum odeslání: 22.zář.2006 v 17:43
Vždyť říkám, že jsem laik. Máš hned říct, že to patří o dva řádky víc a je to.  Prostě jak pro méně chápavého
Díky, už to funguje, resp. už se tam nic nesmyslného neobjevuje


-------------
R.C.

OSTRAVA


Odeslal: vknop
Datum odeslání: 22.zář.2006 v 18:05
Původně odeslal(a) Radim Cech Radim Cech napsal(a):

Máš hned říct, že to patří o dva řádky víc a je to. 
To by jistě šlo, ale lepší je i pochopit proč.
 
Původně odeslal(a) Radim Cech Radim Cech napsal(a):

Prostě jak pro méně chápavého
No, no... Zas tak bych se nezhazoval :-)


Odeslal: Ferdinand
Datum odeslání: 06.říj.2006 v 14:43
Pokud máte rozumně nastavený styl kótování, tak by přece stačilo použít klasicky

Command: _dimradius
  (KLIK-na oblouk)
Select arc or circle:
...
Specify dimension line location or [Mtext/Text/Angle]: 
(KLIK-výběr lokace popisu)

Ovšem, když máte nakreslený "nějaký" oblouk např. R=10 a chcete, aby byl nakótován jako R=286,95 tak to já vůbec ale vůbec nemiluju...Dead



-------------
-FerTh-



Vytisknout stránku | Zavřít okno