Zobrazit plnou verzi příspěvku: LISP - ukončení funkce

Radim Cech
22.09.2006, 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)

vknop
22.09.2006, 16:44
Ty uvozovky za (STRCAT "R"(RTOS D1 2 1)) jsou jaksi navíc

Radim Cech
22.09.2006, 16:53
Nechápu proč se na konci se pak objeví to 33. Ničemu to nevadí, ale prostě nechápu.
Command: TEXTCurrent text style:  "ARIALNARROW"  Text height:  1.50Specify 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]: CSpecify center point of text:Specify height <1.50>: 1.500000000000000Specify rotation angle of text <0g>: 0Enter text: R3.6Command: _UCSCurrent ucs name:  *NO NAME*Specify origin of UCS or [Face/NAmed/OBject/Previous/View/World/X/Y/Z/ZAxis] <World>: WCommand: 33
 
 

vknop
22.09.2006, 17:16
[QUOTE=Radim Cech]
Nechápu proč se na konci se pak objeví to 33. Ničemu to nevadí, ale prostě nechápu.
...
Command: 33
[/QUOTE]
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í.

Radim Cech
22.09.2006, 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?

vknop
22.09.2006, 17:36
[QUOTE=Radim Cech]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?[/QUOTE]
(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.

Radim Cech
22.09.2006, 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

vknop
22.09.2006, 18:05
[QUOTE=Radim Cech] Máš hned říct, že to patří o dva řádky víc a je to. [/QUOTE]
To by jistě šlo, ale lepší je i pochopit proč.
 
[QUOTE=Radim Cech]Prostě jak pro méně chápavého [/QUOTE]
No, no... Zas tak bych se nezhazoval :-)

Ferdinand
06.10.2006, 14:43
Pokud máte rozumně nastavený styl kótování, tak by přece stačilo použít klasickyCommand: _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...