Ansys.com


Pagina 1 di 2 12 UltimaUltima
Risultati da 1 a 10 di 16
  1. #1
    Utente Junior
    Iscritto dal
    2008
    Messaggi
    14
    Professione
    Disegnatore-Progettista
    Regione
    Lombardia
    Software
    Autocad Mechanical,Inventor PRO,3DSMax,EsaPro

    Predefinito Visualizzare attributi blocco da VBA

    Un saluto a tutti :)
    Espongo brevemente il mio problema...
    all' interno di un file .dwg inserisco diversi blocchi dinamici e non che contengono un certo numero di attributi.

    Esempio:
    Nome blocco: PIPPO
    Etichetta 1° attributo:QUI valore:50
    Etichetta 2° attributo:QUO valore:60
    Etichetta 3° attributo:QUA valore:100

    Nome blocco: PLUTO
    Etichetta 1° attributo:QUI valore:20
    Etichetta 2° attributo:QUO valore:30
    Etichetta 3° attributo:QUA valore:100

    Etc. Etc.

    Vorrei realizzare un Form strutturato cosi:

    TextBox1 = nome blocco
    TextBox2 = valore attributo QUI
    TextBox3 = valore attributo QUO
    TextBox4 = valore attributo QUA
    CommandButton1 = vai al prossimo blocco
    CommandButton2 = chiudi

    Per ora riesco solo a passare al TextBox1 il nome blocco ma non riesco a passare i valori di QUI QUO QUA alle rispettive TextBox
    (per i pulsanti no problem)

    Premetto che ho iniziato da poco a "giochicchiare" col VBA di Autocad da quello che ho capito dovrei utilizzare il metodo GetAttributes ... ma sinceramente non riesco ad applicarlo :o

    Un grazie anticipato a chi saprà darmi una mano :)

    P.S.
    Utilizzo Autocad Mechanical 2007 ( a breve passero' al 2009)

  2. #2
    Utente poco attivo
    Iscritto dal
    2008
    Messaggi
    6
    Professione
    Cad manager
    Regione
    Toscana
    Software
    AutoCAD 2008

    Predefinito

    io uso questa routine che seleziona tutti i blocchi ed estrae gli attributi

    '-----seleziona tutti i blocchi-----
    Set sset = ThisDrawing.SelectionSets.Add("selezione")
    filterdata(0) = "supbk" nome del blocco!!
    filtertype(0) = 2
    filterdata(1) = "insert"
    filtertype(1) = 0
    sset.Select acSelectionSetAll, , , filtertype, filterdata
    If sset.Count > 0 Then
    For k = 0 To sset.Count - 1
    attrib = sset.Item(k).GetAttributes
    Set objatt = attrib(1)
    suptxt = objatt.TextString
    Set objatt = attrib(2)
    aggreg = Val(objatt.TextString)
    totale(aggreg + 1) = totale(aggreg + 1) + CDec(suptxt) 'somma totali
    Next
    End If
    ThisDrawing.SelectionSets.Item("selezione").Delete

    mi serve per calcolare dei valori inseriti in un attributo, ma te questa parte la devi saltare (aggreg).
    il valore di 'suptxt' e' quello che devi riportare sul form

  3. #3
    Utente Junior
    Iscritto dal
    2008
    Messaggi
    14
    Professione
    Disegnatore-Progettista
    Regione
    Lombardia
    Software
    Autocad Mechanical,Inventor PRO,3DSMax,EsaPro

    Predefinito

    Grazie Lyon54,
    la tua routine (opportunamente rivista per le mie esigenze) mi ha fatto capire come utilizzare il metodo GetAttributes per passare i vari valori degli attributi alle rispettive TextBox :)
    ... ora ... nel mio DWG ho anche dei blocchi dinamici e fin quando non sfrutto la "dinamicità" del blocco tutto ok ma nel momento in cui vado ad interagire sul blocco lo stesso cambia nome passando per esempio da PIPPO a *U48 e si blocca il tutto come posso bypassare questa situazione?

    Grazie :)

  4. #4
    Utente Junior
    Iscritto dal
    2008
    Messaggi
    14
    Professione
    Disegnatore-Progettista
    Regione
    Lombardia
    Software
    Autocad Mechanical,Inventor PRO,3DSMax,EsaPro

    Predefinito

    Dopo vai tentativi e notti insonni ho risolto il problema in maniera forse un po' grezza :p .... la cosa importante è che comunque fà quello che voglio fargli fare ....:D

  5. #5
    Moderatore L'avatar di PlannerRoad
    Iscritto dal
    2007
    Messaggi
    4954
    Professione
    Variabile
    Regione
    Italia
    Software
    AutoCAD 2016

    Predefinito

    Citazione Originariamente Scritto da Crx76 Visualizza Messaggio
    Dopo vai tentativi e notti insonni ho risolto il problema in maniera forse un po' grezza :p .... la cosa importante è che comunque fà quello che voglio fargli fare ....:D
    Magari se vuoi illustrare come lo hai risolto... ;)
    Potrebbe essere utile in futuro anche per altri!

  6. #6
    Bannato
    Iscritto dal
    2007
    Messaggi
    1683
    Professione
    *
    Regione
    Lombardia
    Software
    AutoCAD

    Predefinito

    Citazione Originariamente Scritto da PlannerRoad Visualizza Messaggio
    Magari se vuoi illustrare come lo hai risolto... ;)
    Potrebbe essere utile in futuro anche per altri!
    ... quoto :)

  7. #7
    Utente Junior
    Iscritto dal
    2008
    Messaggi
    14
    Professione
    Disegnatore-Progettista
    Regione
    Lombardia
    Software
    Autocad Mechanical,Inventor PRO,3DSMax,EsaPro

    Predefinito

    Ci provo ....

    Tenete presente chè:
    Attivando il Form carico in una Combobox i nomi di tutti i blocchi presenti nel dwg, selezionando il nome blocco dalla Combobox lo stesso viene immesso in una textbox ,creo una SelectionSet contenente tutti gli oggetti del disegno e mediante una serie di cicli IF estrapolo dalla SelectionSet le varie posizioni dei blocchi e le carico in una Listbox, dopo di che cliccando sulla listbox i vari numerelli presenti o semplicemente scorrendo con le frecce della tastiera (in su o in giu) estrapolo i relativi attributi....

    vien quasi piu' semplice mostrarvi il codice....

    Private Sub UserForm_Activate()
    Dim i, j, btot As Integer
    Dim bnam As String

    btot = ThisDrawing.Blocks.Count

    For i = 0 To btot - 1
    bnam = ThisDrawing.Blocks.Item(i).Name
    If Not Mid$(bnam, 1, 1) = "*" And bnam <> "GENAXEH" Then ComboBox1.AddItem bnam
    Next i

    End Sub


    Poi sull'evento:

    Private Sub ComboBox1_Change()
    '<<<<<<<-------------
    Dim BlockRef As AcadBlockReference
    Dim varAttributes As Variant
    Dim intAttribCount As Integer
    Dim newss As AcadSelectionSet

    ' Cancella la Selection Set se esiste
    On Error Resume Next
    If Not IsNull(ThisDrawing.SelectionSets.Item("ss")) Then
    Set newss = ThisDrawing.SelectionSets.Item("ss")
    newss.Delete
    End If

    ListBox1.Clear

    TextBox6.Value = 0
    TextBox1.Value = ComboBox1.Value

    Set newss = ThisDrawing.SelectionSets.Add("ss")
    newss.Select acSelectionSetAll


    If newss.Count > 0 Then
    i = 1
    o = 0

    For x = 0 To newss.Count - 1

    newss.Item (o)

    If newss.Item(o).ObjectName = "AcDbBlockReference" Then

    If newss.Item(o).EffectiveName = TextBox1.Value Then
    i = i + 1

    varAttributes = newss.Item(o).GetAttributes

    For intAttribCount = LBound(varAttributes) To UBound(varAttributes)

    If varAttributes(intAttribCount).TagString = "Nome del 1°tag" Then
    TextBox2.Value = varAttributes(intAttribCount).TextString
    ElseIf varAttributes(intAttribCount).TagString = "Nome del 2°tag" Then
    TextBox3.Value = varAttributes(intAttribCount).TextString
    "ETC. ETC."
    End If

    Next intAttribCount

    ListBox1.AddItem (o)
    o = o + 1
    ElseIf newss.Item(o).EffectiveName <> TextBox1.Value Then
    o = o + 1
    End If
    ElseIf newss.Item(o).ObjectName <> "AcDbBlockReference" Then
    o = o + 1
    End If
    Next x
    End If

    TextBox6.Value = i - 1

    End Sub


    Infine sull'evento:

    Private Sub ListBox1_Change()

    o = ListBox1.Value
    If ListBox1.ListCount = 0 Then
    Exit Sub
    End If

    TextBox2.clear
    TextBox3.clear

    Set newss = ThisDrawing.SelectionSets("ss")

    Set BlockRef = newss.Item(o)

    If BlockRef.EffectiveName = TextBox1.Value Then


    varAttributes = BlockRef.GetAttributes
    'check all attributes
    For intAttribCount = LBound(varAttributes) To UBound(varAttributes)

    If varAttributes(intAttribCount).TagString = "Nome del 1°tag" Then
    TextBox2.Value = varAttributes(intAttribCount).TextString
    ElseIf varAttributes(intAttribCount).TagString = "Nome del 2°tag" Then
    TextBox3.Value = varAttributes(intAttribCount).TextString
    "ETC. ETC."
    End If

    Next intAttribCount
    End If
    End Sub


    E' un po' macchinoso e "brutale" sicuramente migliorabile .... anzi se avete suggerimenti ben vengano :D

    Ora una domanda per voi ... una volta selezionato il blocco se volessi effettuare uno zoom sul blocco selezionato come potrei fare :p ???
    Ultima modifica di Crx76; 19-06-2008 alle 22: 23

  8. #8
    Utente Junior
    Iscritto dal
    2008
    Messaggi
    14
    Professione
    Disegnatore-Progettista
    Regione
    Lombardia
    Software
    Autocad Mechanical,Inventor PRO,3DSMax,EsaPro

    Predefinito

    Citazione Originariamente Scritto da Crx76 Visualizza Messaggio
    Ora una domanda per voi ... una volta selezionato il blocco se volessi effettuare uno zoom sul blocco selezionato come potrei fare :p ???
    Come non detto...... ho risolto abbastanza facilmente

  9. #9
    Bannato
    Iscritto dal
    2007
    Messaggi
    1683
    Professione
    *
    Regione
    Lombardia
    Software
    AutoCAD

    Predefinito

    Citazione Originariamente Scritto da Crx76 Visualizza Messaggio
    Come non detto...... ho risolto abbastanza facilmente
    di questo non dare la soluzione :D

    Comando: ZOOM
    Specificare un angolo della finestra, digitare un fattore di scala (nX o nXP) o
    [Tutto/Centrato/Dinamico/Estensioni/Precedente/scAla/Finestra/Oggetto] <tempo
    reale>: O

  10. #10
    Utente Junior L'avatar di ghirosoft
    Iscritto dal
    2007
    Messaggi
    85
    Professione
    Impiegato/Progettista
    Regione
    Veneto
    Software
    Autocad 2006-2012-2014

    Predefinito Per Lyon54

    Ciao,
    scusa Lyon54, per aggiungere il nome di un blocco al tuo filtro che hai scritto qui, cosa bisogna scrivere?
    Io ho fatto qualche prova, ma il filtro mi da come numero di blocchi sempre il totale del disegno.

    Grazie!
    P.S. Non chiedermi di trascrivere il mio esempio perchè non ricordo dov'è.
    Ghirosoft


  • Pagina 1 di 2 12 UltimaUltima

    Discussioni Simili

    1. Rotazione attributi di un blocco
      Di zintonio nel forum Lisp per Autocad
      Risposte: 7
      Ultimo Messaggio: 26-04-2010, 18: 44
    2. Modificare attributi di un blocco
      Di mirk nel forum VBA per Autocad
      Risposte: 3
      Ultimo Messaggio: 08-04-2009, 16: 18
    3. Inserire blocco con attributi aggiornabili
      Di ghirosoft nel forum VBA per Autocad
      Risposte: 0
      Ultimo Messaggio: 26-01-2009, 14: 51

    Segnalibri

    Segnalibri

    Permessi di Scrittura

    • Tu non puoi inviare nuove discussioni
    • Tu non puoi inviare risposte
    • Tu non puoi inviare allegati
    • Tu non puoi modificare i tuoi messaggi
    •  



    CAD3D.it - la community dei progettisti