Sasek Opublikowano 22 Sierpnia 2012 Zgłoś Udostępnij Opublikowano 22 Sierpnia 2012 Witam. Mam taki problem z dwoma programikami: 1.Program powinien wybierać okręgi o promieniu 5, niestety tylko je podświetla ale nie utrzymuje zaznaczenia :(. Why? Sub wybieranie() Dim ssh As ZwcadSelectionSet Dim Ftyp(1) As Integer Dim Fdat(1) As Variant Dim F1, F2 As Variant Ftyp(0) = 0: Fdat(0) = "CIRCLE" Ftyp(1) = 40: Fdat(1) = 5# Set ssh = Thisdocument.SelectionSets.Add("ssh") F1 = Ftyp F2 = Fdat ssh.Delete ssh.Select zcSelectionSetAll, , , F1, F2 ssh.Highlight True End Sub 2. Drugi program miał tworzyć warstwę tak jak normalnie w menadżerze (kopiując style linii, kolor itp.). Kod wygląda następująco: Sub war() Dim k As String Dim gl As String Dim sl As String Dim d As String Dim z As String Dim zab As String Dim n As String Dim zero As ZwcadLayer Dim jeden As ZwcadLayer Set zero = Thisdocument.Layers("0") k = zero.Color gl = zero.LineWeight sl = zero.Linetype d = zero.Plottable z = zero.Freeze zab = zero.Lock n = zero.LayerOn Set jeden = Thisdocument.Layers.Add("1") jeden.Color = k jeden.LineWeight = gl jeden.Linetype = sl jeden.Plottable = d jeden.Freeze = z jeden.Lock = zab jeden.LayerOn = n Thisdocument.Regen End Sub Czy jest jakiś krótszy sposób odczytania danych z istniejącej warstwy albo innego obiektu? I dlaczego jak mam zablokowaną, zamrożoną lub niewidoczna warstwę to wyskakuje błąd? Z góry dzięki za pomoc. Pozdrawiam onentelof 1 Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
kruszynski Opublikowano 23 Sierpnia 2012 Zgłoś Udostępnij Opublikowano 23 Sierpnia 2012 W temacie SelectionSet samo podświetlanie powinno działać właśnie tak jak działa, czyli Highlight nie zmienia aktualnie wybranych obiektów a jedynie je podświetla. Natomiast, żeby selectionset rzeczywiście wybrać, należałoby użyć Thisdocument.ActiveSelectionSet. niestety ZWCAD 2012 jakoś generuje błąd w tym miejscu. Zgłosiliśmy to Producentowi A czy konieczne ta procedura musi być obsługiwana przez VBA? może mógłby Pan zastąpić ją funkcją w LISP. Tam jest dostępna funkcja sssetfirst, która zmienia wybrane obiekty i działa to dobrze. W sprawie Warstw jest kilka kwestii. 1. Definiuje Pan zmienne jako String. Niby można ale nie jest to najlepsze rozwiązanie. Zmienne powinny mieć taki typ danych użyty w definicji warstwy. Więc kolor jako Integer, nazwa String, zablokowany czy widoczny Boolean itd. 2. Jeśli warstwa jest zablokowana kolor zmieniany jest na liczbę przeciwną. W tym przypadku wystarczy użyć wartości bezwzględnej. 3. Szybszym sposobem jest przepisanie wartości bezpośrednio z warstwy do warstwy, bez konieczności używania dodatkowych zmiennych. Czyli gotowy kod wyglądałby następująco: Sub war() Dim zero As ZwcadLayer Dim jeden As ZwcadLayer Set zero = Thisdocument.Layers("0") Set jeden = Thisdocument.Layers.Add("1") With jeden .Color = Abs(zero.Color) .LineWeight = zero.LineWeight .Linetype = zero.Linetype .Plottable = zero.Plottable .Freeze = zero.Freeze .Lock = zero.Lock .LayerOn = zero.LayerOn End With Thisdocument.Regen End Sub Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi
Dołącz do dyskusji
Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.