Advertisement
Guest User

Untitled

a guest
Jan 23rd, 2018
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. Sub klawiatura()
  2.     zad1
  3. End Sub
  4. Private Function zad1()
  5.     'Jak stworzyc blok z atrybutem:
  6.     '1. narysuj figure 2d/3d
  7.     '2. W widoku 2d (prawy dolny rog, zebatka, drawing & annotation) zaznaczasz blok, insert, create block
  8.     '3. Po utworzeniu bloku zaznacz go, prawy przycisk myszy i edit block
  9.     '4. Dajecie attribute definition, dodajecie tyle atrybutow ile chcecie, na pewno jeden przechowywujacy iksa
  10.     '5. Zeby byc pewnym, ze atrybuty beda sie wyswietlac - przejdzcie na widok perspektywiczny i upewnijcie sie ze atrybut jest na/nad blokiem a nie w nim/pod nim
  11.     '6. dodatkowo w properties mozecie wrzucic atrybut z iksem na inny layer o kolorze czarnym
  12.     '7. W tym momencie przypomnialem sobie, ze w warcaby gra sie kolkami
  13.     '8. No i to na tyle, robicie plansze z waszych blokow, szukacie (taki moj pomysl) blokow ktore maja atrybut poczatkowy = tak i na tej podstawie wstawiacie kolka do pozycji startowych, potem przy kazdym ruchu sprawdzacie pierwsze i drugie zaznaczone pole i robicie ruch lub wyswietlacie blad, kolka mozecie wstawic na 2 warstwach to beda mialy rozne kolory a wy i tak zaznaczacie caly blok przy kliknieciu
  14.    ' Create a new selection set
  15.    Dim sset As AcadSelectionSet
  16.     Dim sset2 As AcadSelectionSet
  17.     'Set sset = ThisDrawing.SelectionSets.Add("SS1")
  18.    'Set sset2 = ThisDrawing.SelectionSets.Add("SS2")
  19.    Set sset = ThisDrawing.SelectionSets("SS1")
  20.     Set sset2 = ThisDrawing.SelectionSets("SS2")
  21.     ' Prompt the user to select objects
  22.    ' and add them to the selection set.
  23.    ' To finish selecting, press ENTER.
  24.  
  25.     Dim layer As AcadLayer
  26.     Dim layers As AcadLayers
  27.  
  28.     Set layers = ThisDrawing.layers
  29.    
  30.     For Each layer In layers    'ukrywanie warstw
  31.        If layer.name = "klawisze" Or layer.name = "napisy" Then
  32.             layer.LayerOn = False
  33.         End If
  34.     Next
  35.  
  36.     sset.Highlight (False'wylaczenie podswietlen
  37.     Application.Update  'aktualizacja widoku
  38.     sset.Clear  'wyczyszczenie selection setow, bardzo wazne zebyscie to ustawiali w dobrych miejscach bo moze wam sie syf tam pozbierac i program sie bedzie sypal
  39.    sset2.Clear
  40.    
  41.    
  42.     punkttabliczki = ThisDrawing.Utility.GetPoint(, "Wskaz, gdzie ma byc umieszczona tabliczka: ")
  43.     Dim ModelSpace As AcadModelSpace
  44.     Set ModelSpace = ActiveDocument.ModelSpace
  45.    
  46.     ReDim ssobjs(9) As AcadEntity   'metoda jakiej uzywam do wrzucenia nowych obiektow do selection seta, nie wiem czemu tak, ale inne nie dzialaly
  47.    Set ssobjs(0) = ThisDrawing.ModelSpace.InsertBlock(punkttabliczki, "nazwa", 1, 1, 1, 0)
  48.     Set ssobjs(1) = ThisDrawing.ModelSpace.InsertBlock(punkttabliczki, "nrrysunku", 1, 1, 1, 0)
  49.     Set ssobjs(2) = ThisDrawing.ModelSpace.InsertBlock(punkttabliczki, "ilosc", 1, 1, 1, 0)
  50.     Set ssobjs(3) = ThisDrawing.ModelSpace.InsertBlock(punkttabliczki, "material", 1, 1, 1, 0)
  51.     Set ssobjs(4) = ThisDrawing.ModelSpace.InsertBlock(punkttabliczki, "masa", 1, 1, 1, 0)
  52.     Set ssobjs(5) = ThisDrawing.ModelSpace.InsertBlock(punkttabliczki, "nazwisko", 1, 1, 1, 0)
  53.     Set ssobjs(6) = ThisDrawing.ModelSpace.InsertBlock(punkttabliczki, "data", 1, 1, 1, 0)
  54.     Set ssobjs(7) = ThisDrawing.ModelSpace.InsertBlock(punkttabliczki, "podzialka", 1, 1, 1, 0)
  55.     Set ssobjs(8) = ThisDrawing.ModelSpace.InsertBlock(punkttabliczki, "format", 1, 1, 1, 0)
  56.     Set ssobjs(9) = ThisDrawing.ModelSpace.InsertBlock(punkttabliczki, "masacalkowita", 1, 1, 1, 0)
  57.     sset2.AddItems ssobjs   'tu wrzucam do selection seta
  58.            
  59.     For Each layer In layers    'wlaczenie widoku warstw
  60.        If layer.name = "klawisze" Or layer.name = "napisy" Then
  61.             layer.LayerOn = True
  62.         End If
  63.     Next
  64.    
  65.     Dim FilterType(0) As Integer
  66.     Dim FilterData(0) As Variant
  67.    
  68.     Dim wybranyklawisz As AcadObject
  69.     Dim punkt As Variant
  70.    
  71.     ThisDrawing.Utility.GetEntity wybranyklawisz, punkt, "" 'pobranie wybranego klawisza, w waszym wypadku to bedzie pole, mozecie uzyc ssobjs(1) zeby przechowywac wybrany pionek oraz wybrane pole docelowe
  72.    ReDim ssobjs(0) As AcadEntity
  73.     Set ssobjs(0) = wybranyklawisz
  74.     sset.AddItems ssobjs
  75.    
  76.     Dim obj As Variant
  77.     Set obj = sset.Item(0)
  78.    
  79.     Dim thisdwg As AcadDocument
  80.     Set thisdwg = ThisDrawing
  81.      
  82.     Dim atr As Variant
  83.      
  84.     atr = obj.GetAttributes 'dobranie sie do atrybutow
  85.    
  86.     Dim txtstr As String
  87.     Dim klawisz As String
  88.     Dim klawiszduzy As String
  89.     Dim capslock As Boolean
  90.     Dim shift As Boolean
  91.     Dim fresh As Boolean
  92.  
  93.     capslock = False
  94.     shift = False
  95.     tabliczka = 0
  96.     Set obj2 = sset2.Item(tabliczka)
  97.     atrtab = obj2.GetAttributes
  98.     klawisz = atr(1).TextString 'pobranie drugiego atrybutu (bo leci od 0)
  99.    While klawisz <> "enter"
  100.         If klawisz = "tab" Then
  101.             tabliczka = tabliczka + 1
  102.             If tabliczka = 10 Then
  103.                 tabliczka = 0
  104.             End If
  105.             Set obj2 = sset2.Item(tabliczka)
  106.             atrtab = obj2.GetAttributes
  107.  
  108.         ElseIf klawisz = "shift" Then 'jesli wcisniemy shift
  109.            If shift = False Then
  110.                 shift = True
  111.                 fresh = True
  112.             Else
  113.                 shift = False
  114.             End If
  115.        
  116.         ElseIf klawisz = "capslock" Then 'jesli wcisniemy capslock
  117.            If capslock = False Then
  118.                 capslock = True
  119.             Else
  120.                 capslock = False
  121.             End If
  122.            
  123.         ElseIf klawisz = "backspace" Then 'jesli wcisniemy backspace
  124.            If Len(atrtab(2).TextString) > 0 Then
  125.                 atrtab(2).TextString = Left(atrtab(2).TextString, Len(atrtab(2).TextString) - 1)
  126.             End If
  127.            
  128.         ElseIf klawisz = "spacja" Then
  129.             atrtab(2).TextString = atrtab(2).TextString & " "   'edycja atrybutu, w waszym wypadku bedzie po prostu = "x" lub = ""
  130.                
  131.         ElseIf capslock = True Or shift = True Then 'jesli capslock lub shift jest wcisniety
  132.            If shift = True And capslock = False Then
  133.                 klawiszduzy = atr(2).TextString
  134.                 atrtab(2).TextString = atrtab(2).TextString & klawiszduzy
  135.             ElseIf shift = False And capslock = True Then
  136.                 klawiszduzy = atr(2).TextString
  137.                 atrtab(2).TextString = atrtab(2).TextString & klawiszduzy
  138.             Else
  139.                 atrtab(2).TextString = atrtab(2).TextString & klawisz
  140.             End If
  141.            
  142.         Else
  143.             atrtab(2).TextString = atrtab(2).TextString & klawisz
  144.         End If
  145.        
  146.         If fresh = False Then
  147.             shift = False
  148.         End If
  149.         fresh = False
  150.        
  151.         sset.Highlight (False)
  152.         Application.Update
  153.         sset.Clear
  154.         ThisDrawing.Utility.GetEntity wybranyklawisz, punkt, ""
  155.         Set ssobjs(0) = wybranyklawisz
  156.         sset.AddItems ssobjs
  157.        
  158.         Set obj = sset.Item(0)
  159.         atr = obj.GetAttributes
  160.         klawisz = atr(1).TextString
  161.        
  162.     Wend
  163.    
  164.     If klawisz = "enter" Then
  165.         MsgBox "koniec"
  166.     End If
  167.    
  168.     For Each layer In layers
  169.         If layer.name = "klawisze" Or layer.name = "napisy" Then
  170.             layer.LayerOn = False
  171.         End If
  172.     Next
  173.    
  174.     Application.Update
  175. End Function
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement