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
|
|
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
|
|