找回密码 注册 QQ登录
一站式解决方案

iCAx开思网

CAD/CAM/CAE/设计/模具 高清视频【积分说明】如何快速获得积分?快速3D打印 手板模型CNC加工服务在线3D打印服务,上传模型,自动报价
打印 上一主题 下一主题

[原创] Solidworks拼图打印程序(源码公布)

[复制链接]
11
发表于 2014-2-13 19:19:03 | 只看该作者
  1. Imports System.Drawing
  2. Imports System.Drawing.Graphics

  3. Module PictureRelated
  4.     Sub joinPicture()
  5.         '每一张大图
  6.         Dim mm As Integer = 1
  7.         For Each ds As ptPaper In FinalPapers
  8.             '图片大小
  9.             newBMape = New Bitmap(CInt(841 * intDPI / 25.4), CInt(594 * intDPI / 25.4))

  10.             '设置分辨率
  11.             newBMape.SetResolution(intDPI, intDPI)
  12.             g1 = Graphics.FromImage(newBMape)
  13.             g1.Clear(Color.White)
  14.             For Each sdraw As SwDraw In ds.inNerPapers
  15.                 myImage = Image.FromFile(sdraw.drawDir)
  16.                
  17.                 If sdraw.PaperSize = "A2" Then
  18.                     myImage.RotateFlip(RotateFlipType.Rotate90FlipNone)
  19.                     '如果是A2,则宽高翻转,同时将图像进行90度翻转
  20.                     theHeight = CInt(sdraw.drawWidth * intDPI / 25.4)
  21.                     theWidth = CInt(sdraw.drawHeight * intDPI / 25.4)
  22.                   
  23.                 Else
  24.                     theHeight = CInt(sdraw.drawHeight * intDPI / 25.4)
  25.                     theWidth = CInt(sdraw.drawWidth * intDPI / 25.4)
  26.                   
  27.                 End If


  28.                 If sdraw.PaperSize = "A4" Then
  29.                     theX = CInt(sdraw.insertPosX * intDPI * 210 / 25.4)
  30.                     theY = CInt(sdraw.insertPosY * intDPI * 297 / 25.4)
  31.                 End If
  32.                 If sdraw.PaperSize = "A3" Then

  33.                     theX = CInt(sdraw.insertPosX * intDPI * 210 / 25.4)
  34.                     theY = CInt(sdraw.insertPosY * intDPI * 297 / 25.4)

  35.                 End If
  36.                 If sdraw.PaperSize = "A2" Then
  37.                     theX = CInt(sdraw.insertPosX * intDPI * 210 / 25.4)
  38.                     theY = CInt(sdraw.insertPosY * intDPI * 297 / 25.4)
  39.                 End If
  40.                
  41.                 g1.DrawImage(myImage, theX, theY)
  42.                 myImage.Dispose()
  43.             Next
  44.             If Form1.CBoxPaperSize.SelectedIndex = 1 Then
  45.                 newBMape.RotateFlip(RotateFlipType.Rotate90FlipNone)
  46.             End If
  47.             If Form1.CBoxPrint.Checked = True Then
  48.                 printThepaper()
  49.             End If
  50.             If Form1.CBoxPicSave.Checked = True Then
  51.                 newBMape.Save(Application.StartupPath + "\outputimage\xx" + mm.ToString + ".jpg", System.Drawing.Imaging.ImageFormat.Jpeg)
  52.             End If
  53.             mm += 1
  54.             g1.Dispose()
  55.             newBMape.Dispose()
  56.         Next
  57.         

  58.     End Sub



  59. End Module
复制代码
12
发表于 2014-2-13 19:19:46 | 只看该作者
  1. Imports System.IO
  2. Imports System.Drawing.Printing

  3. Module printRelated
  4.     Sub printThepaper()
  5.         If Form1.CBoxPaperSize.SelectedIndex = 0 Then
  6.             PgSize = New PaperSize("myA1", 3311, 2339)
  7.            
  8.         Else
  9.             PgSize = New PaperSize("myA2", 2339, 3311)
  10.          
  11.         End If

  12.         PTResolution = New PrinterResolution
  13.         If Form1.RadioButtonHigh.Checked Then
  14.             PTResolution.Kind = PrinterResolutionKind.High
  15.         End If
  16.         If Form1.RadioButtonFollowDpi.Checked Then
  17.             PTResolution.Kind = PrinterResolutionKind.Custom
  18.             PTResolution.X = intDPI
  19.             PTResolution.Y = intDPI
  20.         End If


  21.         PT1.DefaultPageSettings.PaperSize = PgSize

  22.         PT1.DefaultPageSettings.PrinterResolution = PTResolution

  23.         PT1.Print()

  24.     End Sub


  25. End Module
复制代码
13
发表于 2014-2-13 19:20:26 | 只看该作者
  1. Public Class ptPaper
  2.    
  3.     '每个图纸里的小图纸
  4.     Public inNerPapers As swDrawsAll


  5. End Class
复制代码
14
发表于 2014-2-13 19:20:52 | 只看该作者
  1. Public Class ptPaperAll
  2.     Inherits CollectionBase

  3.     Public Sub Add(ByVal newPaper As ptPaper)
  4.         Me.List.Add(newPaper)
  5.     End Sub

  6.     Public Sub Remove(ByVal oldPaper As ptPaper)
  7.         Me.List.Remove(oldPaper)
  8.     End Sub

  9.     Default Public Property Item(ByVal index As Integer) As ptPaper
  10.         Get
  11.             Return CType(Me.List(index), ptPaper)
  12.         End Get
  13.         Set(value As ptPaper)
  14.             Me.List.Item(index) = value
  15.         End Set
  16.     End Property
  17. End Class
复制代码
15
发表于 2014-2-13 19:21:14 | 只看该作者
  1. Public Class SwDraw

  2.     Public drawDir As String   'directory of a drawing
  3.     Public drawSheetName As String   'sheet of a drawing  工程图文件中的图纸1,图纸2,等等


  4.     Public drawHeight As Single     '图纸的大小
  5.     Public drawWidth As Single

  6.     Public PaperSize As String

  7.     Public mysheet As SldWorks.Sheet
  8.     Public sheetCount As Integer
  9.     Public paperNumber As Integer      '位于第几张图纸
  10.     Public insertPosX As Integer        '在图纸中插入时的位置编号
  11.     Public insertPosY As Integer        '在图纸中插入时的位置编号



  12. End Class
复制代码
16
发表于 2014-2-13 19:21:42 | 只看该作者
  1. Public Class swDrawsAll
  2.     Inherits CollectionBase
  3.     Public Sub Add(ByVal newDraw As SwDraw)
  4.         Me.List.Add(newDraw)
  5.     End Sub

  6.     Public Sub Remove(ByVal oldDraw As SwDraw)
  7.         Me.List.Remove(oldDraw)
  8.     End Sub

  9.     Default Public Property Item(ByVal index As Integer) As SwDraw
  10.         Get
  11.             Return CType(Me.List(index), SwDraw)
  12.         End Get
  13.         Set(value As SwDraw)
  14.             Me.List.Item(index) = value
  15.         End Set

  16.     End Property


  17. End Class
复制代码
17
发表于 2014-2-13 19:22:09 | 只看该作者
  1. Imports SwConst
  2. Imports System.Drawing.Printing
  3. Imports SldWorks
  4. Imports System.IO


  5. Module swRelated
  6.     Public Sub loadsw()

  7.         ReDim SwFinalFiles(Form1.ListBox1.Items.Count - 1)
  8.         '将列表装入数组
  9.         For ix As Integer = 0 To SwFinalFiles.GetUpperBound(0)
  10.             SwFinalFiles(ix) = Form1.ListBox1.Items(ix)

  11.         Next
  12.         If SwFinalFiles.Length <> 0 Then

  13.             Form1.PSbar1.Maximum = SwFinalFiles.GetUpperBound(0)
  14.             Form1.PSbar1.Minimum = 0
  15.             swApp = New SldWorks.SldWorks
  16.             If Form1.CboxShowSW.Checked = True Then
  17.                 swApp.Visible = True
  18.             Else : swApp.Visible = False
  19.             End If
  20.             MsgBox("即将开始,建议关闭所有程序以保证足够内存")
  21.             Dim i As Integer
  22.             For i = 0 To SwFinalFiles.GetUpperBound(0)
  23.                 Try
  24.                     Form1.PSbar1.Value = i
  25.                     swMod = swApp.OpenDoc(SwFinalFiles(i), 3)
  26.                     swDoc = swMod
  27.                     '图片颜色变成黑白
  28.                     boolstatus = swApp.SetUserPreferenceIntegerValue(swUserPreferenceIntegerValue_e.swTiffImageType, swTiffImageType_e.swTiffImageBlackAndWhite)
  29.                     '图片分辨率设为选定值
  30.                     boolstatus = swApp.SetUserPreferenceIntegerValue(swUserPreferenceIntegerValue_e.swTiffPrintDPI, intDPI)
  31.                     '图片存放的目录全名

  32.                     intSheetCount = swDoc.GetSheetCount   '文件中图纸数量
  33.                     mysheet = swDoc.GetSheetNames     '图纸名称列表      
  34.                     For j As Integer = 0 To intSheetCount - 1
  35.                         '获取图纸的大小尺寸
  36.                         tmpInt = swDoc.Sheet(mysheet(j).ToString).GetSize(stWidth, stHeight)
  37.                         stWidth = stWidth * 1000
  38.                         stHeight = stHeight * 1000
  39.                         If stHeight = 594 Or stHeight = 841 Then
  40.                             Form1.ListLargePapers.Items.Add(SwFinalFiles(i))
  41.                             Exit For
  42.                         End If
  43.                         If stHeight = 210 Or stHeight = 297 Then
  44.                             '选择了直接出图,并且选择的是A4和A3的图纸,
  45.                             If Form1.CBoxEnable.Checked = True Then

  46.                                 '选择打印机
  47.                                 swMod.Printer = Form1.cbxPtA4.SelectedItem
  48.                                 '设置页面参数
  49.                                 Dim a As PageSetup
  50.                                 a = swMod.PageSetup
  51.                                 a.HighQuality = True
  52.                                 a.ScaleToFit = True

  53.                                 Dim tt As Boolean
  54.                                 a.DrawingColor = swPageSetupDrawingColor_e.swPageSetup_BlackAndWhite
  55.                                 a.PrinterPaperSize = PaperKind.A4
  56.                                 tt = a.UsePageSetupOnSheets()

  57.                                 If stWidth = 297 Or stWidth = 210 Then  'A4图纸
  58.                                     swMod.PrintDirect()
  59.                                 End If
  60.                                 If stWidth = 420 Then  'A3图纸
  61.                                     swMod.PrintOut(j + 1, j + 1, 1, False, swMod.Printer, 0.67, False)
  62.                                 End If

  63.                             Else




  64.                                 '将图纸录入集合
  65.                                 swSingleDraw = New SwDraw
  66.                                 tmpSavefile = Application.StartupPath & "\OutputImage" & i.ToString & _
  67.                              mysheet(j).ToString & ".tif"
  68.                                 swMod.SaveAs(tmpSavefile)   '保存成jpg文件
  69.                                 With swSingleDraw
  70.                                     .drawDir = tmpSavefile
  71.                                     .drawHeight = stHeight
  72.                                     .drawWidth = stWidth
  73.                                 End With
  74.                                 If stWidth = 210 Then
  75.                                     swSingleDraw.PaperSize = "A4"

  76.                                 End If
  77.                                 If stWidth = 420 Then
  78.                                     swSingleDraw.PaperSize = "A3"

  79.                                 End If



  80.                             End If
  81.                         End If
  82.                         '如果是A2的尺寸,处理同上。
  83.                         If stHeight = 420 Then
  84.                             '将图纸录入集合

  85.                             swSingleDraw = New SwDraw
  86.                             tmpSavefile = Application.StartupPath & "\OutputImage" & i.ToString & _
  87.                         mysheet(j).ToString & ".tif"
  88.                             swMod.SaveAs(tmpSavefile)   '保存成TIF文件
  89.                             With swSingleDraw
  90.                                 .drawDir = tmpSavefile
  91.                                 .drawHeight = stHeight
  92.                                 .drawWidth = stWidth
  93.                             End With

  94.                             If stWidth = 594 Then
  95.                                 swSingleDraw.PaperSize = "A2"

  96.                             End If


  97.                         End If

  98.                         '录入完毕,图纸尺寸全部放入到了对象swSingleDraw中

  99.                         swDrawCollecton.Add(swSingleDraw)


  100.                         swDoc.SheetNext()
  101.                     Next
  102.                     swApp.CloseDoc(SwFinalFiles(i))
  103.                     swDoc = Nothing
  104.                     swMod = Nothing

  105.                 Catch ex As Exception
  106.                 End Try
  107.             Next
  108.             
  109.             getA2s()
  110.             fillPaper()
  111.             joinPicture()
  112.             MsgBox("successed!")

  113.         Else : MsgBox("list not exist")
  114.         End If




  115.     End Sub





  116. End Module
复制代码
18
发表于 2014-2-13 19:34:27 | 只看该作者
各个控件的名称。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

评分

参与人数 1技术 +3 贡献 +10 收起 理由
Francis + 3 + 10 感激不盡!

查看全部评分

19
发表于 2014-2-13 20:47:46 | 只看该作者
最好版主研究下能解决A3 A4自动识别图幅自动打印成需要的图幅的问题那就完美了
20
发表于 2015-3-27 20:55:55 | 只看该作者
请问楼主,您发的附件是已经进行了更新的吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3D打印手板模型快速制作服务,在线报价下单!

QQ 咨询|手机版|联系我们|iCAx开思网  

GMT+8, 2025-1-9 23:41 , Processed in 0.038214 second(s), 12 queries , Gzip On, Redis On.

Powered by Discuz! X3.3

© 2002-2025 www.iCAx.org

快速回复 返回顶部 返回列表