Sasek Posted August 22, 2012 Report Posted August 22, 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 Quote
kruszynski Posted August 23, 2012 Report Posted August 23, 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 Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.