Na tomto lispe pada acad
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=7982
Datum vytištění: 09.čer.2026 v 17:53
Téma: Na tomto lispe pada acad
Odeslal: predcis
Předmět: Na tomto lispe pada acad
Datum odeslání: 27.led.2009 v 11:44
Dobry den,
prosil by som o radu s nasledujucim lispom.
Chcel som rozsirit funkcionalitu jedneho stiahnuteho programiku jednoduchym pridanim cyklu while
Lisp je o tom, ze vyberiem entity a tie sa nakopiruju a zrovnaju podla zadania.
Tu je povodny, fungujuci:
(defun c:alc (/ ss1)
(setq ss1 (ssget))
(command "_copy" ss1 "" "0,0" "0,0" "")
(command "align" ss1 "")
(while (> (getvar 'CmdActive) 0) (command pause))
(princ)
)
Jednoduchym pridanim cyklu som chcel dosiahnut viacnasobneho kopirovania a zarovnania. Avsak po 3 kopii sa acad zruti. Neviem pochopit preco mi vypisuje chybu vnorovania, ked prikazy copy a align sa ukoncia a ziadnu rekurziu tam niez nemam. Dakujem za radu. Upraveny kod je:
(defun c:alc()
(princ "\nVyber objekty: ")
(setq ss1 (ssget))
(while 1
(command "_copy" ss1 "" "0,0" "0,0")
(command "align" ss1 "")
(while
(> (getvar "CmdActive") 0)
(command pause)
)
)
(princ)
)
|
Odpovědi:
Odeslal: alfred
Datum odeslání: 27.led.2009 v 13:08
Co je to za podminku
(while 1
?????
musi to byt:
(while podminka_dokud se bude cyklus provadet
prikazy
v
cyklu
);konec while
Trochu nechapu jak si predstavujete vysledek.
|
Odeslal: predcis
Datum odeslání: 27.led.2009 v 13:16
|
Nekonecny cyklus, lebo neviem dopredu kolko krat budem chciet kopirovat ten vyber. Koniec funkcie je potom ESC. Viem, ze to nie je ciste programatorske riesenie, ale je to jednoduche a prakticke.
|
Odeslal: michaelflyer
Datum odeslání: 27.led.2009 v 20:57
Dajte si podmienku aby ss1 nebola nil. Potom to rovnako aj zrušíte (tým ESC).
------------- Michal MUCHA
|
Odeslal: alfred
Datum odeslání: 27.led.2009 v 21:24
Jenze SS1 se vybira pred cyklem a v cyklu se vyber neopakuje. Je to cele trochu divne. Trochu nechapu co to ma delat, ale jiste by to slo lepe. Pokud se nepletu, tak se to musi ukoncit stiskem ESC a pravdepodobne to puvodne vybrane entity zdvojene na sobe.
|
Odeslal: predcis
Datum odeslání: 05.úno.2009 v 09:31
Program ma fungovat takto:
povedzme mam nejaky objekt, napriklad sipku, a chcem ju kopirovat 6x a chcem ju umiestnit na 6-tich roznych miestach v 6-tich roznych natoceniach a napr. v 3 roznych mierkach.
Tak som chcel vytvorit program, ktory by 1x vybral to co chcem kopirovat a natacat a potom ho n-krat kopirovat a natacat.
Ale mate pravdu, ostane tam jedna kopia navyse.
Na moje prekvapenie mi vsak po 3tom cykle zobrazi autocad hlasku, ktoru som v zivote nevidel a spadne. Neviem este, ci je to mojou verziou autocadu, alebo robim nieco nepovolene. Nedava mi to proste logiku, preco tento lisp nemoze pokracovat "doblba" ale generuje chybu po ktorej padne autocad.
|
Odeslal: alfred
Datum odeslání: 06.úno.2009 v 07:26
Pokud je kopirovany objekt blok (jako je vhodne pro Vami zminenou sipku), tak by mozna bylo lepsi v programu zjistit nazev bloku a pak jen vkladat.
Pokud to nejsou jen bloky, tak me napada jestli by Vam nevyhovoval prikaz "MOCORO" z Express tools?
|
Odeslal: Ferdinand
Datum odeslání: 06.úno.2009 v 08:12
Když tam je požadavek na různá měřítka, tak by to ale chtělo krapet upravit - příkaz MoCoRo to dělá trošku jinak.
------------- -FerTh-
|
|