Newsgroup: it.comp.software.cad
Titolo: IntelliCAD e DCL e LSP

1. Sto cercando inutilmente di avviare alcune mie procedure Autolisp e DCL
in Intellicad;
il risultato é il seguente alert message:
"Il dialogo é troppo largo per essere mostrato sullo schermo"
ma a me non sembra. Ho provato a sparare al massimo le impostazioni di
schermo, ma nulla di fatto.
Ci sono limiti che non conosco?
2. Senza nessun errore apparente le mie macro autolisp si piantano quando
appare l'istruzione "(command ... ... ... )" dando il risultato:
"error:Function cancelled".
Devo precisare che in Autocad funziona tutto a meraviglia!
Se é vero che la compatibilità con Autocad é stata promessa ...
Del resto solo per caso ho scoperto che
(command "_style" .. .. ..)
si scrive
(command "_-style" .. .. ..)
Qualcuno ha notizie in merito?
Ciao, giuSerpe.

scusa, ho solo ICad LT gratuito, mi sono intromesso per sapere se
esite un manuale in Eng o It.
chiedo venia...

 (command "_-style" .. .. ..)
L'underscore "_" serve ad internazionalizzare il comando, mentre il "-"
(sottrazione) fa si che non venga attivata la finestra di dialogo.
(Questo anche su Autocad)
Piuttosto (sotto NT) non mi funziona lo snap "vicino".
Succede solo a me?
B.A.

 B.A.
Ci aggiorniamo ...
giuSerpe

 ha scritto nel messaggio
news:92mjtl$4eb$1...@serv1.albacom.net...


Ciao.
Come da richiesta, ecco una delle routines incriminate:
;---------------------------------------------
; imposizione dell'approssimazione a 0.05
(defun round (num) (/ (fix (+ (* num 20) 0.5)) 20.00))
; orienta il testo alla linea selezionata
(defun at (en entxt / new pt1 pt2 rot coor)
  (if en
    (setq coor (cor_l2 en)
   pt1  (nth 0 coor)
   pt2  (nth 1 coor)
   rot  (angle pt1 pt2)
    )
    (setq rot 0)
  )
  (if (or (= rot (gir 270)) (<>= rot (gir 120) (gir 300)))
    (setq rot (+ rot (gir 180)))
  )
  (setq new (subst (cons 50 rot) (assoc 50 entxt) entxt))
  (entmod new)
  (princ)
)
(defun <>= (number minn maxx)
  (if (and (> number minn) (<= number maxx))
    t
    nil
  )
)
(defun dxf (cod lst) (cdr (assoc cod lst))) ; conttrollo del codice dxf
(defun apx (val / str) (setq str (rtos val 2 (getvar "useri1")))) ;
controllo del'approssimazione
; estrazione delle coordinate
(defun cor_l (ename / dxflist pt1 pt2 ptl ang pt3)
  (setq dxflist (entget ename))
  (if (/= (dxf 0 dxflist) "LINE")
    (princ "\nL'oggetto selezionato non è una linea:")
    (setq pt1 (dxf 10 dxflist)
   pt2 (dxf 11 dxflist)
   ptl (list pt1 pt2)
    )
  )
)
(defun modecho (str)
  (if (= 'STR (type str))
    (setvar "users5" (strcat "  " str))
    (alert "l'argmomento di MODECHO non è una stringa")
  )
  (princ)
)
; aiuta ad individuare il miglior punto di inserimento del testo
(defun DRAW_PT (pt color / dd p1 p2 p3 p4)
  (setq dd (/ (getvar "VIEWSIZE") 150.0)
 p1 (polar pt 0.785398 dd)
 p2 (polar pt 2.356194 dd)
 p3 (polar pt -2.356194 dd)
 p4 (polar pt -0.785398 dd)
  )
  (grdraw p1 p3 color)
  (grdraw p2 p4 color)
)
; crea solo i layers che servono
(defun sealay (lay / col linet)
  (if (= (strcase lay) "0")
    (setq col 7
   linet "continuous"
    )
  )
  (if (= (strcase lay) "01")
    (setq col 34
   linet "continuous"
    )
  )
  (if (= (strcase lay) "SS")
    (setq col 2
   linet "DASHDOT"
    )
  )
  (if (= (strcase lay) "CAMPIT")
    (setq col 54
   linet "continuous"
    )
  )
  (if (= (strcase lay) "02TR")
    (setq col 3
   linet "hidden"
    )
  )
  (if (= (strcase lay) "MIS")
    (setq col 40
   linet "hidden"
    )
  )
  (if (= (strcase lay) "02")
    (setq col 1
   linet "continuous"
    )
  )
  (if (= (strcase lay) "02LIGHT")
    (setq col 111
   linet "continuous"
    )
  )
  (if (= (strcase lay) "03")
    (setq col 4
   linet "continuous"
    )
  )
  (if (= (strcase lay) "07")
    (setq col 2
   linet "continuous"
    )
  )
  (if (= (strcase lay) "05")
    (setq col 5
   linet "continuous"
    )
  )
  (if (= (strcase lay) "SEZ")
    (setq col 4
   linet "dashdot"
    )
  )
  (if (= (strcase lay) "RETINO")
    (setq col 111
   linet "continuous"
    )
  )
  (if (= (strcase lay) "J-NP")
    (setq col 9
   linet "continuous"
    )
  )
  (if (= (strcase lay) "TESTI")
    (setq col 11
   linet "continuous"
    )
  )
  (if (= (strcase lay) "DIM")
    (setq col 60
   linet "continuous"
    )
  )
  (if (= (strcase lay) "QUOTE")
    (setq col 6
   linet "continuous"
    )
  )
  (if (= (strcase lay) "SIMBOLI")
    (setq col 4
   linet "continuous"
    )
  )
  (if (= (strcase lay) "VOLTE")
    (setq col 31
   linet "dot"
    )
  )
  (if (= (strcase lay) "X")
    (setq col 7
   linet "continuous"
    )
  )
  (if (= (tblsearch "layer" lay) nil)
    (command "_.layer" "_M" lay "_C" col "" "_lt" linet "" "")
    (command "_.layer" "_t" lay "_s" lay "")
  )
)
; funzione principale
(defun c:quo (/     2pt   aarea ang   c     cl   ename ent   entat linea lun
lun1
       om    p1   p2 p3    p4    pm   pre rot   sc    ss   str suf
       test  testo
      )
  (setvar "gridmode" 0)
  (setq om (getvar "orthomode"))
  (setvar "cmdecho" 0)
  (setvar "orthomode" 0)
  (if (= (tblsearch "style" "dim") nil)
    (command "_-style" "dim" "romans" 0.15 0.6 0 "_n" "_n" "_n")
    (command "_textstyle" "dim")
  )
  (setq cl (getvar "cLAYER"))
  (setq SC (getvar "USERR2"))
  (setq c t)
  (while c
    (setvar "gridmode" 0)
    (sealay "testi")
    (setq p1 (getpoint "\nPrimo punto o RETURN per selezionare: \n"))
    (setq pre nil)
    (if p1
      (progn (setq p2  (getpoint "\nSecondo punto: " p1)
     ang (angle p1 p2)
     rot (/ (* 180 ang) pi)
     lun (distance p1 p2)
     pm  (polar p1 ang (/ lun 2))
     p3  (polar pm (+ ang (* 0.5 pi)) (getvar "textsize"))
     p4  (polar p3 (- ang (* 0.5 pi)) (* 2 (getvar "textsize")))
      )
      (DRAW_PT p1 2)
      (DRAW_PT p2 2)
      )
      (progn (setq test
      (dxf 0
    (entget
      (setq ename (car (setq entat (entsel "\nSelezionare l'oggetto: "))))
    )
      )
      )
      (cond ((= test "ARC")
      (setq ss (ssadd ename))
      (command "_pedit" ss "_Y" "")
      (setq ent (entlast))
      (command "_area" "_e" ent)
      (command "_explode" ent)
      (setq ent (entlast))
      (redraw ent 3)
      (setq lun (getvar "perimeter"))
      (setq aarea (getvar "area"))
      (setq rot 0)
      (setq pre "Sv=")
     )
     ((or (= test "LWPOLYLINE") (= test "POLYLINE"))
      (command "_area" "_e" ename)
      (redraw ename 3)
      (setq lun (getvar "perimeter"))
      (setq aarea (getvar "area"))
      (setq rot 0)
      (setq pre "Sv=")
     )
     ((= test "ELLIPSE")
      (command "_area" "_e" ename)
      (redraw ename 3)
      (setq lun (getvar "perimeter"))
      (setq aarea (getvar "area"))
      (setq rot 0)
      (setq pre "Sv=")
     )
     ((= test "LINE")
      (redraw ename 3)
      (setq 2pt (cor_l ename)
     p1  (car 2pt)
     p2  (cadr 2pt)
     ang (angle p1 p2)
     rot (/ (* 180 ang) pi)
     lun (distance p1 p2)
     pm  (polar p1 ang (/ lun 2))
     p3  (polar pm (+ ang (* 0.5 pi)) (getvar "textsize"))
     p4  (polar p3 (- ang (* 0.5 pi)) (* 2 (getvar "textsize")))
      )
      (DRAW_PT pm 2)
     )
      )
      )
    )
    (if (or (= rot 270) (<>= rot 120 300))
      (setq rot (+ rot 180))
    )
    (setq lun (* SC lun))
    (if aarea
      (modecho (strcat "  Mis " (apx lun) "   Area: " (apx aarea)))
      (modecho (strcat "  Mis " (apx lun)))
    )
    (setq lun1 (getdist "\nMisura: "))
    (if lun1
      (progn (setq lun lun1))
    )
    (if (= (getvar "useri3") 1)
      (setq str (apx (round lun)))
      (setq str (apx lun))
    )
    (if (not pre)
      (setq pre "")
    )
    (if (not suf)
      (setq suf "")
    )
    (if (or pre suf)
      (setq str (strcat pre str suf))
    )
    (command "_redraw")
    (if p4
      (progn (command "_.line" p4 p3 "") (grvecs (list 2 p4 p3)) (setq linea
(entlast)))
    )
    (command "_osnap"
      "_none"
      "_text"
      "_M"
      (setq p1 (last (grread 8)))
      rot
      (strcat (getvar "users1") str (getvar "users2"))
    )
    (setq testo (entlast))
    (if (= "Sv=" (substr (dxf 1 (entget testo)) 1 3))
      (at entat (entget testo))
    )
    (command "_move" "_l" "" p1 "\\")
    (if linea
      (entdel linea)
    )
    (command "_redraw")
    (cond ((= test "ARC") (redraw ent 4))
   ((= test "ELLIPSE") (redraw ename 4))
   ((= test "LINE") (redraw ename 4))
    )
    (setvar "clayer" cl)
  )
  (setvar "orthomode" om)
  (setq c nil)
  (princ)
)
;---------------------------------------------
Mi sembra doveroso qualche commento:
la routine serve ad immettere la misura della lunnghezza delle entità di
tipo LINEA, POLILINEA, ARCO ecc.
Anche se un po' grezza, la ritengo efficace poiché, a differenza del normale
dimensionamento, mi permette successivamente la gestione più comoda delle
dimensioni ottenute poiché più facilmente filtrabili, quindi modificabili
ecc.(ovviamente il parere é più che soggettivo).
Si tenga conto che nella funzione sono utilizzate le variabili:
- USERI1 per stabilire il numero di decimali utili
- USERI3 per imporre l'approssimazione a 0.05
- USERR2 come fattore di scala della dimesione
- USERS1 come prefisso
- USERS2 come suffisso
- USERS5 per conservare il valore dell'ultima misurazione
La routine, che in AutoCAD funziona perfettamente, in IntelliCAD produce il
seg. errore:
error: Function cancelled
(COMMAND "_.line" P4 P3 "")
(PROGN (COMMAND "_.line" P4 P3 "") (GRVECS (LIST 2 P4 P3)) (SETQ LINEA
(ENTLAST)))
(IF P4 (PROGN (COMMAND "_.line" P4 P3 "") (GRVECS (LIST 2 P4 P3)) (SETQ
LINEA (ENTLAST))))
...cut...
grazie per l'interessamento e spero di non essermi dilungato troppo.
giuSerpe

 ??? a me succede di non poter usare conteporaneamente più osnap(s).
Anche in Progesoft. Settando Osmode in grupponi non funziona
corretamente, mentre invocando durante il tracciamento ( o digitando
'_Nea) invece sembra di sì!
Come accennavo in altro thread ho scaricato il binario della Cadopia e,
anche se non ancora avuto tempo di testarlo a fondo, pare gli snap
(anche più snap insieme) funzionino bene (anche se mancando una funzione
"magnetic" non sono così potenti come quelli di Autocad).
Quindi, visto che il sorgente è il medesimo, sembrebbe solo un problema
di compilazione.
La Progesoft, da parte sua, mi ha detto che si stanno occupando della
cosa....
Spero non mi facciano pagare anche la Patch.
Avrei anche una proposta: se su questo NG, per proporre argomenti su
Intellicad e/o il Lisp usiamo dei tag [Intellicad] [Lisp] nel soggetto
diventerebbe
più facile individuarli (e filtrarli per chi usa questa tecnica).
Ciao
B.A.

... e non finisce qui.
Tralasciavo il DCL; ho notato che ICAD non riesce a visualizzare i riquadri
di dialogo, o meglio almeno quelli di una certa complessità. Inutile
aggiungere che ho provato ad aumentare la risoluzione video.
Ciao
giuSerpe

 grazie per l'interessamento e spero di non essermi dilungato troppo.
Tu non ti dei dilungato troppo ma tua routine invece si.
Se l'hai fatta tu non dovresti avere problemi ad isolare il modulo che
crea problemi.
Così ad occhio io direi:
(defun DRAW_PT (pt color / dd p1 p2 p3 p4)
  (setq dd (/ (getvar "VIEWSIZE") 150.0)
che peraltro mi sfugge nel suo funzionamento....
(Intendo dire che è al di là delle mie capacità...)
Isolamdo il problema si può provare a postarlo sul forum (sezione lisp)
dell'Intellicad Consortium.
Se è solo una strullata qualcuno lo dirà, se invece è un bella
inconpatibilità il mondo Intelicad ne verrà informato.
Fammi sapere almeno come si usa in autocad!
ciao
B.A.