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
Lista współrzędnych
Autor Wiadomość
rademenes 
Początkujący


Wersja CorelDRAW: 12
Wiek: 43
Dołączył: 24 Mar 2012
Posty: 5
Skąd: lubuskie
Wysłany: 26 Marzec 2012, 15:01   Lista współrzędnych

Witam!!

Potrzebuję pomocy w pewnym temacie.

Rysuję np. koło -> zamieniam linie ciągłą na punktową -> rozdzielam punkty na osobne obiekty.

Teraz gwóźdź programu. Jak z powiedzmy 400 szt. punktów zrobić listę współrzędnych każdego z nich (ujemnych i dodatnich).

dokładnie chodzi mi o to żeby wartości można było skopiować do excel'a w formie:

kolumna A: point;0,000 (gdzie 0,000 = wartość y)
kolumna B: 0,000 (gdzie 0,000 = wartość x)
kolumna C: same zera (no problem)

jeden wiersz = jeden obiekt (punkt)

ponadto żeby punkty były podawane w kolejności jeden po drugim

Za wszelką pomoc z góry dziękuję.

przyklad.xls
przykładowa lista - jakby ktoś miał problem z otworzeniem to zmienić rozszerzenie na xlsx
Pobierz Plik ściągnięto 436 raz(y) 10.18 KB

gwiazdka.cdr
plik cdr 12
Pobierz Plik ściągnięto 579 raz(y) 17.52 KB

 
 
chezare 



Pomógł: 402 razy
Dołączył: 24 Gru 2010
Posty: 4551
Skąd: Grodzisk Mazowiecki
Wysłany: 29 Marzec 2012, 01:07   

W najprymitywniejszej postaci to taki kod mógłby wyglądać tak:

Sub Wspolrzedne()
Dim s As Shape
Dim x As Double
Dim y As Double
Dim wsp As String
wsp = ""
For Each s In ActiveDocument.Pages(1).FindShapes(cdrShape)
s.CreateSelection
s.GetPosition x, y
wsp = wsp + Str(x * 25.3995) + Chr(9) + Str(y * 25.3995) + Chr(13)
Next s
ActiveDocument.Pages(1).ActiveLayer.CreateParagraphText 0, 0, 3, 11.693, wsp, Font:="Arial", Size:=4
End Sub

Niestety w takiej postaci wyszukiwane są tylko obiekty na pierwszej stronie i wszystkie jakie się na niej znajdują. Jeśli jest tylko to co ma być zapamiętane to w porządku ale jak tych wynalazków jest więcej, to nic z tego nie wyjdzie bo zapiszą się współrzędne wszystkich obiektów.
Oczywiście można by zawęzić wyszukiwanie np. tylko do zaznaczenia, albo jakiegoś konkretnego koloru. Niewygodny jest też sposób prezentacji wyników, procedura tworzy ramkę tekstu akapitowego i w nią wpisuje współrzędne. Jak jest tych wyników dużo, to nie wszystkie będzie widać, żeby je za jednym zamachem skopiować trzeba będzie rozciągnąć ramkę albo z menu kontekstowego wybrać dopasuj tekst do ramki, co spowoduje takie zmniejszenie rozmiaru fontu żeby tekst się w ramce mieścił. Później to już tylko F8, ctrl+home, ctrl+shift+end i ctrl+C. Do Excela i Ctrl+V :-)
To też można by usprawnić kopiując np. wyniki do schowka, ale ponieważ ja w VBA głupi jestem, to póki co wiem, że da się to zrobić, ale jak jeszcze nie wiem i dlatego użyłem takiej metody.
 
 
rademenes 
Początkujący


Wersja CorelDRAW: 12
Wiek: 43
Dołączył: 24 Mar 2012
Posty: 5
Skąd: lubuskie
Wysłany: 29 Marzec 2012, 14:16   

Dziękuję Chezare :-) Działa wszystko jak należy ;-)
 
 
maroQ 
Doradca


Pomógł: 16 razy
Wiek: 40
Dołączył: 08 Lut 2011
Posty: 117
Skąd: Kalisz
Wysłany: 5 Kwiecień 2012, 15:17   

chezare napisał/a:
W najprymitywniejszej postaci

Kod:
Sub Wspolrzedne()
    Dim s As Shape
    Dim wsp As String
    wsp = "A" & vbTab & "B" & vbTab & "C" & vbNewLine
    ActiveDocument.Unit = cdrMillimeter
    For Each s In ActivePage.FindShapes(, cdrShape)
        wsp = wsp & "point;" & Replace(Math.Round(s.PositionX, 3), ".", ",") & vbTab & Replace(Math.Round(s.PositionY, 3), ".", ",") & vbTab & "0" & vbNewLine
    Next s
    ActiveLayer.CreateParagraphText 0, 0, 30, 116.93, wsp, , , "Arial", 4
End Sub

Może to się komuś przyda: piszemy wewnątrz sub
Kod:
VBA.
i pojawia się lista stałych. Później wystarczy tylko wyłuskać dane dziecko VBA i używać.

Program poprawiłem by był bardziej "po Bożemu" (pewne skróty myślowe przechodzą w VBA ale w innych językach już nie więc "akademicko" tak jest lepiej). Poza tym wszystko OK.

Odnośnie zamiany "+" na "&", to to jest zbędne, ale "&" zawsze można użyć, a plusa nie zawsze.

do wszystkich: Wesołych Świąt Wielkanocnych! + Wesołego jajka :-P
 
 
chezare 



Pomógł: 402 razy
Dołączył: 24 Gru 2010
Posty: 4551
Skąd: Grodzisk Mazowiecki
Wysłany: 5 Kwiecień 2012, 18:58   

Jak do wszystkich to i do mnie :-)
Dziękuję za życzenia i oczywiście również życzę Ci radosnych Świąt Wielkiejnocy.
Przy okazji, jak MaroQ wkleić w VBA tekst do windowsowego schowka? :-)
 
 
maroQ 
Doradca


Pomógł: 16 razy
Wiek: 40
Dołączył: 08 Lut 2011
Posty: 117
Skąd: Kalisz
Wysłany: 5 Kwiecień 2012, 19:10   

chezare napisał/a:
Jak do wszystkich to i do mnie

No tak :-) w końcu do wszystkich.

chezare napisał/a:
wkleić tekst do windowsowego schowka

Właściwie to nigdy tego nie robiłem z VBA, ale jak się okazuje to bardzo proste:
Kod:
Sub Wspolrzedne()
    Dim s As Shape
    Dim dob As New DataObject
    Dim wsp As String
    wsp = "A" & vbTab & "B" & vbTab & "C" & vbNewLine
    ActiveDocument.Unit = cdrMillimeter
    For Each s In ActivePage.FindShapes(, cdrShape)
        wsp = wsp & "point;" & Replace(Math.Round(s.PositionX, 3), ".", ",") & vbTab & Replace(Math.Round(s.PositionY, 3), ".", ",") & vbTab & "0" & vbNewLine
    Next s
    dob.SetText wsp
    dob.PutInClipboard
End Sub
 
 
chezare 



Pomógł: 402 razy
Dołączył: 24 Gru 2010
Posty: 4551
Skąd: Grodzisk Mazowiecki
Wysłany: 6 Kwiecień 2012, 08:52   

Dziękuję Maro :-)
 
 
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.
         
Strona wygenerowana w 0.09 sekundy. Zapytań do SQL: 15