|
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
|
|
|