vbamania.pl
login:
hasło:
 
  *Rejestracja *Zapomniane hasło
 Dziś jest poniedziałek, 29 kwietnia 2024 roku.
Ustaw jako stronę startową Ulubione Napisz
PowrótPowrót do serwisu  RegulaminRegulamin rssRSS

  tytuł wątku:
Wątki dyskusji

Odczytywanie wierzchołków pollilinii CAD


otwartyotwarty rozpoczął: adesign postów: 4



napisał: admin
postów: 613


umieszczony:
10 września 2012
09:00

edytowany:
10 września 2012
09:01

  
Witam,

Kod oczywiscie testowalem u siebie i dzialal. Nie wykluczam jednak jakiejs literowki.
Nie moge go jednak sprawdzic w tej chwili, nie mam tutaj AutoCADa.

Zmienne
Dim tFT(0 To 1) As Integer
Dim tData(0 To 1) As Variant


to ustawienia do filtru zbioru wskazan.

Zbior wskazan jest tworzony komenda:
Set oSS = ThisDrawing.SelectionSets.Add("SSET")



w dalszej czesci kodu utworzy zbior wskazan jest reprezetowany poprzez zmienna oSS.

Petla For Each iteruje po wszystkich elementach znajdujacych sie w zbiorze wskazan oSS .
Rzeczywiscie, nie zadeklarowalem zmiennej oEnt. Reprezentuje ona pojedynczy element w zbiorze wskazan oSS .
Poki nie uzywasz Option Explicit brak dej deklaracji nie wplywa na dzialanie programu.

pozdrawiam
admin.

Cytat:
Dziękuję za odpowiedź i to tak błyskawiczną. Odczytałem to i tak z dużym opóźnieniem, ale od chyba dobrego tygodnia próbuję zrozumieć i zmodyfikować po swojemu, ale nie działa.

Stworzyłem rysunek .dwg z warstwami 0, w1, w2, w3 i na każdej z warstw "w" umieściłem po jednej polilini. Niestety po uruchomieniu kodu, najwyraźniej polilinie nie są odczytywane, gdyż MsgBox za każdym razem zwraca komunikat. Na warstwie "w.." znajduje się 0 obiektów.

Pojęcia nie mam po co są te zmienne
Dim tFT(0 To 1) As Integer
Dim tData(0 To 1) As Variant

.....

gdzie dalej znajduje zastosowanie "SSET"? Jak się domyślam tworzymy w ten sposób jakiś obiekt SSET, ale później nic się z nim nie dzieje.

.....

Podejrzewam, że wewnętrzna pętla też nie będzie działała. Poza tym co to za obiekt - oEnt ?

For Each oEnt In oSS

'A tu można dokonywaćoperacji na poszczególnych poliliniach...

Next oEnt

........

Generalnie jakbym powiedział, że rozumiem cały ten kod, to bym skłamał


Dlatego pytanie - czy admin sprawdził działanie tego kodu? Wydaje mi się, że o jego poprawności, zwłaszcza tego SelectionSets świadczyłyby komunikaty MsgBox - Na warstwie "w.." znajduje się 1 obiektów. "1" bo na każdej warstwie "w" umieściłem jedną polilinie.

Nie proszę tu o tłumaczenie wiersz po wierszu kodu, ale chciałbym mieć pewność, że kod ten został przetestowany i działał. Wtedy będę szukał wyjaśnienia dlaczego nie działa u mnie.


Pozdrawiam,
napisał: adesign
postów: 2


umieszczony:
8 września 2012
18:41

edytowany:
8 września 2012
18:52

  
nazwa pliku rozmiar
OdczytPollilini.dwg 19.96 kB

Dziękuję za odpowiedź i to tak błyskawiczną. Odczytałem to i tak z dużym opóźnieniem, ale od chyba dobrego tygodnia próbuję zrozumieć i zmodyfikować po swojemu, ale nie działa.

Stworzyłem rysunek .dwg z warstwami 0, w1, w2, w3 i na każdej z warstw "w" umieściłem po jednej polilini. Niestety po uruchomieniu kodu, najwyraźniej polilinie nie są odczytywane, gdyż MsgBox za każdym razem zwraca komunikat. Na warstwie "w.." znajduje się 0 obiektów.

Pojęcia nie mam po co są te zmienne
Dim tFT(0 To 1) As Integer
Dim tData(0 To 1) As Variant

.....

gdzie dalej znajduje zastosowanie "SSET"? Jak się domyślam tworzymy w ten sposób jakiś obiekt SSET, ale później nic się z nim nie dzieje.

.....

Podejrzewam, że wewnętrzna pętla też nie będzie działała. Poza tym co to za obiekt - oEnt ?

For Each oEnt In oSS

'A tu można dokonywaćoperacji na poszczególnych poliliniach...

Next oEnt

........

Generalnie jakbym powiedział, że rozumiem cały ten kod, to bym skłamał


Dlatego pytanie - czy admin sprawdził działanie tego kodu? Wydaje mi się, że o jego poprawności, zwłaszcza tego SelectionSets świadczyłyby komunikaty MsgBox - Na warstwie "w.." znajduje się 1 obiektów. "1" bo na każdej warstwie "w" umieściłem jedną polilinie.

Nie proszę tu o tłumaczenie wiersz po wierszu kodu, ale chciałbym mieć pewność, że kod ten został przetestowany i działał. Wtedy będę szukał wyjaśnienia dlaczego nie działa u mnie.


Pozdrawiam,
napisał: admin
postów: 613


umieszczony:
14 sierpnia 2012
16:07

  
Cytat:
Witam,

Mam pytanie w jaki sposób pobrać informacje nt. kolejnych współrzędnych pollilinii (ewentualnie też splajnu)? Zadanie generalnie jest takie: na osobnych warstwach, np. w1, w2, ...wn rysuję pojedyncze pollilinie. Warstwy są po to, żeby te pollilinie jednoznacznie zidentyfikować. Następnie chciałbym pobrać z każdej warstwy kolejne współrzędne pollilinii. Współrzędne te byłyby zapisywane w tablicach P1(x0,y0,z0,x1,y1,z1,....), P2, itd.

Posiłkuję się książką "Tworzenie makr w VBA AutoCAD 2002 i 2004" J.E. Clark i próbuje się trochę pobawić w programistę. Chociaż za bardzo ponad przedstawione w książce przykładu nie wybiegam. Wydaje mi się, że w moim zadaniu jakiś obiekt SelectionSet należy wykorzystać, ale na razie to za wysoki poziom dla mnie. Dlatego zwracam się do ekspertów.

Może ktoś ma jakiś pomysł?


Witam,

Rozumowanie masz OK:)

Ja bym do tego tematu podszedł tak:
1. Pierwsza pętla (najbardziej zewnętrzna) ma przebiegać po wszystkich warstwach obecnych warstwach w pliku:
For Each oW in ThisDrawing.Layers
...
Next oW


2. Wewnątrz tej pętli Tworzysz SelectionSet, który będzie wybierał tylko polilinie lezące na rozpatrywanej warstwie.

Całość może wyglądać tak:

Sub Polilinie()
    
    Dim oSS As AcadSelectionSet
    Dim tFT(0 To 1) As Integer
    Dim tData(0 To 1) As Variant
    
    
    For Each oW In ThisDrawing.Layers
    
        Set oSS = ThisDrawing.SelectionSets.Add("SSET")
        tFT(0) = 0: tData(0) = "Polyline"
        tFT(1) = 8: tData(1) = oW.Name
        
        Dim vFT As Variant, vData As Variant
        vFT = tFT
        vData = tData
        
        oSS.Select acSelectionSetAll, , , vFT, vData
        
            MsgBox "Na warstwie '" & oW.Name & "' znajduje się " & oSS.Count & " elementów."
            
            For Each oEnt In oSS
               'A tu można dokonywaćoperacji na poszczególnych poliliniach...
            Next oEnt
        
        oSS.Delete
    
    Next oW
    
End Sub



pozdrawiam
admin
napisał: adesign
postów: 2


umieszczony:
12 sierpnia 2012
10:19

  
Witam,

Mam pytanie w jaki sposób pobrać informacje nt. kolejnych współrzędnych pollilinii (ewentualnie też splajnu)? Zadanie generalnie jest takie: na osobnych warstwach, np. w1, w2, ...wn rysuję pojedyncze pollilinie. Warstwy są po to, żeby te pollilinie jednoznacznie zidentyfikować. Następnie chciałbym pobrać z każdej warstwy kolejne współrzędne pollilinii. Współrzędne te byłyby zapisywane w tablicach P1(x0,y0,z0,x1,y1,z1,....), P2, itd.

Posiłkuję się książką "Tworzenie makr w VBA AutoCAD 2002 i 2004" J.E. Clark i próbuje się trochę pobawić w programistę. Chociaż za bardzo ponad przedstawione w książce przykładu nie wybiegam. Wydaje mi się, że w moim zadaniu jakiś obiekt SelectionSet należy wykorzystać, ale na razie to za wysoki poziom dla mnie. Dlatego zwracam się do ekspertów.

Może ktoś ma jakiś pomysł?


<-wstecz  1  dalej->
wszystkich stron: 1


Sortuj posty: z