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

Makra - Zapis danych SVG do schowka

zyzio - 22 Październik 2019, 11:38
Temat postu: Zapis danych SVG do schowka
Cześć. Koledzy istnieje techniczna możliwość, aby zapisać dane o krzywych jako svg w formie tekstowej prosto do schowka?
Pytam ponieważ bardzo często eksportuję krzywe svg, które następnie są importowane i używane blenderze, natomiast ten ciągły eksport i import jest nieco uciążliwy i czasochłonny, a jego zautomatyzowanie poprzez schowek byłoby bardzo dużym ułatwieniem, bo myślę, że po stronie blendera też powinno się dać skorzystać z danych w schowku i przekształcić je w ścieżki przy pomocy pythona.

Jak zwykle z góry dziękuję

tomek123 - 6 Grudzień 2019, 17:39

Utwórz moduł w VBA, wklej tam poniższy kod i z Managera makr odpal SVGtoClipboard
Umieszcza w schowku tag svg zaznaczonego wektora, wymaga stworzenia katalogu C:/TEMP dla pliku tymczasowego
Kod:
Option Explicit
Declare Function GlobalUnlock Lib "kernel32" (ByVal hMem As Long) As Long
Declare Function GlobalLock Lib "kernel32" (ByVal hMem As Long) As Long
Declare Function GlobalAlloc Lib "kernel32" (ByVal wFlags As Long, ByVal dwBytes As Long) As Long
Declare Function CloseClipboard Lib "user32" () As Long
Declare Function OpenClipboard Lib "user32" (ByVal hwnd As Long) As Long
Declare Function EmptyClipboard Lib "user32" () As Long
Declare Function lstrcpy Lib "kernel32" (ByVal lpString1 As Any, ByVal lpString2 As Any) As Long
Declare Function SetClipboardData Lib "user32" (ByVal wFormat As Long, ByVal hMem As Long) As Long
Public Const GHND = &H42
Public Const CF_TEXT = 1
Public Const MAXSIZE = 4096
Private Function ctrlX(str$)
    Dim hGlobalMemory&, lpGlobalMemory&, hClipMemory&, x&
    hGlobalMemory = GlobalAlloc(GHND, Len(str) + 1)
    lpGlobalMemory = GlobalLock(hGlobalMemory)
    lpGlobalMemory = lstrcpy(lpGlobalMemory, str)
    If GlobalUnlock(hGlobalMemory) <> 0 Then GoTo OutOfHere2
    If OpenClipboard(0&) = 0 Then Exit Function
    x = EmptyClipboard()
    hClipMemory = SetClipboardData(CF_TEXT, hGlobalMemory)
OutOfHere2:
    If CloseClipboard() = 0 Then MsgBox "Could not close Clipboard."
End Function
Sub SVGtoClipboard()
    If ActiveSelection.Shapes.count = 0 Then
        MsgBox "Zaznacz obiekt..."
        Exit Sub
    End If
    Dim expflt As ExportFilter, expopt As StructExportOptions, _
        path$, svg$, iFile%, poz&
    path = "C:\TEMP\file.svg"
    Set expopt = New StructExportOptions
    expopt.UseColorProfile = False
    Set expflt = ActiveDocument.ExportEx(path, cdrSVG, cdrSelection, expopt)
    expflt.Finish: iFile = FreeFile
    Open path For Input As #iFile
    svg = Input(LOF(iFile), iFile)
    Close #iFile: Kill path
    poz = InStr(1, svg, "<svg", vbTextCompare)
    svg = Mid(svg, poz, Len(svg) - poz)
    ctrlX svg
End Sub


Powered by phpBB modified by Przemo © 2003 phpBB Group