|
Corel FORUM
Forum użytkowników programów firmy Corel. Grafika wektorowa, rastrowa i obróbka zdjęć cyfrowych
|
Macro do porównania dwóch plików cdr |
Autor |
Wiadomość |
oblus
Początkujący
Dołączył: 07 Lut 2014 Posty: 3 Skąd: RŚL
|
Wysłany: 7 Luty 2014, 11:56 Macro do porównania dwóch plików cdr
|
|
|
Cześć poszukuję macra lub funkcjonalności w Corel Draw do porównania zawartości dwóch plików wektorowych cdr.
Wyjaśniam:
mam plik v1 gdzie mam kilka linii, kropek itp - wektory
mam plik v2 gdzie mam to samo co w v1 +nowe linie, kropki itp
potrzebuję takie macro żeby widzieć różnice pomiędzy plikami, np w taki sposób że po włączeniu makra pozostają mi tylko wektory, których nie ma w v1...
czy ktoś coś takiego kojarzy??
ps. pracuje na CorelDraw v11 |
|
|
|
|
oblus
Początkujący
Dołączył: 07 Lut 2014 Posty: 3 Skąd: RŚL
|
Wysłany: 14 Marzec 2014, 09:13
|
|
|
ktokolwiek? |
|
|
|
|
Shame
Red Dot Corporation
Wersja CorelDRAW: X7
Pomógł: 213 razy Wiek: 40 Dołączył: 19 Kwi 2012 Posty: 2565 Skąd: Poznań
|
Wysłany: 14 Marzec 2014, 13:31
|
|
|
Skoro nikt nie pisze, znaczy się, że nikt o czymś takim nie słyszał. W sumie pomysł dobry, pewno każdemu nie raz coś takiego chodziło po głowie. Ale może jeszcze nie powstało, może ciężko to zrobić przy krzywych? Bo pewno trzeba by nie tylko porównywać pozycję węzłów, ale same równania opisujące krzywe, a nie wiem, czy to jest bezpośrednio dostępne przez VB... |
|
|
|
|
bidon184 [Usunięty]
|
Wysłany: 14 Marzec 2014, 17:24
|
|
|
znaczy program by musiał wiedzieć co porównywać,to cięzko z tym będzie,jedynie co zostaje to patrzeć na róznice obiektów krzywych itd |
|
|
|
|
chezare
Pomógł: 402 razy Dołączył: 24 Gru 2010 Posty: 4551 Skąd: Grodzisk Mazowiecki
|
Wysłany: 15 Marzec 2014, 10:09
|
|
|
Takie makro z całą pewnością da się napisać, tylko że ja nie widzę w tym sensu i obawiam się, że to, że takowego jeszcze nie ma, jest spowodowane tym, że inni mają tak samo? |
|
|
|
|
oblus
Początkujący
Dołączył: 07 Lut 2014 Posty: 3 Skąd: RŚL
|
Wysłany: 23 Marzec 2014, 13:11
|
|
|
już tłumaczę sens:
prowadzę dokumentację kablową w corelu (logiczne połączenia - niestety kontynuuje pracę poprzednika i za dużo roboty by to przerzucać do innego programu) i co jakiś czas muszę zrobić inwentaryzację lub po prostu sprawdzić co się zmieniło...
co jakiś czas robię nową wersję pliku gdzie są stare linie i nowe.. i tak w koło dodaje nowe....
po to właśnie przydałoby mi się porównać zawartość dwóch plików
np. program zbiera informacje z pliku v10 jakie są w nim obiekty i sprawdza czy te same są w pliku v11 - jeśli są to je usuwa - w pliku wynikowym mam tylko to co program uznał za nieobecne w v10
to już duuużo daje ;> |
|
|
|
|
maroQ
Doradca
Pomógł: 16 razy Wiek: 40 Dołączył: 08 Lut 2011 Posty: 117 Skąd: Kalisz
|
Wysłany: 13 Wrzesień 2014, 21:06
|
|
|
oblus napisał/a: | np. program zbiera informacje z pliku v10 jakie są w nim obiekty i sprawdza czy te same są w pliku v11 - jeśli są to je usuwa - w pliku wynikowym mam tylko to co program uznał za nieobecne w v10 |
Dało by się takie coś zrobić zakładając, że modyfikowany jest ten sam plik i krzywe nie podlegają rozbiciu np. rozłączenie, usunięcie lub dodanie węzła dla danej krzywej lub co gorsza utworzenie jej na nowo. Chodzi o to, że każdy obiekt w Corelu (typu Shape) ma swój niepowtarzalny identyfikator. Póki nie zacznie się modyfikować krzywej ten identyfikator pozostaje stały. Istnieje możliwość zebrania wszystkich identyfikatorów z jednego pliku i takich samych z drugiego pliku po czym sprawdzanie ich w pętli i eliminacja tych które występują w obu plikach. Gorzej jeśli identyfikator (StaticID) nie może być brany pod uwagę. W takim przypadku trzeba by sprawdzać wszystkie krzywe np. po ich węzłach i sprawdzać czy wszystkie węzły są identyczne. To niestety było by bardzo nieprzyjemne do napisania i z całą pewnością trwało dłużej niż samo sprawdzenie identyfikatorów. Właściwie by opisać dowolną krzywą potrzebne są współrzędne węzłów i kąty oraz długości stycznych do każdego z węzłów (tak można opisać praktycznie każdą krzywą, a jeśli nawet dany segment jest liniowy [brak stycznych] to da się go zamienić na taki który styczne posiada).
Osobiście bardziej złożone obliczeniowo makra wolę robić w VB.NET gdzie jest lepsza obsługa błędów. Przy dużej ilości obliczeń Corel miewa swoje humory i potrafi się w nich gubić. Dlatego dla bardzo złożonych zadań lub wymagających dużej precyzji wolę przenieść dane do bazy danych i tam dokonać obliczeń. Sterowniki do baz lub serwery baz (są bazy nie wymagające serwera np. SQLite) są pisane w językach niskiego poziomu więc czas dokonania obliczeń jest znacznie niższy niż gdyby ten sam kod przetwarzać w pamięci przez VBA lub VB.NET. Raz dla testów napisałem bibliotekę w Fortranie i uruchomiłem ją z VB.NET, porównując czas wykonania tej samej operacji numerycznej napisanej w VB.NET i okazało się, że różnice w czasie wykonania obliczeń są nie tylko mierzalne, ale i bardzo duże. Nawet sam kod napisany w czystym fortranie w porównaniu z kodem skompilowanym w nowszych wersjach w gcc jest szybszy. Dobra tyle nudzenia bo mnie zaraz ktoś ochrzani, że go obrażam :D |
|
|
|
|
chezare
Pomógł: 402 razy Dołączył: 24 Gru 2010 Posty: 4551 Skąd: Grodzisk Mazowiecki
|
Wysłany: 14 Wrzesień 2014, 14:55
|
|
|
Coś Ty Szaman taki grzeczny się zrobił?
Jak by wszędzie było tak grzecznie i sympatycznie jak tutaj, to by człowiek umarł z nudów
Od lutego do września sporo czasu minęło, już pewnie kolega ten rebus rozwiązał "ręcznie"?
Nie wiem co to jest to kablowanie, nie wiem o co chodzi z tymi logicznymi połączeniami i już zupełnie nie rozumiem, że istnieje schemat czegoś, później to coś zostaje w jakiś sposób zmodyfikowane i zaznaczone na tym schemacie i zostaje zapisane do nowego pliku,
W tym pliku powinien być aktualny obraz sytuacji, to jaki jest sens porównywać to z czymś nieaktualnym i na podstawie tego nieaktualnego pliku, skasować coś w tym aktualnym? A jak tych plików jest więcej niż dwa? A jak w takiej grafice powtarzają się identyczne elementy, to porównywanie kształtów nie ma sensu, bo trzeba by jeszcze ustalić odniesienia do innych składowych żeby nie skasować nie tej co trzeba kropki. Jak w jednym tekście jest pięć kropek, a w drugim sześć, to którą zostawić?
Po identyfikatorach, to jest to zadanie proste (chyba, bo ja się na tym nie znam), ale to też nie koniecznie jest przepis na sukces, bo w nowym pliku z dajmy na to okręgu została zrobiona elipsa i ciągle ma ten sam identyfikator. |
|
|
|
|
maroQ
Doradca
Pomógł: 16 razy Wiek: 40 Dołączył: 08 Lut 2011 Posty: 117 Skąd: Kalisz
|
Wysłany: 14 Wrzesień 2014, 19:36
|
|
|
chezare napisał/a: | Po identyfikatorach, to jest to zadanie proste, ale to też nie koniecznie jest przepis na sukces, bo w nowym pliku z dajmy na to okręgu została zrobiona elipsa i ciągle ma ten sam identyfikator. |
No tak zmiany szerokości i wysokości oraz np. zaokrąglenia w prostokątach, modyfikacje wielokątów itp. nie zmieniają identyfikatora, podobnie jak wiele innych operacji. Zakładając jednak, że do schematów elektrycznych zapewne się raczej coś dokłada lub usuwa, a nie modyfikuje rozwiązanie powinno działać.
Wyjaśnię przez przykład:
Kod: | Sub SimpleCompareDemoVer(ByVal docOld As String, ByVal docNew As String, Optional removeOld As Boolean = False)
On Error Resume Next
Dim wnd As Window
Dim doc1 As Document, doc2 As Document
For Each wnd In Windows
If wnd.Caption Like "*" + docOld + "*" Then
Set doc1 = wnd.Document
ElseIf wnd.Caption Like "*" + docNew + "*" Then
Set doc2 = wnd.Document
End If
Next wnd
If doc1 Is Nothing Or doc2 Is Nothing Then
MsgBox "Brak jednego z dokumentów!", vbInformation, "[ ] <- "
Exit Sub
End If
Dim s1 As Shape, s2 As Shape
doc2.BeginCommandGroup "Usun stare"
doc2.Pages(1).CreateLayer "Archiwum"
With doc2.Pages(1).Layers("Archiwum")
.Color = CreateRGBColor(255, 0, 0)
.OverrideColor = True
End With
For Each s1 In doc1.Pages(1).Shapes
For Each s2 In doc2.Pages(1).Shapes
If s1.StaticID = s2.StaticID Then
If removeOld Then
s2.Delete
Else
's2.Name = "Stary"
s2.MoveToLayer doc2.Pages(1).Layers("Archiwum")
End If
End If
Next s2
Next s1
doc2.EndCommandGroup
End Sub
Sub TestujMakro()
'Przed uruchomieniem otwórz pliki:
' 1. Schemacior1.cdr
' 2. Schemacior2.cdr
' 3. Schemacior3.cdr
' Wszystkie muszą być otwarte!!!
SimpleCompareDemoVer "Schemacior2", "Schemacior3"
'wywołanie z kasowaniem tj. stare obiekty zostają usunięte
' SimpleCompareDemoVer "Schemacior1", "Schemacior2", True
'wywołanie bez kasowania tj. wszystkie stare obiekty przenoszone są na warstwę Archiwum
SimpleCompareDemoVer "Schemacior1", "Schemacior2"
End Sub
|
Załączone pliki Schemacior{N}.cdr (gdzie {N} to 1,2,3) są kolejno modyfikowanymi wersjami schematu. Ich częścią wspólną są obiekty o tych samych identyfikatorach i one mają zostać usunięte lub przeniesione na warstwę Archiwum.
Kod jest dość prosty, więc nie ma co wymagać od niego zbyt wiele.
chezare napisał/a: | Od lutego do września sporo czasu minęło, już pewnie kolega ten rebus rozwiązał "ręcznie"? |
No tak... trochę czasu mnie nie było, a szkoda zostawić taki fajny pomysł bez odpowiedzi.
Poza tym google i inne wyszukiwarki podlinkowują takie tematy i kiedy ktoś szuka rozwiązania znajdując treść bez odpowiedzi to taki temat pełni rolę spamu. Sam wielokrotnie szukałem odpowiedzi na forach zagranicznych i często jeśli problem został rozwiązany to do nazwy tematu dopisuje się "Solved" co bardzo pomaga w googlowaniu.
chezare napisał/a: | jaki jest sens porównywać to z czymś nieaktualnym i na podstawie tego nieaktualnego pliku, skasować coś w tym aktualnym |
Też nie wiem. Może chodzi o określenie jakich zmian dokonano podczas kolejnych prac, ale w takim przypadku lepiej było by np. przenieść stare rzeczy do warstwy archiwum, pokolorować je lub cokolwiek, byle nie kasować bo to powoduje, że schemat może stać się bezużyteczny. No ale nie wnikam. Przykładowo można narzucić warstwie kolor czerwony i nowe obiekty (włącznie z symbolami) będą miały czerwone obrysy.
P.S. Narysowany schemat jest bezużyteczny, ale chciałem jakoś zobrazować jak makro działa, więc spłodziłem go na poczekaniu.
Schemaciory.zip
|
Pobierz Plik ściągnięto 348 raz(y) 39.12 KB |
|
|
|
|
|
|
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
|
|
|
|
|
|
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.
| Strona wygenerowana w 0.1 sekundy. Zapytań do SQL: 14 |
|
|