Diskuzní fórum a databáze tipů a utilit pro AutoCAD, Inventor, Revit a další produkty Autodesk - od firmy Arkance Systems [www.cadforum.cz]
CZ | SK | EN | DE
Přihlášení
či registrace
   právě nás čte: 5962 
RSS kanál - CAD tipy RSS tipy
RSS diskuze

Diskuze Diskuzní fórum, poradna

 

NápovědaCAD diskuze, rady, výměna zkušeností

 
CAD Fórum - Homepage Veřejné diskuzní fórum k CAD aplikacím - ptejte se na libovolné otázky týkající se oboru CAx, podělte se o vaše znalosti a zkušenosti s programy AutoCAD, Inventor, Revit, Fusion 360, 3ds Max a s dalšími CAD aplikacemi. Zaregistrujte se nebo se přihlašte a zašlete váš příspěvek do odpovídajícího fóra. Viz další informace o CAD Fóru. Nechcete se registrovat? Zeptejte se v naší Facebook poradně.
Fórum nenahrazuje technický support firmy Arkance Systems (CAD Studio) - přímá podpora pro zákazníky funguje na helpdesk.cadstudio.cz
  FAQ FAQ  Prohledat fórum   Události   Registrovat Registrovat  Přihlásit Přihlásit

Téma uzavřenoProgramek v LISP

 Odpovědět Odpovědět archiv
Autor
enddys Zobrazit panel
Nováček
Nováček

Přihlášen: 26.úno.2013
Lokalita: ČR (JM)
Používám:
AutoCad 2006
Stav: Offline
Bodů: 8
Přímý odkaz na tuto zprávu Téma: Programek v LISP
    Zasláno: 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.
Zpět nahoru
Vladimír Michl Zobrazit panel
Moderátor
Moderátor
Avatar
Arkance Systems

Přihlášen: 09.zář.2004
Lokalita: ČR (JČ)
Používám:
Dodáváme produkty Autodesk
Stav: Offline
Bodů: 21491
Přímý odkaz na tuto zprávu Zasláno: 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 Systems s.r.o. - www.arkance-systems.cz
(podpora viz hd.cads.cz)
Zpět nahoru
enddys Zobrazit panel
Nováček
Nováček

Přihlášen: 26.úno.2013
Lokalita: ČR (JM)
Používám:
AutoCad 2006
Stav: Offline
Bodů: 8
Přímý odkaz na tuto zprávu Zasláno: 26.úno.2013 v 09:23
když pouziji Váš kod, vyhodi mi to chybu: "chyba: chybný typ argumentu: numberp: nil" :(

Zpět nahoru
alfred Zobrazit panel
TOP uživatel
TOP uživatel

Přihlášen: 14.říj.2004
Lokalita: ČR (JČ)
Používám:
AutoCad MAP 2011
Stav: Offline
Bodů: 1675
Přímý odkaz na tuto zprávu Zasláno: 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...

Zpět nahoru
enddys Zobrazit panel
Nováček
Nováček

Přihlášen: 26.úno.2013
Lokalita: ČR (JM)
Používám:
AutoCad 2006
Stav: Offline
Bodů: 8
Přímý odkaz na tuto zprávu Zasláno: 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
Zpět nahoru
alfred Zobrazit panel
TOP uživatel
TOP uživatel

Přihlášen: 14.říj.2004
Lokalita: ČR (JČ)
Používám:
AutoCad MAP 2011
Stav: Offline
Bodů: 1675
Přímý odkaz na tuto zprávu Zasláno: 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?
Zpět nahoru
enddys Zobrazit panel
Nováček
Nováček

Přihlášen: 26.úno.2013
Lokalita: ČR (JM)
Používám:
AutoCad 2006
Stav: Offline
Bodů: 8
Přímý odkaz na tuto zprávu Zasláno: 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
Zpět nahoru
alfred Zobrazit panel
TOP uživatel
TOP uživatel

Přihlášen: 14.říj.2004
Lokalita: ČR (JČ)
Používám:
AutoCad MAP 2011
Stav: Offline
Bodů: 1675
Přímý odkaz na tuto zprávu Zasláno: 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).
Zpět nahoru
Vladimír Michl Zobrazit panel
Moderátor
Moderátor
Avatar
Arkance Systems

Přihlášen: 09.zář.2004
Lokalita: ČR (JČ)
Používám:
Dodáváme produkty Autodesk
Stav: Offline
Bodů: 21491
Přímý odkaz na tuto zprávu Zasláno: 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 Systems s.r.o. - www.arkance-systems.cz
(podpora viz hd.cads.cz)
Zpět nahoru
enddys Zobrazit panel
Nováček
Nováček

Přihlášen: 26.úno.2013
Lokalita: ČR (JM)
Používám:
AutoCad 2006
Stav: Offline
Bodů: 8
Přímý odkaz na tuto zprávu Zasláno: 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))
Zpět nahoru
alfred Zobrazit panel
TOP uživatel
TOP uživatel

Přihlášen: 14.říj.2004
Lokalita: ČR (JČ)
Používám:
AutoCad MAP 2011
Stav: Offline
Bodů: 1675
Přímý odkaz na tuto zprávu Zasláno: 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))

Zpět nahoru
enddys Zobrazit panel
Nováček
Nováček

Přihlášen: 26.úno.2013
Lokalita: ČR (JM)
Používám:
AutoCad 2006
Stav: Offline
Bodů: 8
Přímý odkaz na tuto zprávu Zasláno: 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
Zpět nahoru
Vladimír Michl Zobrazit panel
Moderátor
Moderátor
Avatar
Arkance Systems

Přihlášen: 09.zář.2004
Lokalita: ČR (JČ)
Používám:
Dodáváme produkty Autodesk
Stav: Offline
Bodů: 21491
Přímý odkaz na tuto zprávu Zasláno: 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 Systems s.r.o. - www.arkance-systems.cz
(podpora viz hd.cads.cz)
Zpět nahoru
enddys Zobrazit panel
Nováček
Nováček

Přihlášen: 26.úno.2013
Lokalita: ČR (JM)
Používám:
AutoCad 2006
Stav: Offline
Bodů: 8
Přímý odkaz na tuto zprávu Zasláno: 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
Zpět nahoru

Pro technickou podporu CAD
kontaktujte Helpdesk

Příbuzné CAD tipy:
Tip 3821:Starší LISP aplikace mi nefungují správně.
Tip 176:problem with Lisp code for defining of Linewidth
Tip 12636:VIPZjištění práce v síti VPN (LISP).
Tip 6927:AutoCAD mi hlásí: ; chyba: nesprávný typ argumentu: fixnump:
Tip 4683:VIPJak zablikat zvolenou entitou ve výkresu?
Tip 4021:VIPVýpis "Mechanical" proměnných PowerPack/Genius.


 Odpovědět Odpovědět

Přejít na fórum Oprávnění fóra Zobrazit panel



Stránka byla vygenerována za 1,359 sekund.