Diskusije na bosanskom > Uopsteno o BabaCAD-u

Problemi sa Lispom

(1/2) > >>

Kukarnes:
Najprije pohvale za super aplikaciju.
Inače koristim AutoCadLT, ali ponekad trebam pokrenuti neke lispove a AutoCadLT ne podržava lispove. Konkretno za brojanje blokova i zbrajanje dužina poli/linija.
BabaCad bi mi bila odlična alternativa.
Pokušao sam u BabaCadu pokrenuti više lispova koji rade pod Autocad-om, ali Babacadu ne rade.
U čemu bi mogao biti problem?

babadmin:
Lisp za BabaCAD sadrzi osnovni set Lisp funkcija (nekih 70-80% AutoLISP funkcija bez activex funkcija vl, vla, vlax). Kompletna lista podrzanih funkcija moze se naci na http://www.babacad.com/lisp/lisp_syntax.html

Ako se neki AutoLISP ne moze pokrenuti, to je najverovatnije sto lisp skripta (.lsp) sadrzi neku od funkcija koja nije trenutno podrzana. Probajte nadomjestiti tu funkciju sa nekim od vecih postojecih, ili probajte napraviti .bem modul pomocu BabaCAD c++ API podrske (mozete procitati o .bem modulima i kako se programiraju na babacad.com pa onda u meniju na Extension Modules).

Lisp ce biti nadogradjivan te je zato dat kao poseban ekstenzijski modul. U medjuvremenu, ako vas interesuje samo racunanje duzina polilinija, skinite ESRI Shape modul za babacad (idite na Extension modules na babacad.com). Ovaj modul ima jednu komadnu za racunanje ukupne duzine svih selektiranih polilinija (komanda LENSUM ili nesto slicno).

Kukarnes:
Hvala.
Kad nađem vremena ću pokušati prepraviti najjednostavniji lisp za brojanje blokova, ako to uspijem sa svojim skromnim znanjem lispa.
Ako uspijem ću ga objaviti na forumu.

babadmin:
Ne morate gubiti vrijeme, evo lispa za ukupan broj blokova (samo snimite dole datu funkciju u blkcount.lsp fajl i ucitajte sa appload ili ga kopirajte u \Program Files (x86)\BabaCAD\BabaCAD\Support\Lisp i dodajte u bcad.mnu fajl ispod **LISP sekcije  sljedeci red: lisp\blkcount.lsp kako bi se ucitavao automatski na startanju BabaCAD-a.

(defun c:blkcount (/ ss ind en bnum entype)
 (setq ss (ssget "X"))
 (setq ind 0)
 (setq bnum 0)
 (while (setq en (entget (ssname ss ind)))
  (setq entype (cdr (assoc 0 en)))
  (if (eq entype "INSERT")
    (setq bnum (+ bnum 1))
  )
  (setq ind (+ ind 1))
 )
 (princ (strcat "Total num of blocks: " bnum))
 (princ)
)

Kukarnes:
Hvala na odgovoru, ali meni treba zbroj pojedinačnih blokova.
Najjednostavniji lisp koji sam uspio pronaći i koji to radi (u AutoCadu) je:

(defun c:bcount (/ bn flag ss c)
 (while (setq bn (tblnext "block" (not bn)))
 (setq flag (cdr (assoc 70 bn)))
 (cond ( (or (= 4 (logand 4 flag))
 (wcmatch (cdr (assoc 2 bn)) "`**")
 )
 )
 ( (setq ss (ssget "X" (list '(0 . "INSERT")(assoc 2 bn))))
 (setq c (sslength ss))
 (prompt
 (strcat
 "\n"
 (itoa c)
 "..."
 (cdr (assoc 2 bn))
 )
 )
 )
 ( t
 (prompt
 (strcat
 "\n0..." (cdr (assoc 2 bn))
 )
 )
 )
 )
 )
 (princ)
 )


Primjer ispisa:

15...Blok1
1... Blok2
22... Blok3

Bio bih zahvalan ako bi ga uspijeli konvertirati u Babacadov lisp format, naravno kad uhvatite vremena.

Navigation

[0] Message Index

[#] Next page

Go to full version