Newsgroup: it.comp.software.cad
Titolo: [VBA e Lisp]

Esisite una funzione o comunque un metodo in V.B.A. per AutoCad che svolga 
gli stessi compiti della funzione TBLSEARCH di AutoLisp?
Esempio:
ho creato un layer di nome *mio*, in Lisp :
(tblsearch "layer" "mio")
mi fornisce le caratteristiche del layer. Come posso ottenere lo stesso 
risultato in VBA?
Un grazie anticipato a chi vorr� rispondemi e darmi la eventuale soluzione.
G.B. Francesconi 

 risultato in VBA?
Francesconi,
in VBA non esiste una funzione corrispondente a tblsearch,
in "Confronto tra Visual LISP e ActiveX/VBA" (Help) viene indicato:
tblsearch >>  Metodo 
AutoCAD.Application.ActiveDocument.collection_object.Name
;----------------------------------------------------------
{code}
Comando: (tblsearch "layer" "mio")
((0 . "LAYER") (2 . "mio") (70 . 0) (62 . 1) (6 . "CONTINUOUS"))
Puoi fare un a cosa del genere:
Sub Example_Layers()
    Dim layerColl As AcadLayers
    Set layerColl = ThisDrawing.Layers
    Dim testlayer As AcadLayer
    Set testlayer = layerColl.Add("mio")
    MsgBox "Un nuovo Layer " & vbCrLf & _
    testlayer.Name & vbCrLf & _
    " è stato aggiunto." & vbCrLf & vbCrLf & _
    "LayerOn Status: " & testlayer.LayerOn & vbCrLf & _
    "Freeze Status: " & testlayer.Freeze & vbCrLf & _
    "Lock Status: " & testlayer.Lock & vbCrLf & _
    "Color: " & testlayer.color _
    , vbInformation, "Esempio Layers"
End Sub
;----------------------------------------------------------
In Visual Lisp:
; Function: ALE_Utl_GetItem
;
; Arguments:
;   VlaCol = Collection Object > ex. (vla-get-Layers *AcAcDwg*)
;   KeyNam = String            > "0"
;
; Return Values:
;   VLA-OBJECT or nil if (vla-item) fails
;
; Note:
;   the Item method is case-sensitive when used with the SelectionSets
;   collection it is not case-sensitive for other collections. 
;
; Example:
;  (ALE_Utl_GetItem
;    (vla-get-Layers (vla-get-ActiveDocument (vlax-get-Acad-Object)))
;    "0"
;  )
;
(defun ALE_Utl_GetItem (VlaCol KeyNam / VlaObj)
  (vl-catch-all-apply
   '(lambda ( )
      (setq VlaObj (vla-item VlaCol KeyNam))
    )
  )
  VlaObj
)
(setq
      *AcadApp* (vlax-get-Acad-Object)
      *AcAcDwg* (vla-get-ActiveDocument *AcadApp*)
      *AcLayrs* (vla-get-Layers         *AcAcDwg*)
)
Comando: (setq LyrObj (ALE_Utl_GetItem *AcLayrs* "mio"))
#<VLA-OBJECT IAcadLayer 0db614c4>
Comando: (vlax-dump-object LyrObj T)
; IAcadLayer: Raggruppamento logico di dati, simile ai lucidi sovrapposti ad un 
disegno
; valori della proprietà:
;   Application (RO) = #<VLA-OBJECT IAcadApplication 00d591b4>
;   Description = ""
;   Document (RO) = #<VLA-OBJECT IAcadDocument 0145b6e0>
;   Freeze = 0
;   Handle (RO) = "197C"
;   HasExtensionDictionary (RO) = 0
;   LayerOn = -1
;   Linetype = "CONTINUOUS"
;   Lineweight = -3
;   Lock = 0
;   Material = "Global"
;   Name = "mio"
;   ObjectID (RO) = 
2129068768
;   ObjectName (RO) = "AcDbLayerTableRecord"
;   OwnerID (RO) = 
2129063120
;   PlotStyleName = "Color_1"
;   Plottable = -1
;   TrueColor = #<VLA-OBJECT IAcadAcCmColor 0db9c7d0>
;   Used (RO) = -1
;   ViewportDefault = 0
; metodi supportati:
;   Delete ()
;   GetExtensionDictionary ()
;   GetXData (3)
;   SetXData (2)
T
;
; Similar of the 70 flag for the layer's table data:
;  0 = Layer is not frozen, frozen by default, locked, Off, NOT plottable 
;  1 = Layer is frozen, otherwise layer is thawed 
;  2 = Layer is frozen by default in new viewports
;  4 = Layer is locked
;  8 = Layer is Off           > new, was in (minusp (cdr (assoc 62 edata)))
; 16 = Layer is NOT plottable > new
;
; Return Value: bits setting [INT] or nil if fails
;
; (ALE_Layer_GetSettings (ALE_Utl_GetItem *AcLayrs* "mio"))
;
(defun ALE_Layer_GetSettings (LyrObj / BtsVal)
  (and
    (null (vl-catch-all-error-p (vl-catch-all-apply 'vla-get-ObjectName (list LyrObj))))
    (eq (vla-get-ObjectName LyrObj) "AcDbLayerTableRecord")
    (setq BtsVal 0)
    (mapcar
     '(lambda (LmbFun LmbVal LmbBit)
        (if (eq (eval (list LmbFun LyrObj)) LmbVal)
          (setq BtsVal (+ LmbBit BtsVal))
        )
      )
     '(vla-get-Freeze vla-get-ViewPortDefault vla-get-Lock vla-get-LayerOn vla-get-Plottable)
     '(  :vlax-true         :vlax-true         :vlax-true    :vlax-false      :vlax-false   )
     '(       1                  2                  4             8               16        )
    )
  )
  BtsVal
)
Comando: (ALE_Layer_GetSettings (ALE_Utl_GetItem *AcLayrs* "mio"))
0
{code}
Ciao.
-- 
 Marc'Antonio Alessi
 (vl-string-translate "1234567890" "i...@mst.lan" "499825513610716")
 
http://xoomer.alice.it/alessi
 > 2D Parametric for 2000-2010 <
 (strcat "I like " (substr (ver) 8 4) "!")
 GPS: N45° 50' 16"  E12° 22' 44"
--

"Marco_AA" <Marco_AA@Marco_AA.it> ha scritto nel messaggio 
news:h7a721$mod$1...@tdi.cu.mi.it...
in VBA non esiste una funzione corrispondente a tblsearch,
in "Confronto tra Visual LISP e ActiveX/VBA" (Help) viene indicato:
tblsearch >>  Metodo 
AutoCAD.Application.ActiveDocument.collection_object.Name
;----------------------------------------------------------
{code}
Comando: (tblsearch "layer" "mio")
((0 . "LAYER") (2 . "mio") (70 . 0) (62 . 1) (6 . "CONTINUOUS"))
Puoi fare un a cosa del genere:
Sub Example_Layers()
    Dim layerColl As AcadLayers
    Set layerColl = ThisDrawing.Layers
    Dim testlayer As AcadLayer
    Set testlayer = layerColl.Add("mio")
    MsgBox "Un nuovo Layer " & vbCrLf & _
    testlayer.Name & vbCrLf & _
    " � stato aggiunto." & vbCrLf & vbCrLf & _

;----------------------------------------------------------
In Visual Lisp:



Comando: (vlax-dump-object LyrObj T)

; valori della propriet�:



{code}
Ciao.

Grazie Marco, sempre gentile e disponibile.
E' molto che non ci sentiamo, un caro saluto
G.B.Francesconi