Zobrazit plnou verzi příspěvku: Na tomto lispe pada acad

predcis
27.01.2009, 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)

)

alfred
27.01.2009, 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.

predcis
27.01.2009, 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.

michaelflyer
27.01.2009, 20:57
Dajte si podmienku aby ss1 nebola nil. Potom to rovnako aj zrušíte (tým ESC).

alfred
27.01.2009, 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.

predcis
05.02.2009, 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.

alfred
06.02.2009, 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?

Ferdinand
06.02.2009, 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.