Corel FORUM Strona Główna Corel FORUM
Forum użytkowników programów firmy Corel. Grafika wektorowa, rastrowa i obróbka zdjęć cyfrowych

FAQFAQ  SzukajSzukaj  UżytkownicyUżytkownicy  GrupyGrupy
RejestracjaRejestracja  ZalogujZaloguj  DownloadDownload

Poprzedni temat «» Następny temat
Zmiana pieszego węzła w obiekcie.
Autor Wiadomość
chezare 



Pomógł: 402 razy
Dołączył: 24 Gru 2010
Posty: 4551
Skąd: Grodzisk Mazowiecki
Wysłany: 22 Luty 2015, 07:30   

Tutaj magik który równie sprawnie posługuje się gitarami akustycznymi i elektrycznymi.
https://www.youtube.com/watch?v=Kt7aE_Fzhd8
https://www.youtube.com/watch?v=2csfvIEO5kU
Szwed wymyślił wyżłobienie progów, Fender robi gitary sygnowane jego nazwiskiem, gra kostkami podpisanymi jego nazwiskiem i używa strun które też nazywają się Malmsteen.
To bez wątpienia jeden z najlepszych gitarzystów rockowych.
 
 
restauro 



Wersja CorelDRAW: CorelDraw X4 ,X7
Pomógł: 575 razy
Dołączył: 25 Lis 2009
Posty: 7689
Skąd: Gdynia
Wysłany: 22 Luty 2015, 11:25   

"Zmieniony przez chezare Dzisiaj 6:41, w całości zmieniany 21 razy."
Żeby to jeszcze jakoś ładnie zagmatwać , pomyślałem słuchając Paco de Lucia Burghausen 2004 , że pomocne byłoby dodatkowo zastosowanie teorii prawdopodobieństwa .
 
 
Martin Nez 
Doradca
Grafik?


Wersja CorelDRAW: 2019
Pomógł: 14 razy
Dołączył: 29 Sty 2011
Posty: 115
Skąd: Czmoń
Wysłany: 22 Luty 2015, 15:30   

Witam,
ostatnio pisałem pewne makro i przydatnym narzędziem w nim była właśnie możliwość ręcznego ustawienia "pierwszego" węzła.
Napisałem coś takiego:
Kod:
Sub ustawStart()
    If ActiveSelection.Shapes.Count = 0 Then
        MsgBox ("Zaznacz węzeł w obiekcie.")
        Exit Sub
    End If
   
    ActiveDocument.Unit = cdrMillimeter
    Dim s As Shape
    Dim sp As SubPath
    Dim test As Boolean
    test = False
   
    Set s = ActiveShape
   
    For Each sp In s.Curve.SubPaths
        For i = 1 To sp.Nodes.Count
            If sp.Nodes(i).Selected = True Then
                sp.Nodes(i).BreakApart
                sp.EndNode.JoinWith sp.StartNode
                test = True
            Else
                If i = sp.Nodes.Count And test = False Then
                    MsgBox ("Zaznacz węzeł.")
                End If
            End If
        Next i
    Next sp
End Sub


Warunkiem użycia jest zaznaczenie węzła, który powinien być pierwszy przy pomocy narzędzia Kształt.

Pozdr,
MN
 
 
chezare 



Pomógł: 402 razy
Dołączył: 24 Gru 2010
Posty: 4551
Skąd: Grodzisk Mazowiecki
Wysłany: 22 Luty 2015, 17:50   

Zaznaczenie węzła i kliknięcie ikony "rozłącz" to jeden ruch, jak wyciągniesz makro na wierzch, to zmieni się tylko to, że ikona będzie w innym miejscu :-)
Poza tym, choć tu mogę się mylić bo się na tym nie znam, nie za bardzo ma sens wędrówka po wszystkich segmentach i węzłach, jak jeden jest zaznaczony. Zaznaczony węzeł da się w makrze zidentyfikować bez tych pętli?
Jak przyjdzie Szaman, to znowu powie że przypisujesz wartość zmiennej która w momencie deklaracji taką wartość otrzymuje. Test zawsze po uruchomieniu procedury będzie miał wartość false :-)
Oprócz tego, ta procedura powinna kończyć działanie w momencie znalezienia zaznaczonego węzła, a chyba tak nie jest?
 
 
maroQ 
Doradca


Pomógł: 16 razy
Wiek: 40
Dołączył: 08 Lut 2011
Posty: 117
Skąd: Kalisz
  Wysłany: 25 Luty 2015, 23:43   

Martin Nez napisał/a:

Kod:
(...)
        For i = 1 To sp.Nodes.Count
(...)
Wypadało by zadeklarować zmienną "i" jako liczbę całkowitą (integer) bo inaczej używasz zmiennej typu "variant".
Martin Nez napisał/a:

Kod:
(...)
            Else
                If i = sp.Nodes.Count And test = False Then
(...)
Heh... myślenie z PHP? Miałem tak jak zaczynałem z VBA. Polecam jednak "ElseIf".

No to tyle drogą czepiania się by wszyscy byli zadowoleni, że szaman się znowu czegoś czepia ( dances ).

Ja bym to napisał tak:
Kod:
Sub ustawStart()
    If ActiveSelection.Shapes.Count = 0 Then
        MsgBox "Zaznacz węzeł w obiekcie.", vbExclamation, "(o.0)"
        Exit Sub
    End If
   
    On Error GoTo fin
   
    Optimization = True
   
    ActiveDocument.Unit = cdrMillimeter
    Dim c As Curve
    Dim i As Integer

    Set c = ActiveShape.Curve

    For i = 1 To c.Nodes.Count
        If c.Nodes(i).Selected Then
            c.Nodes(i).BreakApart
            c.Closed = True
            GoTo fin
        End If
    Next i
   
    MsgBox "Zaznacz węzeł!!", vbExclamation, "(0.0)"
fin:
    Optimization = False
    Refresh
End Sub

Działa również jeśli krzywa posiada wiele ścieżek (podkrzywych :D ).

Zmiennych typu boolean nie trzeba sprawdzać:
Kod:
Dim kali As Boolean
kali = true
if kali then
 (...)
end if
lub
Kod:
Dim kali As Boolean
kali = false
if Not kali then
 (...)
end if

Zapis "kali = true" jest oczywiście bardziej oczywisty i czytelny. Poza programistami C bo ci w tym momencie dostają zawału (jeśli nie znają VBA bo = to operator przypisania w C).
Swoją drogą w przypadku wartości logicznych ustawienie zmiennej po deklaracji bywa sensowne bo zwiększa czytelność kodu. W VB.NET bardziej jednak przydają się w takim przypadku stałe. Raz ustawiona stała nie zmienia stanu w trakcie działania programu dzięki czemu można np. odblokowywać pewne funkcje dla potrzeb debugowania w trakcie pisania programu i nie martwić się później o usuwanie nadmiarowego kodu.
 
 
chezare 



Pomógł: 402 razy
Dołączył: 24 Gru 2010
Posty: 4551
Skąd: Grodzisk Mazowiecki
Wysłany: 26 Luty 2015, 03:03   

Nie żebym się czepiał i do niczego mi taka procedura niepotrzebna, ale sytuacja jest taka, że mamy zaznaczony konkretny, pojedynczy węzeł. Nie ma w VBA metody żeby bez sprawdzania po kolei wszystkich wykonać operację na tym jednym zaznaczonym?
 
 
maroQ 
Doradca


Pomógł: 16 razy
Wiek: 40
Dołączył: 08 Lut 2011
Posty: 117
Skąd: Kalisz
Wysłany: 4 Marzec 2015, 22:11   

chezare napisał/a:
Nie ma w VBA metody żeby bez sprawdzania po kolei wszystkich wykonać operację na tym jednym zaznaczonym

Nie chodzi o samo VBA, ale o to jakie metody Corel udostępnia. Niestety nie ma możliwości operowania na obiektach zaznaczonych w inny sposób. Można znaleźć krzywą, ale nie segment czy węzeł. Do tego celu trzeba przejrzeć wszystkie węzły jeden po drugim i zakończyć pętlę w momencie znalezienia konkretnego. Podobnie wygląda sytuacja z zaznaczaniem aktywnego narzędzia (co nie bardzo działa) i wieloma innymi funkcjonalnościami dostępnymi z VBA. Niestety jeśli wiesz jak coś zrobić ręcznie to nie ma gwarancji, że zrobisz to z makra. Da się rejestrować i odtwarzać klawiaturę i mysz, ale to wymaga zarejestrowania takich operacji i później ich wywołaniu. Funkcjonalność fajna, ale zupełnie nie uniwersalna bo dla nowego komputera z inną rozdzielczością trzeba by wszystko ustawiać ponownie, nie mówiąc o zmianie wersji Corela czy pozycji danego paska. Napisałem taki program pod wpływem ludka który kiedyś mocno mącił w tej części forum twierdząc, że VBA jest do niczego i jego program do rejestracji myszy i klawiatury robi to lepiej i szybciej. Napisanie czegoś takiego nie jest aż tak wielkim problemem. Zresztą są gotowe fragmenty kodu które można w tym celu wykorzystać, ale brak przenośności tego rozwiązania sprawia, że narazie trzeba pozostać przy tym co oferuje VBA.
 
 
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum
Dodaj temat do Ulubionych
Wersja do druku

Skocz do:  

Powered by phpBB modified by Przemo © 2003 phpBB Group
Nowe zasady dotyczące cookies. Wykorzystujemy pliki cookies, aby nasz serwis lepiej spełniał Państwa oczekiwania. Można zablokować zapisywanie cookies, zmieniając ustawienia przeglądarki.
 

ABC CorelDRAW X7 PL

ABC CorelDRAW X7 PL
Roland Zimek

Cena: 39.90 z�

dodaj do koszyka
zobacz opis

 

CorelDRAW X7 PL. �wiczenia praktyczne

CorelDRAW X7 PL. �wiczenia praktyczne
Roland Zimek

Cena: 27.00 z�

dodaj do koszyka
zobacz opis

 

Corel PaintShop Pro X4. Obr�bka zdj�� cyfrowych. �wiczenia praktyczne

Corel PaintShop Pro X4. Obr�bka zdj�� cyfrowych. �wiczenia praktyczne
Roland Zimek

Cena: 34.90 z�

dodaj do koszyka
zobacz opis

 

Practical Real-time Data Processing and Analytics. Distributed Computing and Event Processing using Apache Spark, Flink, Storm, and Kafka eBook

Cena: 134.10 z�
Dodaj do koszyka

 

JavaScript od pierwszej linii kodu. Błyskawiczna nauka pisania gier, stron WWW i aplikacji internetowych

JavaScript od pierwszej linii kodu. Błyskawiczna nauka pisania gier, stron WWW i aplikacji internetowych
Laurence Lars Svekis, Maaike van Putten, Rob Percival

Cena: 49.50 zł
zobacz opis

Strona wygenerowana w 0.08 sekundy. Zapytań do SQL: 12