Vytisknout stránku | Zavřít okno

Programek v LISP

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=16718
Datum vytištění: 13.čer.2026 v 13:56


Téma: Programek v LISP
Odeslal: enddys
Předmět: Programek v LISP
Datum odeslání: 26.úno.2013 v 08:40
Dobrý den,

jsem absolutním začátečníkem v programovani LISP. Chtěl bych vytvořit jeden program. Už mám udělanou kostru, ale některé věci netusím jak udělat, proto Vás žádam o pomoc :)

Kod:

;startup for application ACADM, installed xxxxxxx
(princ
(load "gen/acadm.lsp" "\nError: acadm.lsp not loaded!")
)
;(if acadmappend (setq s::startup (acadmappend s::startup)))

(defun MK3 ()
(setq b11 (getpoint "\n zadej bod"))
)

(defun cti()
(setq x (car b11))
(setq y (cadr b11))
(setq x (rtos x 2 3))
(setq y (rtos y 2 3))
(setq xy (strcat "N"cislo "\" "\X=" x "\ " "\Y=" y))
(write-line xy f)
)

(defun C:M4 ()

(setq f1 (getstring "\nZadej jméno programu ! { max. osum znak… } :") f1 (strcase f1))
(setq b (strcat "0 Testovací hlavika souboru"))
(setq f (strcat "C:/Popis/M4/" f1 ".H"))
(setq f (open f "w"))
(write-line b f)

    (while (< i 4)       
                          
        (MK3)
        (cti)
        )
)

Potřebná modifikace je nasledující: U setq xy by se měla za písmenem N mělo zvyšovat číslo (viz. 100, 101, 102 atd.) a druha, ze pokud bude během nacitani bodu zmačknuto pismeno R, vyskoci okno s požadavkem na zadání radiusu a pote bude nacitani bodu dal pokracovat.

Děkuji za veškeré rady.



Odpovědi:
Odeslal: Vladimír Michl
Datum odeslání: 26.úno.2013 v 08:51

Těch zádrhelů k řešení tam ještě bude více, ale navyšování předem nastaveného čísla vyřeší:

... (strcat "N" (itoa (setq cislo (1+ cislo))) ...
 
Přerušování smyčky stiskem znaku je trochu složitější, ale pokud se nebojíte výzkumů, mrkněte se na funkci (grread).


-------------
Vladimír Michl (moderátor)
ARKANCE CZ - https://arkance.world - arkance.world
(podpora viz emea.support.arkance.world)


Odeslal: enddys
Datum odeslání: 26.úno.2013 v 09:23
když pouziji Váš kod, vyhodi mi to chybu: "chyba: chybný typ argumentu: numberp: nil" :(



Odeslal: alfred
Datum odeslání: 26.úno.2013 v 09:33
Původně odeslal(a) enddys enddys napsal(a):

.... pokud bude během nacitani bodu zmačknuto pismeno R, vyskoci okno s požadavkem na zadání radiusu a pote bude nacitani bodu dal pokracovat.

Děkuji za veškeré rady.



1. Radím - vzdejte se okna (dialog) - je to zbytečná komplikace. Stačí volba na příkazové řádce.
2. nezapoměňte na uzavření souboru (close f) a to i v případě, že funkce zkonší chybou (viz funkce *error* )
2. Zkuste popsat co má být cílem LISPu. Třeba už to někdo někdy řešil a nemusíte to programovat. Nebo Vám tady doporučí zcela jiný postup...



Odeslal: enddys
Datum odeslání: 26.úno.2013 v 09:40
dekuji za upozorneni, close f jsem uz zadefinoval, a co se tyká pouzitelnosti programu, ma za úkol z technického vykresu nacitat souradnice a radiusy. Jde o to, ze ne vždy tam je raius, aproto by bylo nejlepší, kdyby si dialog pro zadaní radiusu vyvoval uživatel


Odeslal: alfred
Datum odeslání: 26.úno.2013 v 09:52
Původně odeslal(a) enddys enddys napsal(a):

dekuji za upozorneni, close f jsem uz zadefinoval, a co se tyká pouzitelnosti programu, ma za úkol z technického vykresu nacitat souradnice a radiusy. Jde o to, ze ne vždy tam je raius, aproto by bylo nejlepší, kdyby si dialog pro zadaní radiusu vyvoval uživatel


Ale souřadnice čeho a proč? Z čeho určujete rádius?


Odeslal: enddys
Datum odeslání: 26.úno.2013 v 09:59
jedna se o výkresy nástroju pro výrobky. Uživatel si na výkresu nakliká body, které potřebuje a radiusy, které jsou ve výkresu zapsany, a program by je mel zapsat do dokumentu. V podstate se jedna o usnadnění PP., aby nemuseli v nastrojárně přepisovat velike množství cisel


Odeslal: alfred
Datum odeslání: 26.úno.2013 v 10:24
Jedná se tedy o body, které jsou vždy na křivkách apod.? Rádius je zapsán v textu?

Nebylo by jednodušší do bodů navkládat bloky s atributem a číslem pořadí, stejně tak rádius popsat blokem s atributem a pak použít extrahování atributů?
Pro rozmístění bodů po křivce existují utility, které samy číslují.
Velká výhoda je, že při modifikaci výkresu jen posunete bloky a můžete exportovat znovu - není nutné vše znovu odklikávat. Dále máte kontrolu, že se například neukliknete mimo správný bod (například špatným chycením).


Odeslal: Vladimír Michl
Datum odeslání: 26.úno.2013 v 10:53
Původně odeslal(a) enddys enddys napsal(a):

když pouziji Váš kod, vyhodi mi to chybu: "chyba: chybný typ argumentu: numberp: nil" :(
 
Velmi pravděpodobně nemáte to "cislo" předem nastavené - tedy např.:
(setq cislo 1)
 


-------------
Vladimír Michl (moderátor)
ARKANCE CZ - https://arkance.world - arkance.world
(podpora viz emea.support.arkance.world)


Odeslal: enddys
Datum odeslání: 26.úno.2013 v 10:58
po dekladaci (setq cislo 1), chyba chyba: chybná funkce: 1,aneb stejný problém, jako když jsem postupovat podle návodu na internetu. Dle mého testovani je chybná funkce: 1 (kdy číslo je rovno číslu, které je zadano zde: (setq cislo (1 + cislo))


Odeslal: alfred
Datum odeslání: 26.úno.2013 v 11:22
Původně odeslal(a) enddys enddys napsal(a):

po dekladaci (setq cislo 1), chyba chyba: chybná funkce: 1,aneb stejný problém, jako když jsem postupovat podle návodu na internetu. Dle mého testovani je chybná funkce: 1 (kdy číslo je rovno číslu, které je zadano zde: (setq cislo (1 + cislo))



Pozor na mezery! Název funkce je "1+" ne "1 +"

(1+ číslo)

Můžete použít i obyčejné sčítání
(setq a 0)
(setq a (+ a 1))



Odeslal: enddys
Datum odeslání: 26.úno.2013 v 12:01
jaj udelal jsem tam nechtene mezeru, ted uz přičítaní jde, nicméně to přičte tu jedničku pouze 1x:

(while (< i 4)       
          (itoa (setq cislo (1+ cislo)))              
        (MK3)
        (cti)
        )

Vystup:
;ROLNART102
N101 G1 X-300.137 Z-190.877
N101 G1 X-317.067 Z-157.284
N101 G1 X-349.492 Z-160.155
N101 G1 X-350.352 Z-186.571


Odeslal: Vladimír Michl
Datum odeslání: 26.úno.2013 v 12:44
Předpokládám, že ten výstup čísla chcete v oné funkci (strcat), nikoliv jen tak volně ve smyčce.

-------------
Vladimír Michl (moderátor)
ARKANCE CZ - https://arkance.world - arkance.world
(podpora viz emea.support.arkance.world)


Odeslal: enddys
Datum odeslání: 26.úno.2013 v 12:51
Původně odeslal(a) Vladimír Michl Vladimír Michl napsal(a):

Předpokládám, že ten výstup čísla chcete v oné funkci (strcat), nikoliv jen tak volně ve smyčce.


již všechno funguje, největší problémy mi delali ty syntaxe, z C++ jsem zvykly házet to "kde me napadne". Dekuji všem za užitecne informace



Vytisknout stránku | Zavřít okno