|
Corel FORUM Forum użytkowników programów firmy Corel. Grafika wektorowa, rastrowa i obróbka zdjęć cyfrowych |
|
Makra - Usuwanie podwójnych węzłów
zyzio - 30 Marzec 2018, 23:01 Temat postu: Usuwanie podwójnych węzłów Witam.
Znacie może jakiś sprytny sposób na automatyczne usunięcie podwójnych, niepotrzebnych węzłów z zaznaczonego obiektu?
Chodzi mi o sytuację jak na zrzucie w załączeniu.
Na chwilę obecną naprawiam to tak, że rozłączam w tym miejscu krzywą następnie ręcznie wyodrębniam jeden lub kilka niepotrzebnych węzłów i zamykam krzywą ponownie, lecz przy większej ilości obiektów to jest masakra.
Będę niezmiernie wdzięczny za wszelkie sugestie.
Pracuję w X3
Dzięki
restauro - 31 Marzec 2018, 13:32
Jeśli masz na myśli skrót klawiaturowy to nie ,ale można to zautomatyzować ,trzeba tylko trochę nabrać wprawy .
Pomoc programu CorelDRAW -
Dodawanie, usuwanie, łączenie i wyrównywanie węzłów
zyzio - 1 Kwiecień 2018, 13:38
Miałem na myśli może coś w rodzaju ulepszonej redukcji węzłów, jakieś makro bo ta domyślna raz działa a raz nie.
Sparkman - 23 Kwiecień 2019, 09:38
Macro eCut ma takie narzędzie.
maroQ - 15 Lipiec 2019, 20:10
zyzio napisał/a: | Znacie może jakiś sprytny sposób na automatyczne usunięcie podwójnych, niepotrzebnych węzłów z zaznaczonego obiektu? |
Kod: | Enum bbCoZrobic 'zawsze na początku modelu vba
TylkoZaznacz = 0
Usuwaj = 1
End Enum
Sub RemoveCloseNode(ByVal distance As Single, ByVal unit As cdrUnit, ByVal zadanie As bbCoZrobic, Optional ByVal elipsa As Single = 1)
Rem Deklaracja zmiennych:
Dim sr As New ShapeRange 'grupa kształtów (worek)
Dim s As Shape 'kształt
Dim s1 As Shape 'kształt
Dim c As Curve 'krzywa
Dim nr As New NodeRange 'grupa węzłów (worek)
Dim n As Node 'węzeł
Dim n1 As Node 'węzeł
'w jakich jednostkach pracujemy
ActiveDocument.unit = unit
'przypisz kształt do zmiennej s i sprawdź czy istnieje
Set s = ActiveShape
If s Is Nothing Then
Call MsgBox("Niestety nic nie zaznaczono!", vbCritical, "Błąd bardzo krytyczny")
Exit Sub
End If
'na wypadek złego kształtu
If s.Type <> cdrCurveShape Then
Call MsgBox("Niestety zaznaczony kształt nie jest krzywą!", vbCritical, "Błąd konkretnie krytyczny")
Exit Sub
End If
'zdefiniuj krzywą
Set c = s.Curve
'wykonuj dla wszystkich węzłów w krzywej
For Each n In c.Nodes
'jeśli odległość między węzłami jest mniejsza niż 'distance'
If distance > n.GetDistanceFrom(n.Next) Then
Set n1 = n.Next
nr.Add n1 'dodaj węzeł do grupy (worka)
If zadanie = TylkoZaznacz Then
Set s1 = ActiveLayer.CreateEllipse(n1.PositionX - elipsa, n1.PositionY - elipsa, n1.PositionX + elipsa, n1.PositionY + elipsa)
With s1 'operowanie na obiekcie s1 specyficzne dla języka Visual Basic niedostępne w innych językach np. C#
.Fill.ApplyUniformFill ActivePalette.Colors(16) 'ustaw kolor wypełnienia dla aktywnej palety dla CMYK jest to czerwony dla innych nie wiem
.Outline.Color = ActivePalette.Colors(16) 'ustaw kolor krawędzi dla aktywnej palety dla CMYK jest to czerwony dla innych nie wiem
.Name = "znacznik węzła nr " & n1.Index 'ustaw nazwę dla węzła
End With
sr.Add s1 'dodaj do grupy krztałtów
End If
End If
Next n
If zadanie = Usuwaj Then
nr.Delete 'kasuj węzły
Else
With sr.Group 'grupuj worek kształtów
.Name = "Grupa znaczników" 'ustaw nazwę grupie
End With
End If
End Sub
Sub testZaznaczenia()
Call RemoveCloseNode(0.8, cdrMillimeter, TylkoZaznacz, 0.1)
End Sub
Sub testUsuwania()
Call RemoveCloseNode(0.8, cdrMillimeter, Usuwaj)
End Sub
|
Procedura testZaznaczenia powoduje wygenerowanie elips w miejscach w których występują podejrzane węzły.
Procedura testUsuwania kasuje następny węzeł który jest zbyt blisko.
UWAGA!!!
Makro może zmienić kształt krzywej!
Pierwszym parametrem dla funkcji RemoveCloseNode jest odległość między węzłami, drugim są jednostki np. mm, trzeci określa jaka operacja zostanie wykonana, a czwarty opcjonalny określa wielkość rysowanych elips (tylko dla zaznaczania).
Enum tak samo jak Type musi być zadeklarowany na początku modelu (wklejamy na górze strony przed innymi makrami).
Makro powinno działać na X3, ale w tym momencie nie mogę tego sprawdzić w razie problemów poszukam instalki.
zyzio - 22 Październik 2019, 11:29
Dziękuję bardzo za zainteresowanie, właśnie testuję w x3 tylko nie wiem czy robię to dobrze, z którego Sub-a powinienem odpalać makro?
|
|