Перейти к публикации

Не всегда работает превью с помощью SW_ExtractBitmap.dll


brigval

Рекомендованные сообщения

В примере с SW_ExtractBitmap.dll превьюшки хорошо просматриваются.

У себя в коде нет. В чем может быть причина?

DLL регистрируется программно.

Вот код, который должен отображать превьюшки.

ffn - Full File Name

Private Sub ShowThumbnail(ByRef oPic As PictureBox, ByVal ffn As String)

						  

   Dim extractBmpObject As New SW_EXTRACTBITMAPLib.SolidWorks_ExtractBitmap

   Dim oThumbnail	   As stdole.IPictureDisp

   '

   oPic.ToolTipText = NS

   If Len(ffn) > 0 Then

	  extractBmpObject.ExtractBitmapByNameToIPicture ffn, "Preview", oPic.Width, oPic.Height, oThumbnail

	  oPic.Picture = oThumbnail

	  If Not oThumbnail Is Nothing Then oPic.ToolTipText = ffn

   End If

   '

End Sub
Ссылка на сообщение
Поделиться на других сайтах


В примере с SW_ExtractBitmap.dll превьюшки хорошо просматриваются.

У себя в коде нет. В чем может быть причина?

В одном и том же файле не просматривает? Если в файле нет этого Preview, то ни чего и не показывается.

Возможно в этих примерах, чего-нибудь приметное найдётся:

API Example

Extract preview bitmaps

SW_ExtractBitmap.zip

Display preview bitmaps

SldWorks_GetPreviewBitmap.zip

Retrieve SolidWorks preview bitmap and display lists (2007)

DisplayList2007.zip

Retrieve SolidWorks preview bitmap and display lists (2008)

http://slil.ru/27900157

Файл будет удален через 1 месяц после последнего скачивания.

Retrieve SolidWorks preview bitmap and display lists (2009)

http://slil.ru/27900159

Файл будет удален через 1 месяц после последнего скачивания.

Ссылка на сообщение
Поделиться на других сайтах

Спасибо, Kelny.

На C не программирую.

Пример из Possum работает, а в своем проекте, чего только не делал, не показывает. Точнее, показывает либо серое окно, а через некоторое время - только черное для каждого файла.

Файлы SW одни и те же. Вроде и свойства формы одинаковые. Пробовал и Image и PictureBox. Не идет.

Где можно поискать причину?

Ссылка на сообщение
Поделиться на других сайтах

Файлы SW одни и те же. Вроде и свойства формы одинаковые. Пробовал и Image и PictureBox. Не идет.

Где можно поискать причину?

Попробовал с Image - работает.

Думаю для начала выяснить, что возвращает:

dim retval as long

retval=extractBmpObject.ExtractBitmapByNameToIPicture (ffn, "Preview", oPic.Width, oPic.Height, oThumbnail)

Можно будет попробовать разобраться в причинах, если retval будет отличным от 0, возможно, какие-параметры вводятся не правильно.

Или пример с файлом модели и простой проект с формой, на которых происходит сия неприятность.

Можно, конечно, задействовать для просмотра CAD-файлов, например, eDrawings, но, думаю, это не то, что вам нужно, т.к. это потребует загрузки модели в этот самый eDrawings, а это время.

Ссылка на сообщение
Поделиться на других сайтах

brigval

А картинки то вы вытаскиваете при загруженном SW или нет? Если при загруженном, то в API SW есть функция для этого случая: status = SldWorks->GetPreviewBitmap ( filePathName, configName, &previewBitmap )

Ссылка на сообщение
Поделиться на других сайтах

brigval

А картинки то вы вытаскиваете при загруженном SW или нет? Если при загруженном, то в API SW есть функция для этого случая: status = SldWorks->GetPreviewBitmap ( filePathName, configName, &previewBitmap )

Это был бы вариант, но просмотр картинки этим способом не получился. Прочитав, уже в котрорый раз, хелп, обратил внимание на то, что этот код работает только в макросе или в надстройке, но не во внешнем приложении. Если я правильно перевел.

post-5316-1250321548_thumb.png

Вот скриншоты, показывающие работу в примере из SW_ExtractBitmap.zip и не работу в моем проекте.

post-5316-1250321669_thumb.png

Оба проекта ссылаются на один и тот же файл SW_ExtractBitmap.dll

post-5316-1250321680_thumb.png

В коде тоже, вроде, все нормально

post-5316-1250322822_thumb.png

В примере из SW_ExtractBitmap.zip каритинки показываются и в Image и в PictureBox, в моем проете не показываются ни там, ни там. :sad:

Просто чудеса :)

Может в размерах контролов (ScaleMode) причина? Поэкперементировал как мог, результатов не получил.

Ссылка на сообщение
Поделиться на других сайтах

В примере с SW_ExtractBitmap.dll превьюшки хорошо просматриваются.

У себя в коде нет. В чем может быть причина?

DLL регистрируется программно.

...

А откуда такой пример?

SW_ExtractBitmap.dll - эта `dll` откуда? Создается в VB? Насколько я знаю, "нормальную" `dll`в VB не содать.

Как именно "DLL регистрируется программно" ? И какая `dll` - эта "SW_ExtractBitmap.dll"?

Как должен работать данный пример: как Add-ins ?

Какие файлы содержаться в данном проекте? (список).

Я правильно понял: Вы взяли пример с исходным кодом, открыли его в VB(каком ?) и при запуске он не работает ?

Ссылка на сообщение
Поделиться на других сайтах

А откуда такой пример?

SW_ExtractBitmap.dll - эта `dll` откуда? Создается в VB? Насколько я знаю, "нормальную" `dll`в VB не содать.

Как именно "DLL регистрируется программно" ? И какая `dll` - эта "SW_ExtractBitmap.dll"?

Как должен работать данный пример: как Add-ins ?

Какие файлы содержаться в данном проекте? (список).

Я правильно понял: Вы взяли пример с исходным кодом, открыли его в VB(каком ?) и при запуске он не работает ?

Отвечу за топикстартера.

Эта dll с оффсайта SW. Открытый код на C++. Регистрация обычная через regsvr32. Подключение через Reference. Должна работать.

Ссылка на сообщение
Поделиться на других сайтах

Эта dll с оффсайта SW. Открытый код на C++. Регистрация обычная через regsvr32. Подключение через Reference. Должна работать.

Все так и есть.
Ссылка на сообщение
Поделиться на других сайтах

Автор написал:

...

На C не программирую.

...

Откуда этот код, приведенный автором:

"

Private Sub ShowThumbnail(ByRef oPic As PictureBox, ByVal ffn As String)

Dim extractBmpObject As New SW_EXTRACTBITMAPLib.SolidWorks_ExtractBitmap

Dim oThumbnail As stdole.IPictureDisp

'

oPic.ToolTipText = NS

If Len(ffn) > 0 Then

extractBmpObject.ExtractBitmapByNameToIPicture ffn, "Preview", oPic.Width, oPic.Height, oThumbnail

oPic.Picture = oThumbnail

If Not oThumbnail Is Nothing Then oPic.ToolTipText = ffn

End If

'

End Sub"

Это же VB.

Но у себя ничего подобного я не нашел.

И по скриншотам автора ничего у меня не сходится...

Может не тот пример у меня?

Еще раз:

Как именно "DLL регистрируется программно" ? - Есть другие способы? И какая `dll` - эта: "SW_ExtractBitmap.dll" ?

Я нашел только эту `C`:

...\Possum\SldWorks_ExtractBitmap\SldWorks_ExtractBitmap.dll

Вообще, каким образом изменения в коде VB могут повлиять на `dll` ?

"SW_ExtractBitmap.dll" как я понимаю создана на `C` ?

Или я что-то путаю? :-(

Ссылка на сообщение
Поделиться на других сайтах

Но у себя ничего подобного я не нашел.

И по скриншотам автора ничего у меня не сходится...

Может не тот пример у меня?

Или я что-то путаю? :-(

ssv22 Привет!

Да ты маленько путаешь. У тебя SldWorks_ExtractBitmap.dll. Это старинная dll-ка, года этак 1998. У автора новее SW_ExtractBitmap.dll, 2002г. Там код у них (С++) немного разный.

По сабжу.

К сожалению, у меня не стоит VB6. Проверить не могу. Но в VBA, что идет с SW, все работает. Вот модифицированный код из макроса SldWorks_GetPreviewBitmap.swp, что лежит на оффсайте

Option Explicit



Private Sub cmdBrowse_Click()

	' need to add "Microsoft Common Dialog Control 6.0"

	Dim dlgFileOpen				 As MSComDlg.CommonDialog

	

	Dim swApp					   As SldWorks.SldWorks

	Dim vConfName				   As Variant

	Dim i						   As Long

	

	Set dlgFileOpen = New MSComDlg.CommonDialog

	

	dlgFileOpen.Filter = "Part (*.sldprt)|*.sldprt|Assembly (*.sldasm)|*.sldasm|Drawing (*.slddrw)|*.slddrw|SolidWorks Files (*.sldprt, *.sldasm, *.slddrw)|*.sld*"

	dlgFileOpen.ShowOpen

	

	' user cancelled

	If "" = dlgFileOpen.FileName Then Exit Sub

	

	txtFileName.Text = dlgFileOpen.FileName

	

	Dim extractMBP As New SW_EXTRACTBITMAPLib.SolidWorks_ExtractBitmap

	Dim pictureDisp As stdole.IPictureDisp

	Dim picture  As stdole.StdPicture

	Dim lres As Long

	lres = extractMBP.ExtractBitmapByNameToIPicture(txtFileName.Text, "Preview", imgPreview.Width, imgPreview.Height, pictureDisp)

	imgPreview.picture = pictureDisp

	

End Sub
Картинку показывает, правда искаженную, надо принимать дополнительные меры.

А вот bmp-шку, которая показывается в диалоговом окне Open SW или в проводнике, можно вытаскивать, без запущенного SW да с запущенным тоже , функцией status = SwDMDocument10->GetPreviewBitmap ( result, &pBitmap) из библиотеки SwDocumentMgr.dll. Правда на нее требуется лицензия, к сожалению.

Ссылка на сообщение
Поделиться на других сайтах

ssv22 Привет!

Да ты маленько путаешь. У тебя SldWorks_ExtractBitmap.dll. Это старинная dll-ка, года этак 1998. У автора новее SW_ExtractBitmap.dll, 2002г.

Там код у них (С++) немного разный.

...

Ага, что ж, бум разбираться...

PS. хотя я бы не сказал, что у меня старенькая:

"...\Possum\SldWorks_ExtractBitmap\SldWorks_ExtractBitmap.dll 489 984 14.01.02 20:17"

вот сегодня скачал:

"http://swtools.cad.de/cgi-bin/topdl/download.pl?file=sldworks_extractbitmap.zip"

Да и раньше я что-то такое скачивал, надо поискать.

А то у меня в связи с "переездами" с одного HDD на другой, некоторые файлы стали проявлять тенденцию к "размножению", так что бывает за всеми не уследишь :-)

Ссылка на сообщение
Поделиться на других сайтах

PS. хотя я бы не сказал, что у меня старенькая:

"...\Possum\SldWorks_ExtractBitmap\SldWorks_ExtractBitmap.dll 489 984 14.01.02 20:17"

вот сегодня скачал:

"http://swtools.cad.de/cgi-bin/topdl/download.pl?file=sldworks_extractbitmap.zip"

Да и раньше я что-то такое скачивал, надо поискать.

А то у меня в связи с "переездами" с одного HDD на другой, некоторые файлы стали проявлять тенденцию к "размножению", так что бывает за всеми не уследишь :-)

Может я и не прав, насчет "старенькой"
Ссылка на сообщение
Поделиться на других сайтах

У меня два файла SW_ExtractBitmap.dll

Один - размер 45 056, дата 17.07.2002 скачен по ссылке Kelny

Второй - размер 13 824, дата 06.09.2007

скачен отсюда http://wincmd.ru/plugring/solidworkswlx.html (wlx_solidworks_1.1.4.1.zip)

Внутренняя версия обоих - 1.0.0.1

Ни с тем, ни с тем проблемка превью не решатеся. Может, конечно, дело и не в этих файлах.

В общем, пока нет никих зацепок.

SldWorks_ExtractBitmap.dll, судя по описанию в Object Browser, только создает файл с картинкой.

Ссылка на сообщение
Поделиться на других сайтах

У меня два файла SW_ExtractBitmap.dll

...

Вот попробуй мою модификацию:

1) некоторые клавиши скрыл

2) добавлена возможность просмотра и извлечение BMP из файлов SW с расширением:

*.sldlfp;*.slddrt;*.asmdot*.prtdot;*.drwdot;*.sldblk;*.sldsym.

3) серый фон при просмотре файла означает отсутствие "Предварительного просмотра" в файле SW - файл был создан косвенным путем.

4) черный фон - у меня получился только 1 раз и я не понял с чем это связано.

5) требуется еще некоторая доработка для новых добавленных расширений...

наверное здесь:

"

If (fileExtension = "SLDPRT") Or (fileExtension = "SLDASM") Or (fileExtension = "SLDDRW") Then <<< сюда добавить нов. расширения, не пробовал еще...

newFilename = Left(newFilename, Len(newFilename) - 7)

End If

"

6) где я исправил код см. коммент: '' ```by ssv22 "

Ссылка на сообщение
Поделиться на других сайтах

Вот попробуй мою модификацию:

Дело в том, что примеры работают. И Ваш тоже. Не показываются превью в созданном мною проекте. В общем-то, об этом я и написал. И привел скриншоты.
Ссылка на сообщение
Поделиться на других сайтах

Дело в том, что примеры работают. И Ваш тоже. Не показываются превью в созданном мною проекте. В общем-то, об этом я и написал. И привел скриншоты.

Так откуда взялся этот проект???

собственное творение, с нуля ?

Ссылка на сообщение
Поделиться на других сайтах

Так откуда взялся этот проект???

собственное творение, с нуля ?

Хотелось бы услышать возможные пути решения проблемы, описанной в старовом и последующих топиках. Если, конечно, это реально.
Ссылка на сообщение
Поделиться на других сайтах

Хотелось бы услышать возможные пути решения проблемы, описанной в старовом и последующих топиках. Если, конечно, это реально.

А ffn показывает правильный путь? Нигде случайно не режется? По коду так должен показывать картинку...
Ссылка на сообщение
Поделиться на других сайтах

А ffn показывает правильный путь? Нигде случайно не режется? По коду так должен показывать картинку...

Да, реальный. И функция возвращает 0 и oThumbnail не пуст.

Может, что-то в редакторе VB? В нем что-то может быть причиной?

Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.
Примечание: вашему сообщению потребуется утверждение модератора, прежде чем оно станет доступным.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.




×
×
  • Создать...