├── .gitignore ├── AUTHORS ├── ActiveStereo.cbp ├── ActiveStereo.depend ├── ActiveStereo.layout ├── ActiveStereoApp.cpp ├── ActiveStereoApp.h ├── ActiveStereoMain.cpp ├── ActiveStereoMain.h ├── CAD ├── Design Data │ ├── AEC Exchange │ │ └── Support │ │ │ ├── AuthoringTemplates │ │ │ ├── Air Terminal.xml │ │ │ ├── Casework.xml │ │ │ ├── Categories.xml │ │ │ ├── Communication Devices.xml │ │ │ ├── Data Devices.xml │ │ │ ├── Doors.xml │ │ │ ├── Duct Accessories.xml │ │ │ ├── Electrical Equipment.xml │ │ │ ├── Electrical Fixtures.xml │ │ │ ├── Fire Alarm Devices.xml │ │ │ ├── Furniture Systems.xml │ │ │ ├── Furniture.xml │ │ │ ├── Generic Models.xml │ │ │ ├── Lighting Fixtures.xml │ │ │ ├── Mechanical Equipment.xml │ │ │ ├── Pipe Accessories.xml │ │ │ ├── Plumbing Fixtures.xml │ │ │ ├── Security Devices.xml │ │ │ ├── Specialty Equipment.xml │ │ │ ├── Telephone Devices.xml │ │ │ └── Windows.xml │ │ │ ├── CableTrayConnector.xml │ │ │ ├── ConduitConnector.xml │ │ │ ├── DWGSettings.ini │ │ │ ├── DuctConnector.xml │ │ │ ├── ElectricalConnector.xml │ │ │ ├── PartAtom.xml │ │ │ ├── PipeConnector.xml │ │ │ ├── TranslationReport.xsl │ │ │ └── assets.zip │ ├── Balloon.xml │ ├── CenterMark.xml │ ├── Clearance.xls │ ├── Colors.xml │ ├── DWG-DXF │ │ ├── FaceLoops.xml │ │ ├── FlatPattern.xml │ │ ├── FlatPatternExportOpts.xml │ │ ├── exportdwg.ini │ │ ├── exportdxf.ini │ │ ├── importacad.ini │ │ ├── importdxf.ini │ │ └── importmdt.ini │ ├── DatumTarget.xml │ ├── Dimension.xml │ ├── FeatureControlFrame.xml │ ├── GOST │ │ ├── Defaults.ini │ │ ├── MaterialsFavorites.xml │ │ ├── PartsListGroup1.xls │ │ ├── PartsListGroup1b.xls │ │ ├── PartsListTemplate.xls │ │ ├── WeldFavorites.ini │ │ └── technical requirements │ │ │ ├── Assembly drawings.tr │ │ │ ├── Cold punching parts.tr │ │ │ ├── Electrical cases.tr │ │ │ ├── Forged parts.tr │ │ │ ├── Mechanical parts.tr │ │ │ ├── Mold parts.tr │ │ │ ├── Pipes.tr │ │ │ ├── Steel mold parts.tr │ │ │ ├── Surface coatings.tr │ │ │ └── Weld assemblies.tr │ ├── Hatch.xml │ ├── HoleTable.xml │ ├── Id.xml │ ├── Layers.xml │ ├── Leader.xml │ ├── Lighting.xml │ ├── Materials.xml │ ├── ObjectDefaults.xml │ ├── PartsList.xml │ ├── ProteinMapping.xml │ ├── RevisionTable.xml │ ├── SheetMetalRules.xml │ ├── SheetMetalUnfold.xml │ ├── Simulation │ │ └── Report │ │ │ ├── Autodesk_Logo_Black.png │ │ │ ├── Configuration.htm │ │ │ ├── Constraint.htm │ │ │ ├── Contact.htm │ │ │ ├── Figure.htm │ │ │ ├── Load.htm │ │ │ ├── Main.htm │ │ │ ├── Material.htm │ │ │ ├── ReactionForces.htm │ │ │ ├── Simulation.htm │ │ │ ├── minus.png │ │ │ └── plus.png │ ├── Standard.xml │ ├── StudioLighting.xml │ ├── StudioScene.xml │ ├── SurfaceTexture.xml │ ├── Table.xml │ ├── Text.xml │ ├── Thread.xls │ ├── ViewAnnotation.xml │ ├── Weld.xml │ └── WeldBead.xml ├── LaserCameraConnector.ipt ├── LaserMountBase.ipt ├── LaserMountBase2.ipt ├── LaserMountPole2.ipt ├── LaserMountTop.ipt ├── OldVersions │ ├── makerscannerAssembly.ipj.bak │ └── makerscannerAssembly.ipj.old.bak ├── PS3_eye_holder_from_base.ipt ├── Solidworks 2013 │ ├── lasercameraconnector.SLDPRT │ ├── lasermountbase.SLDPRT │ ├── lasermountbase2.SLDPRT │ ├── lasermountpole2.SLDPRT │ ├── lasermounttop.SLDPRT │ ├── ps3_eye.SLDPRT │ └── ps3_eye_holder_from_base.SLDPRT ├── Templates │ ├── English │ │ ├── ANSI (in).dwg │ │ ├── ANSI (in).idw │ │ ├── Sheet Metal (in).ipt │ │ ├── Standard (in).iam │ │ ├── Standard (in).ipn │ │ ├── Standard (in).ipt │ │ ├── Weldment (ANSI).iam │ │ └── am_ansi.dwg │ ├── Metric │ │ ├── ANSI (mm).dwg │ │ ├── ANSI (mm).idw │ │ ├── BSI.dwg │ │ ├── BSI.idw │ │ ├── DIN.dwg │ │ ├── DIN.idw │ │ ├── GB.dwg │ │ ├── GB.idw │ │ ├── GOST.dwg │ │ ├── GOST.idw │ │ ├── ISO.dwg │ │ ├── ISO.idw │ │ ├── JIS.dwg │ │ ├── JIS.idw │ │ ├── Sheet Metal (DIN).ipt │ │ ├── Sheet Metal (mm).ipt │ │ ├── Standard (DIN).iam │ │ ├── Standard (DIN).ipn │ │ ├── Standard (DIN).ipt │ │ ├── Standard (mm).iam │ │ ├── Standard (mm).ipn │ │ ├── Standard (mm).ipt │ │ ├── Weldment (ANSI - mm).iam │ │ ├── Weldment (BSI).iam │ │ ├── Weldment (DIN).iam │ │ ├── Weldment (GB).iam │ │ ├── Weldment (ISO).iam │ │ ├── Weldment (JIS).iam │ │ ├── am_bsi.dwg │ │ ├── am_din.dwg │ │ ├── am_gb.dwg │ │ ├── am_iso.dwg │ │ └── am_jis.dwg │ ├── Sheet Metal.ipt │ ├── Standard.dwg │ ├── Standard.iam │ ├── Standard.idw │ ├── Standard.ipn │ ├── Standard.ipt │ └── Weldment.iam ├── makerscannerAssembly.iam ├── makerscannerAssembly.ipj ├── ps3_eye.ipt └── ps3_eye_assembly2.iam ├── COPYING ├── Cameras.cpp ├── Cameras.h ├── CaptureThread.cpp ├── CaptureThread.h ├── ChangeLog ├── DistanceToReferenceDialog.cpp ├── DistanceToReferenceDialog.h ├── Documentation ├── 3DMakerScannerMath.vsdx └── 3DMakerScannerMath.vsdx.pdf ├── INSTALL ├── IndividualPixels.h ├── LICENSE ├── Makefile.am ├── MakerscannerWin3.cbp ├── NEWS ├── PointCloud.cpp ├── PointCloud.h ├── PointCloudPoint.cpp ├── PointCloudPoint.h ├── README ├── README.md ├── ScanStatus.cpp ├── ScanStatus.h ├── ScanThread.cpp ├── ScanThread.h ├── SetConfig.c ├── SetConfig.h ├── SetHorz.c ├── SetHorz.h ├── bootstrap.sh ├── camview.cpp ├── camview.h ├── configure.ac ├── laserIcon.ico ├── laserIcon.png ├── laserIcon.svg ├── laserIcon.xcf ├── makerscanner-0.3.1.tar.gz ├── resource.rc ├── windows-package ├── AUTHORS ├── LICENSE ├── README ├── cv210.dll ├── cxcore210.dll ├── highgui210.dll ├── installer.iss ├── laserIcon.ico └── mingwm10.dll ├── wxsmith ├── ActiveStereoframe.wxs └── DistanceToReferenceDialog.wxs └── wxwin.m4 /.gitignore: -------------------------------------------------------------------------------- 1 | *.o 2 | *~ 3 | .deps/ 4 | config.h 5 | config.h.in 6 | config.log 7 | config.status 8 | configure 9 | configure.scan 10 | depcomp 11 | install-sh 12 | makerscanner 13 | missing 14 | Makefile 15 | aclocal.m4 16 | autom4te.cache 17 | autoscan.log 18 | stamp-h1 19 | Makefile.in 20 | compile 21 | bin 22 | gmon.out -------------------------------------------------------------------------------- /AUTHORS: -------------------------------------------------------------------------------- 1 | Andrew Barry 2 | Original Version, 0.1, 0.2, 0.3 3 | 4 | 2008-2010 5 | 6 | -------------------------------------------------------------------------------- /ActiveStereo.cbp: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 84 | 85 | -------------------------------------------------------------------------------- /ActiveStereo.layout: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | -------------------------------------------------------------------------------- /ActiveStereoApp.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2009-2010, Andrew Barry 3 | * 4 | * This file is part of MakerScanner. 5 | * 6 | * MakerScanner is free software; you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License (Version 2, June 1991) as published by 8 | * the Free Software Foundation. 9 | * 10 | * MakerScanner is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | 19 | #include "ActiveStereoApp.h" 20 | 21 | //(*AppHeaders 22 | #include "ActiveStereoMain.h" 23 | #include 24 | //*) 25 | 26 | IMPLEMENT_APP(ActiveStereoApp); 27 | 28 | bool ActiveStereoApp::OnInit() 29 | { 30 | //(*AppInitialize 31 | bool wxsOK = true; 32 | wxInitAllImageHandlers(); 33 | if ( wxsOK ) 34 | { 35 | ActiveStereoFrame* Frame = new ActiveStereoFrame(0); 36 | Frame->Show(); 37 | SetTopWindow(Frame); 38 | } 39 | //*) 40 | return wxsOK; 41 | 42 | } 43 | -------------------------------------------------------------------------------- /ActiveStereoApp.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2009-2010, Andrew Barry 3 | * 4 | * This file is part of MakerScanner. 5 | * 6 | * MakerScanner is free software; you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License (Version 2, June 1991) as published by 8 | * the Free Software Foundation. 9 | * 10 | * MakerScanner is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | 19 | #ifndef ACTIVESTEREOAPP_H 20 | #define ACTIVESTEREOAPP_H 21 | 22 | #include 23 | 24 | class ActiveStereoApp : public wxApp 25 | { 26 | public: 27 | virtual bool OnInit(); 28 | }; 29 | 30 | #endif // ACTIVESTEREOAPP_H 31 | -------------------------------------------------------------------------------- /ActiveStereoMain.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2009-2010, Andrew Barry 3 | * 4 | * This file is part of MakerScanner. 5 | * 6 | * MakerScanner is free software; you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License (Version 2, June 1991) as published by 8 | * the Free Software Foundation. 9 | * 10 | * MakerScanner is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | 19 | #ifndef ACTIVESTEREOMAIN_H 20 | #define ACTIVESTEREOMAIN_H 21 | 22 | //(*Headers(ActiveStereoFrame) 23 | #include 24 | #include 25 | #include 26 | #include 27 | #include 28 | #include 29 | #include 30 | #include 31 | #include 32 | #include 33 | //*) 34 | 35 | 36 | #include 37 | #include 38 | #include 39 | #include 40 | #include 41 | #include 42 | 43 | // include OpenCV headers 44 | #include "cv.h" 45 | #include "highgui.h" 46 | 47 | #include "Cameras.h" 48 | #include "ScanThread.h" 49 | #include "ScanStatus.h" 50 | 51 | // include image-viewing widget header 52 | #include "camview.h" 53 | 54 | class ActiveStereoFrame: public wxFrame 55 | { 56 | public: 57 | 58 | ActiveStereoFrame(wxWindow* parent,wxWindowID id = -1); 59 | virtual ~ActiveStereoFrame(); 60 | 61 | private: 62 | 63 | //(*Handlers(ActiveStereoFrame) 64 | void OnQuit(wxCommandEvent& event); 65 | void OnAbout(wxCommandEvent& event); 66 | void OnButSetConfigClick(wxCommandEvent& event); 67 | void OnButCaptureClick(wxCommandEvent& event); 68 | void OnSliderImageThresholdCmdScroll(wxScrollEvent& event); 69 | void OnSliderLaserMaxCmdScrollChanged(wxScrollEvent& event); 70 | void OnSliderLaserMinCmdScrollChanged(wxScrollEvent& event); 71 | void OnButCameraConnectClick(wxCommandEvent& event); 72 | void OnSliderMirrorResolutionCmdScrollChanged(wxScrollEvent& event); 73 | void OnSliderMirrorPositionCmdScrollChanged(wxScrollEvent& event); 74 | void OnSliderLaserIntensityCmdScrollChanged(wxScrollEvent& event); 75 | void OnSliderServoPositionCmdScrollChanged(wxScrollEvent& event); 76 | void OnSliderMirrorPositionCmdScrollChangedWithMove(wxScrollEvent& event); 77 | void OnButDoneScanningClick(wxCommandEvent& event); 78 | void OnSliderBrightnessFilterCmdScrollThumbTrack(wxScrollEvent& event); 79 | void OnMenuChangeCameraSelected(wxCommandEvent& event); 80 | //*) 81 | 82 | //(*Identifiers(ActiveStereoFrame) 83 | static const long ID_STATICTEXT3; 84 | static const long ID_STATICTEXT4; 85 | static const long ID_STATICTEXT1; 86 | static const long ID_FPS_LABEL; 87 | static const long ID_BUTTON4; 88 | static const long ID_STATICTEXT7; 89 | static const long ID_SLIDER3; 90 | static const long ID_STATICTEXT5; 91 | static const long ID_SLIDER1; 92 | static const long ID_STATICTEXT6; 93 | static const long ID_BUTTON3; 94 | static const long ID_BUTTON1; 95 | static const long ID_STATICLINE1; 96 | static const long ID_TEXTCTRL1; 97 | static const long ID_PANEL1; 98 | static const long idMenuQuit; 99 | static const long idMenuChangeCamera; 100 | static const long idMenuAbout; 101 | static const long ID_STATUSBAR1; 102 | //*) 103 | 104 | //(*Declarations(ActiveStereoFrame) 105 | wxPanel* Panel1; 106 | wxMenuItem* menuChangeCamera; 107 | wxStatusBar* StatusBar1; 108 | wxMenu* Menu3; 109 | wxSlider* sliderBrightnessFilter; 110 | wxStaticText* lblFPS; 111 | wxStaticText* StaticText1; 112 | wxStaticText* lblBrightnessFilter; 113 | wxBoxSizer* headBoxSizer; 114 | wxStaticLine* StaticLine1; 115 | wxSlider* sliderImageThreshold; 116 | wxTextCtrl* txtLog; 117 | wxStaticText* lblImageThreshold; 118 | wxStaticText* lblCameraConnected; 119 | wxStaticText* StaticText2; 120 | wxFlexGridSizer* flexGridStatus; 121 | wxButton* butCameraConnect; 122 | wxButton* butCapture; 123 | wxStaticBoxSizer* staticBoxSizerStatus; 124 | wxButton* butDoneScanning; 125 | wxStaticText* lblStaticCameraConnected; 126 | //*) 127 | 128 | // We must use events to communicate with the scanning thread because direct GUI 129 | // modifications of the frame from the thread will fail badly 130 | 131 | // Update image event handler -- get an image and display it on the frame 132 | void UpdateImage(wxCommandEvent &event); 133 | 134 | // Catch an event and display its text in the terminal box 135 | void DisplayText(wxCommandEvent &event); 136 | 137 | // Write the point cloud file with the text stored in the event 138 | void WriteToFile(wxCommandEvent &event); 139 | 140 | // Catch an event to update the scan progress bar 141 | void UpdateScanProgress(wxCommandEvent &event); 142 | 143 | // Catch the scan finished event and re-enable the frame 144 | void ScanFinished(wxCommandEvent &event); 145 | 146 | // Enable/disable frame buttons (disable when scanning == true) 147 | void SetGUIStateDuringScan(bool scanning); 148 | 149 | // Catches an UpdateUI event and updates the FPS display 150 | void UpdateFps(wxUpdateUIEvent &event); 151 | 152 | // last time a USB event was sent 153 | wxDateTime lastUsbTime; 154 | 155 | // camera object, allows access to scanning thread 156 | Cameras *cam; 157 | 158 | // object that holds the current scan's status for communitcating between 159 | // the GUI and scanning/capturing threads. 160 | ScanStatus *scanStatus; 161 | 162 | wxString pointcloudFilename; 163 | 164 | // image display widget 165 | CCamView* m_pCamView; 166 | 167 | // configuration storage object 168 | wxConfig *config; 169 | 170 | // data for the FPS display 171 | wxDateTime timeOfLastFpsUpdate; 172 | int framesSinceLastFpsUpdate, cameraNum; 173 | 174 | bool updateImageRunning, cameraConnected; 175 | 176 | DECLARE_EVENT_TABLE() 177 | }; 178 | 179 | #endif // ACTIVESTEREOMAIN_H 180 | -------------------------------------------------------------------------------- /CAD/Design Data/AEC Exchange/Support/AuthoringTemplates/Air Terminal.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Design Data/AEC Exchange/Support/AuthoringTemplates/Air Terminal.xml -------------------------------------------------------------------------------- /CAD/Design Data/AEC Exchange/Support/AuthoringTemplates/Casework.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Design Data/AEC Exchange/Support/AuthoringTemplates/Casework.xml -------------------------------------------------------------------------------- /CAD/Design Data/AEC Exchange/Support/AuthoringTemplates/Categories.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Design Data/AEC Exchange/Support/AuthoringTemplates/Categories.xml -------------------------------------------------------------------------------- /CAD/Design Data/AEC Exchange/Support/AuthoringTemplates/Communication Devices.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Design Data/AEC Exchange/Support/AuthoringTemplates/Communication Devices.xml -------------------------------------------------------------------------------- /CAD/Design Data/AEC Exchange/Support/AuthoringTemplates/Data Devices.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Design Data/AEC Exchange/Support/AuthoringTemplates/Data Devices.xml -------------------------------------------------------------------------------- /CAD/Design Data/AEC Exchange/Support/AuthoringTemplates/Doors.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Design Data/AEC Exchange/Support/AuthoringTemplates/Doors.xml -------------------------------------------------------------------------------- /CAD/Design Data/AEC Exchange/Support/AuthoringTemplates/Duct Accessories.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Design Data/AEC Exchange/Support/AuthoringTemplates/Duct Accessories.xml -------------------------------------------------------------------------------- /CAD/Design Data/AEC Exchange/Support/AuthoringTemplates/Electrical Equipment.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Design Data/AEC Exchange/Support/AuthoringTemplates/Electrical Equipment.xml -------------------------------------------------------------------------------- /CAD/Design Data/AEC Exchange/Support/AuthoringTemplates/Electrical Fixtures.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Design Data/AEC Exchange/Support/AuthoringTemplates/Electrical Fixtures.xml -------------------------------------------------------------------------------- /CAD/Design Data/AEC Exchange/Support/AuthoringTemplates/Fire Alarm Devices.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Design Data/AEC Exchange/Support/AuthoringTemplates/Fire Alarm Devices.xml -------------------------------------------------------------------------------- /CAD/Design Data/AEC Exchange/Support/AuthoringTemplates/Furniture Systems.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Design Data/AEC Exchange/Support/AuthoringTemplates/Furniture Systems.xml -------------------------------------------------------------------------------- /CAD/Design Data/AEC Exchange/Support/AuthoringTemplates/Furniture.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Design Data/AEC Exchange/Support/AuthoringTemplates/Furniture.xml -------------------------------------------------------------------------------- /CAD/Design Data/AEC Exchange/Support/AuthoringTemplates/Generic Models.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Design Data/AEC Exchange/Support/AuthoringTemplates/Generic Models.xml -------------------------------------------------------------------------------- /CAD/Design Data/AEC Exchange/Support/AuthoringTemplates/Lighting Fixtures.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Design Data/AEC Exchange/Support/AuthoringTemplates/Lighting Fixtures.xml -------------------------------------------------------------------------------- /CAD/Design Data/AEC Exchange/Support/AuthoringTemplates/Mechanical Equipment.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Design Data/AEC Exchange/Support/AuthoringTemplates/Mechanical Equipment.xml -------------------------------------------------------------------------------- /CAD/Design Data/AEC Exchange/Support/AuthoringTemplates/Pipe Accessories.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Design Data/AEC Exchange/Support/AuthoringTemplates/Pipe Accessories.xml -------------------------------------------------------------------------------- /CAD/Design Data/AEC Exchange/Support/AuthoringTemplates/Plumbing Fixtures.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Design Data/AEC Exchange/Support/AuthoringTemplates/Plumbing Fixtures.xml -------------------------------------------------------------------------------- /CAD/Design Data/AEC Exchange/Support/AuthoringTemplates/Security Devices.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Design Data/AEC Exchange/Support/AuthoringTemplates/Security Devices.xml -------------------------------------------------------------------------------- /CAD/Design Data/AEC Exchange/Support/AuthoringTemplates/Specialty Equipment.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Design Data/AEC Exchange/Support/AuthoringTemplates/Specialty Equipment.xml -------------------------------------------------------------------------------- /CAD/Design Data/AEC Exchange/Support/AuthoringTemplates/Telephone Devices.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Design Data/AEC Exchange/Support/AuthoringTemplates/Telephone Devices.xml -------------------------------------------------------------------------------- /CAD/Design Data/AEC Exchange/Support/AuthoringTemplates/Windows.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Design Data/AEC Exchange/Support/AuthoringTemplates/Windows.xml -------------------------------------------------------------------------------- /CAD/Design Data/AEC Exchange/Support/CableTrayConnector.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Design Data/AEC Exchange/Support/CableTrayConnector.xml -------------------------------------------------------------------------------- /CAD/Design Data/AEC Exchange/Support/ConduitConnector.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Design Data/AEC Exchange/Support/ConduitConnector.xml -------------------------------------------------------------------------------- /CAD/Design Data/AEC Exchange/Support/DWGSettings.ini: -------------------------------------------------------------------------------- 1 | [EXPORT SELECT OPTIONS] 2 | AUTOCAD VERSION=AutoCAD 2004 3 | CREATE AUTOCAD MECHANICAL=No 4 | USE TRANSMITTAL=No 5 | USE CUSTOMIZE=No 6 | CUSTOMIZE FILE=[INVENTOR_INSTALL_DIRECTORY]\COMPATIBILITY\Support\FlatPattern.xml 7 | CREATE LAYER GROUP=No 8 | PARTS ONLY=No 9 | [EXPORT PROPERTIES] 10 | SELECTED PROPERTIES= 11 | [EXPORT DESTINATION] 12 | SPACE=Model 13 | SCALING=Geometry 14 | MAPPING=MapsBest 15 | MODEL GEOMETRY ONLY=No 16 | EXPLODE DIMENSIONS=No 17 | SYMBOLS ARE BLOCKED=Yes 18 | AUTOCAD TEMPLATE= 19 | DESTINATION DXF=No 20 | [EXPORT LINE TYPE & LINE SCALE] 21 | LINE TYPE FILE=[INVENTOR_INSTALL_DIRECTORY]\COMPATIBILITY\Support\invGB.lin 22 | Continuous=Continuous;0. 23 | Dashed=DASHED;0. 24 | Dashed Space=DASHED_SPACE;0. 25 | Long Dash Dotted=LONG_DASH_DOTTED;0. 26 | Long Dash Double Dot=LONG_DASH_DOUBLE_DOT;0. 27 | Long Dash Triple Dot=LONG_DASH_TRIPLE_DOT;0. 28 | Dotted=DOTTED;0. 29 | Chain=CHAIN;0. 30 | Double Dash Chain=DOUBLE_DASH_CHAIN;0. 31 | Dash Double Dot=DASH_DOUBLE_DOT;0. 32 | Dash Dot=DASH_DOT;0. 33 | Double Dash Dot=DOUBLE_DASH_DOT;0. 34 | Double Dash Double Dot=DOUBLE_DASH_DOUBLE_DOT;0. 35 | Dash Triple Dot=DASH_TRIPLE_DOT;0. 36 | Double Dash Triple Dot=DOUBLE_DASH_TRIPLE_DOT;0. 37 | -------------------------------------------------------------------------------- /CAD/Design Data/AEC Exchange/Support/DuctConnector.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Design Data/AEC Exchange/Support/DuctConnector.xml -------------------------------------------------------------------------------- /CAD/Design Data/AEC Exchange/Support/ElectricalConnector.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Design Data/AEC Exchange/Support/ElectricalConnector.xml -------------------------------------------------------------------------------- /CAD/Design Data/AEC Exchange/Support/PartAtom.xml: -------------------------------------------------------------------------------- 1 |  2 | 4 | 5 | 6 | 7 | 8 | Inventor 9 | 10 | 11 | 12 | 13 | 14 | 15 | 18 | 19 | <updated/> 20 | 21 | <A:part type="user"> 22 | <A:title/> 23 | <A:partno rel="user"/> 24 | <width display="Width" unit="cm"/> 25 | <length display="Length" unit="cm"/> 26 | <height display="Height" unit="cm"/> 27 | </A:part> 28 | </entry> -------------------------------------------------------------------------------- /CAD/Design Data/AEC Exchange/Support/PipeConnector.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Design Data/AEC Exchange/Support/PipeConnector.xml -------------------------------------------------------------------------------- /CAD/Design Data/AEC Exchange/Support/TranslationReport.xsl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Design Data/AEC Exchange/Support/TranslationReport.xsl -------------------------------------------------------------------------------- /CAD/Design Data/AEC Exchange/Support/assets.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Design Data/AEC Exchange/Support/assets.zip -------------------------------------------------------------------------------- /CAD/Design Data/Balloon.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Design Data/Balloon.xml -------------------------------------------------------------------------------- /CAD/Design Data/CenterMark.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Design Data/CenterMark.xml -------------------------------------------------------------------------------- /CAD/Design Data/Clearance.xls: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Design Data/Clearance.xls -------------------------------------------------------------------------------- /CAD/Design Data/Colors.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Design Data/Colors.xml -------------------------------------------------------------------------------- /CAD/Design Data/DWG-DXF/FaceLoops.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Design Data/DWG-DXF/FaceLoops.xml -------------------------------------------------------------------------------- /CAD/Design Data/DWG-DXF/FlatPattern.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Design Data/DWG-DXF/FlatPattern.xml -------------------------------------------------------------------------------- /CAD/Design Data/DWG-DXF/FlatPatternExportOpts.xml: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" standalone="yes"?> 2 | <!-- 3 | =========================================================== 4 | This file contains options for exporting a flat Pattern 5 | to a DWG/DXF file. 6 | In this version the only option is to replace splines with 7 | line segments with a set chord tolerance. 8 | 9 | enable="1" will turn the option on 10 | enable="0" will turn the option off 11 | 12 | chord_tolerance sets the maximum distance from any point 13 | on the line to the spline. 14 | Please use '.' as decimal delimiter. 15 | 16 | =========================================================== 17 | --> 18 | 19 | <!-- 20 | =========================================================== 21 | BEGIN DTD SECTION 22 | Do not modify the DTD section of this file. It is used to 23 | verify that the content of the file is valid. 24 | =========================================================== 25 | --> 26 | <!DOCTYPE fpdwgEdits [ 27 | <!ELEMENT fpdwgEdits (option)> 28 | <!ELEMENT option (replace)> 29 | <!ELEMENT replace (spline, advlegacyexport?)> 30 | <!ELEMENT spline EMPTY> 31 | <!ELEMENT advlegacyexport EMPTY> 32 | 33 | <!ATTLIST fpdwgEdits version CDATA #REQUIRED> 34 | <!ATTLIST spline enable CDATA #REQUIRED> 35 | <!ATTLIST spline chord_tolerance CDATA #REQUIRED> 36 | <!ATTLIST advlegacyexport enable CDATA #REQUIRED> 37 | ]> 38 | <!-- 39 | =========================================================== 40 | END DTD SECTION 41 | =========================================================== 42 | --> 43 | <fpdwgEdits version='1.0'> 44 | <option> 45 | <replace> 46 | <spline enable="1" chord_tolerance="0.01" /> 47 | <advlegacyexport enable="1" /> 48 | </replace> 49 | </option> 50 | </fpdwgEdits> 51 | -------------------------------------------------------------------------------- /CAD/Design Data/DWG-DXF/exportdwg.ini: -------------------------------------------------------------------------------- 1 | [EXPORT SELECT OPTIONS] 2 | AUTOCAD VERSION=AutoCAD 2007 3 | CREATE AUTOCAD MECHANICAL=No 4 | USE TRANSMITTAL=Yes 5 | USE CUSTOMIZE=No 6 | CUSTOMIZE FILE=Design Data\DWG-DXF\FlatPattern.xml 7 | CREATE LAYER GROUP=No 8 | PARTS ONLY=No 9 | [EXPORT PROPERTIES] 10 | SELECTED PROPERTIES= 11 | [EXPORT DESTINATION] 12 | SPACE=Model 13 | SCALING=Geometry 14 | MAPPING=MapsBest 15 | MODEL GEOMETRY ONLY=No 16 | EXPLODE DIMENSIONS=No 17 | SYMBOLS ARE BLOCKED=Yes 18 | AUTOCAD TEMPLATE= 19 | DESTINATION DXF=No 20 | [EXPORT LINE TYPE & LINE SCALE] 21 | LINE TYPE FILE=COMPATIBILITY\Support\invANSI.lin 22 | Continuous=Continuous;0. 23 | Dashed=DASHED;0. 24 | Dashed Space=DASHED_SPACE;0. 25 | Long Dash Dotted=LONG_DASH_DOTTED;0. 26 | Long Dash Double Dot=LONG_DASH_DOUBLE_DOT;0. 27 | Long Dash Triple Dot=LONG_DASH_TRIPLE_DOT;0. 28 | Dotted=DOTTED;0. 29 | Chain=CHAIN;0. 30 | Double Dash Chain=DOUBLE_DASH_CHAIN;0. 31 | Dash Double Dot=DASH_DOUBLE_DOT;0. 32 | Dash Dot=DASH_DOT;0. 33 | Double Dash Dot=DOUBLE_DASH_DOT;0. 34 | Double Dash Double Dot=DOUBLE_DASH_DOUBLE_DOT;0. 35 | Dash Triple Dot=DASH_TRIPLE_DOT;0. 36 | Double Dash Triple Dot=DOUBLE_DASH_TRIPLE_DOT;0. 37 | -------------------------------------------------------------------------------- /CAD/Design Data/DWG-DXF/exportdxf.ini: -------------------------------------------------------------------------------- 1 | [EXPORT SELECT OPTIONS] 2 | AUTOCAD VERSION=AutoCAD 2007 3 | CREATE AUTOCAD MECHANICAL=No 4 | USE TRANSMITTAL=Yes 5 | USE CUSTOMIZE=No 6 | CUSTOMIZE FILE=Design Data\DWG-DXF\FlatPattern.xml 7 | CREATE LAYER GROUP=No 8 | PARTS ONLY=No 9 | [EXPORT PROPERTIES] 10 | SELECTED PROPERTIES= 11 | [EXPORT DESTINATION] 12 | SPACE=Model 13 | SCALING=Geometry 14 | MAPPING=MapsBest 15 | MODEL GEOMETRY ONLY=No 16 | EXPLODE DIMENSIONS=No 17 | SYMBOLS ARE BLOCKED=Yes 18 | AUTOCAD TEMPLATE= 19 | DESTINATION DXF=Yes 20 | [EXPORT LINE TYPE & LINE SCALE] 21 | LINE TYPE FILE=COMPATIBILITY\Support\invANSI.lin 22 | Continuous=Continuous;0. 23 | Dashed=DASHED;0. 24 | Dashed Space=DASHED_SPACE;0. 25 | Long Dash Dotted=LONG_DASH_DOTTED;0. 26 | Long Dash Double Dot=LONG_DASH_DOUBLE_DOT;0. 27 | Long Dash Triple Dot=LONG_DASH_TRIPLE_DOT;0. 28 | Dotted=DOTTED;0. 29 | Chain=CHAIN;0. 30 | Double Dash Chain=DOUBLE_DASH_CHAIN;0. 31 | Dash Double Dot=DASH_DOUBLE_DOT;0. 32 | Dash Dot=DASH_DOT;0. 33 | Double Dash Dot=DOUBLE_DASH_DOT;0. 34 | Double Dash Double Dot=DOUBLE_DASH_DOUBLE_DOT;0. 35 | Dash Triple Dot=DASH_TRIPLE_DOT;0. 36 | Double Dash Triple Dot=DOUBLE_DASH_TRIPLE_DOT;0. 37 | -------------------------------------------------------------------------------- /CAD/Design Data/DWG-DXF/importacad.ini: -------------------------------------------------------------------------------- 1 | [COMMON OPTIONS] 2 | FILE VERSION=3.0 3 | IMPORT FILE TYPE=AutoCAD DWG File 4 | FILE UNITS= 5 | SELECTED LAYOUT= 6 | IMPORT LAYOUTS=No 7 | IMPORT MODEL SPACE=Yes 8 | DESTINATION DIRECTORY= 9 | DRAWING TEMPLATE=Standard.idw 10 | SHEET SIZE=Custom Millimeters 11 | PART TEMPLATE=Standard.ipt 12 | ASSEMBLY TEMPLATE=Standard.iam 13 | [2D OPTIONS] 14 | DESTINATION 2D DATA=New Drawing 15 | IMPORT TO 3D SKETCHES=No 16 | IMPORT 3D SOLIDS=No 17 | IMPORT 3D SOLIDS TO SINGLE PART FILE=No 18 | CONSTRAIN ENDPOINTS (SKETCH)=Yes 19 | CONSTRAIN ENDPOINTS (DRAWING)=No 20 | DETECT FROM FILE=Yes 21 | USE DEFAULT NAMES=Yes 22 | PROMOTE DRAWING DIMENSIONS=No 23 | LAYERS OFF= 24 | LAYERS ON= 25 | [IMPORT MAP LAYER TO SKETCH] 26 | [IMPORT MAP ACAD FONT TO IVT FONT] 27 | [3D OPTIONS] 28 | TRANSLATE MODEL=Yes 29 | TRANSLATE DRAWING VIEWS=No 30 | PART MODE=Translate Feature Recipe 31 | FEATURE RECIPE MODE=Translate Recipe If All Features Supported 32 | COMPDEF MODE=Translate Instanced CompDefs Only 33 | DRAWING MODE=Unassociated Drawing Views 34 | DUPLICATE FILE ACTION=Overwrite Existing File 35 | SUPPRESS SINGLE PART ASSEMBLY=No 36 | -------------------------------------------------------------------------------- /CAD/Design Data/DWG-DXF/importdxf.ini: -------------------------------------------------------------------------------- 1 | [COMMON OPTIONS] 2 | FILE VERSION=3.0 3 | IMPORT FILE TYPE=DXF File 4 | FILE UNITS= 5 | SELECTED LAYOUT= 6 | IMPORT LAYOUTS=No 7 | IMPORT MODEL SPACE=Yes 8 | DESTINATION DIRECTORY= 9 | DRAWING TEMPLATE=Standard.idw 10 | SHEET SIZE=Custom Millimeters 11 | PART TEMPLATE=Standard.ipt 12 | ASSEMBLY TEMPLATE=Standard.iam 13 | [2D OPTIONS] 14 | DESTINATION 2D DATA=New Drawing 15 | IMPORT TO 3D SKETCHES=No 16 | IMPORT 3D SOLIDS=No 17 | IMPORT 3D SOLIDS TO SINGLE PART FILE=No 18 | CONSTRAIN ENDPOINTS (SKETCH)=Yes 19 | CONSTRAIN ENDPOINTS (DRAWING)=No 20 | DETECT FROM FILE=Yes 21 | USE DEFAULT NAMES=Yes 22 | PROMOTE DRAWING DIMENSIONS=No 23 | LAYERS OFF= 24 | LAYERS ON= 25 | [IMPORT MAP LAYER TO SKETCH] 26 | [IMPORT MAP ACAD FONT TO IVT FONT] 27 | [3D OPTIONS] 28 | TRANSLATE MODEL=Yes 29 | TRANSLATE DRAWING VIEWS=No 30 | PART MODE=Translate Feature Recipe 31 | FEATURE RECIPE MODE=Translate Recipe If All Features Supported 32 | COMPDEF MODE=Translate Instanced CompDefs Only 33 | DRAWING MODE=Unassociated Drawing Views 34 | DUPLICATE FILE ACTION=Overwrite Existing File 35 | SUPPRESS SINGLE PART ASSEMBLY=No 36 | -------------------------------------------------------------------------------- /CAD/Design Data/DWG-DXF/importmdt.ini: -------------------------------------------------------------------------------- 1 | [COMMON OPTIONS] 2 | FILE VERSION=3.0 3 | IMPORT FILE TYPE=MDT DWG File 4 | FILE UNITS= 5 | SELECTED LAYOUT= 6 | IMPORT LAYOUTS=No 7 | IMPORT MODEL SPACE=Yes 8 | DESTINATION DIRECTORY= 9 | DRAWING TEMPLATE=Standard.idw 10 | SHEET SIZE=Custom Millimeters 11 | PART TEMPLATE=Standard.ipt 12 | ASSEMBLY TEMPLATE=Standard.iam 13 | [2D OPTIONS] 14 | DESTINATION 2D DATA=New Drawing 15 | IMPORT TO 3D SKETCHES=No 16 | IMPORT 3D SOLIDS=No 17 | IMPORT 3D SOLIDS TO SINGLE PART FILE=No 18 | CONSTRAIN ENDPOINTS (SKETCH)=Yes 19 | CONSTRAIN ENDPOINTS (DRAWING)=No 20 | DETECT FROM FILE=Yes 21 | USE DEFAULT NAMES=Yes 22 | PROMOTE DRAWING DIMENSIONS=No 23 | LAYERS OFF= 24 | LAYERS ON= 25 | [IMPORT MAP LAYER TO SKETCH] 26 | [IMPORT MAP ACAD FONT TO IVT FONT] 27 | [3D OPTIONS] 28 | TRANSLATE MODEL=Yes 29 | TRANSLATE DRAWING VIEWS=No 30 | PART MODE=Translate Feature Recipe 31 | FEATURE RECIPE MODE=Translate Recipe If All Features Supported 32 | COMPDEF MODE=Translate Instanced CompDefs Only 33 | DRAWING MODE=Unassociated Drawing Views 34 | DUPLICATE FILE ACTION=Overwrite Existing File 35 | SUPPRESS SINGLE PART ASSEMBLY=No 36 | -------------------------------------------------------------------------------- /CAD/Design Data/DatumTarget.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Design Data/DatumTarget.xml -------------------------------------------------------------------------------- /CAD/Design Data/Dimension.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Design Data/Dimension.xml -------------------------------------------------------------------------------- /CAD/Design Data/FeatureControlFrame.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Design Data/FeatureControlFrame.xml -------------------------------------------------------------------------------- /CAD/Design Data/GOST/Defaults.ini: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Design Data/GOST/Defaults.ini -------------------------------------------------------------------------------- /CAD/Design Data/GOST/MaterialsFavorites.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Design Data/GOST/MaterialsFavorites.xml -------------------------------------------------------------------------------- /CAD/Design Data/GOST/PartsListGroup1.xls: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Design Data/GOST/PartsListGroup1.xls -------------------------------------------------------------------------------- /CAD/Design Data/GOST/PartsListGroup1b.xls: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Design Data/GOST/PartsListGroup1b.xls -------------------------------------------------------------------------------- /CAD/Design Data/GOST/PartsListTemplate.xls: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Design Data/GOST/PartsListTemplate.xls -------------------------------------------------------------------------------- /CAD/Design Data/GOST/WeldFavorites.ini: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Design Data/GOST/WeldFavorites.ini -------------------------------------------------------------------------------- /CAD/Design Data/GOST/technical requirements/Assembly drawings.tr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Design Data/GOST/technical requirements/Assembly drawings.tr -------------------------------------------------------------------------------- /CAD/Design Data/GOST/technical requirements/Cold punching parts.tr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Design Data/GOST/technical requirements/Cold punching parts.tr -------------------------------------------------------------------------------- /CAD/Design Data/GOST/technical requirements/Electrical cases.tr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Design Data/GOST/technical requirements/Electrical cases.tr -------------------------------------------------------------------------------- /CAD/Design Data/GOST/technical requirements/Forged parts.tr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Design Data/GOST/technical requirements/Forged parts.tr -------------------------------------------------------------------------------- /CAD/Design Data/GOST/technical requirements/Mechanical parts.tr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Design Data/GOST/technical requirements/Mechanical parts.tr -------------------------------------------------------------------------------- /CAD/Design Data/GOST/technical requirements/Mold parts.tr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Design Data/GOST/technical requirements/Mold parts.tr -------------------------------------------------------------------------------- /CAD/Design Data/GOST/technical requirements/Pipes.tr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Design Data/GOST/technical requirements/Pipes.tr -------------------------------------------------------------------------------- /CAD/Design Data/GOST/technical requirements/Steel mold parts.tr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Design Data/GOST/technical requirements/Steel mold parts.tr -------------------------------------------------------------------------------- /CAD/Design Data/GOST/technical requirements/Surface coatings.tr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Design Data/GOST/technical requirements/Surface coatings.tr -------------------------------------------------------------------------------- /CAD/Design Data/GOST/technical requirements/Weld assemblies.tr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Design Data/GOST/technical requirements/Weld assemblies.tr -------------------------------------------------------------------------------- /CAD/Design Data/Hatch.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Design Data/Hatch.xml -------------------------------------------------------------------------------- /CAD/Design Data/HoleTable.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Design Data/HoleTable.xml -------------------------------------------------------------------------------- /CAD/Design Data/Id.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Design Data/Id.xml -------------------------------------------------------------------------------- /CAD/Design Data/Layers.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Design Data/Layers.xml -------------------------------------------------------------------------------- /CAD/Design Data/Leader.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Design Data/Leader.xml -------------------------------------------------------------------------------- /CAD/Design Data/Lighting.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Design Data/Lighting.xml -------------------------------------------------------------------------------- /CAD/Design Data/Materials.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Design Data/Materials.xml -------------------------------------------------------------------------------- /CAD/Design Data/ObjectDefaults.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Design Data/ObjectDefaults.xml -------------------------------------------------------------------------------- /CAD/Design Data/PartsList.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Design Data/PartsList.xml -------------------------------------------------------------------------------- /CAD/Design Data/ProteinMapping.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Design Data/ProteinMapping.xml -------------------------------------------------------------------------------- /CAD/Design Data/RevisionTable.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Design Data/RevisionTable.xml -------------------------------------------------------------------------------- /CAD/Design Data/SheetMetalRules.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Design Data/SheetMetalRules.xml -------------------------------------------------------------------------------- /CAD/Design Data/SheetMetalUnfold.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Design Data/SheetMetalUnfold.xml -------------------------------------------------------------------------------- /CAD/Design Data/Simulation/Report/Autodesk_Logo_Black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Design Data/Simulation/Report/Autodesk_Logo_Black.png -------------------------------------------------------------------------------- /CAD/Design Data/Simulation/Report/Constraint.htm: -------------------------------------------------------------------------------- 1 | <div> 2 | <h4><!--iif(JAVA)<img class="p" src="Images/minus.png" onclick="aa(this)" alt="" /> iif--> $$ConstraintName$</h4> 3 | <div style="display:"> 4 | <blockquote> 5 | <table class="ta"> 6 | <tr> 7 | <td>$$msg16047$</td> 8 | <td>$$Type$</td> 9 | $$ConstraintParameters$ 10 | </tr> 11 | </table><!--iif(CONSTRAINTSVIEW) 12 | <div> 13 | <h5><!--iif(JAVA)<img class="p" src="Images/minus.png" onclick="aa(this)" alt="" /> iif--> $$msg16048$</h5> 14 | <div style="display:"> 15 | <p><a href="$$ImagePath$"><img class="z" src="$$ImagePath$" alt="" /></a></p><!--iif(OPPOSITE) 16 | <p><a href="$$OppositeImagePath$"><img class="z" src="$$OppositeImagePath$" alt="" /></a></p> iif--> 17 | </div></div> iif--> 18 | </blockquote> 19 | </div></div> -------------------------------------------------------------------------------- /CAD/Design Data/Simulation/Report/Contact.htm: -------------------------------------------------------------------------------- 1 | <div> 2 | <h4><!--iif(JAVA)<img class="p" src="Images/minus.png" onclick="aa(this)" alt="" /> iif--> $$ContactName$</h4> 3 | <div style="display:"> 4 | <blockquote> 5 | <table class="ta"> 6 | <tr> 7 | <td>$$msg16050$</td> 8 | <td>$$Type$</td> 9 | </tr> 10 | $$ContactRows$ 11 | </table> 12 | </blockquote> 13 | </div></div> -------------------------------------------------------------------------------- /CAD/Design Data/Simulation/Report/Figure.htm: -------------------------------------------------------------------------------- 1 | <div> 2 | <h5><!--iif(JAVA)<img class="p" src="Images/minus.png" onclick="aa(this)" alt="" /> iif--> $$FigureName$</h5> 3 | <div style="display:"> 4 | <blockquote> 5 | <p><a href="$$FigureSubPath$"><img class="z" src="$$FigureSubPath$" alt="" /></a></p><!--iif(OPPOSITE) 6 | <p><a href="$$FigureSubPathRev$"><img class="z" src="$$FigureSubPathRev$" alt="" /></a></p> iif--> 7 | </blockquote> 8 | </div></div> -------------------------------------------------------------------------------- /CAD/Design Data/Simulation/Report/Load.htm: -------------------------------------------------------------------------------- 1 | <div> 2 | <h4><!--iif(JAVA)<img class="p" src="Images/minus.png" onclick="aa(this)" alt="" /> iif--> $$LoadName$</h4> 3 | <div style="display:"> 4 | <blockquote> 5 | <table class="ta"> 6 | <tr> 7 | <td>$$msg16046$</td> 8 | <td>$$LoadType$</td> 9 | </tr> 10 | $$LoadRows$ 11 | </table><!--iif(LOADSVIEW) 12 | <div> 13 | <h5><!--iif(JAVA)<img class="p" src="Images/minus.png" onclick="aa(this)" alt="" /> iif--> $$msg16048$</h5> 14 | <div style="display:"> 15 | <p><a href="$$ImagePath$"><img class="z" src="$$ImagePath$" alt="" /></a></p><!--iif(OPPOSITE) 16 | <p><a href="$$OppositeImagePath$"><img class="z" src="$$OppositeImagePath$" alt="" /></a></p> iif--> 17 | </div></div> iif--> 18 | </blockquote> 19 | </div></div> -------------------------------------------------------------------------------- /CAD/Design Data/Simulation/Report/Main.htm: -------------------------------------------------------------------------------- 1 | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 2 | <html xmlns="http://www.w3.org/1999/xhtml"> 3 | <head> 4 | <meta http-equiv="Content-Type" content="text/html; charset=unicode" /><!--iif(JAVA) 5 | <meta http-equiv="Content-Script-Type" content="text/javascript" /> iif--> 6 | <meta http-equiv="Content-Style-Type" content="text/css" /> 7 | <title>$$MainTitle$ 8 | 23 | 51 | 52 | 61 |

$$MainTitle$

62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 83 |
$$msg16061$:$$FileName$
$$msg16010$:$$version$
$$msg16012$:$$CreateDate$
$$msg16011$:$$SimAuthor$
 $$msg16014$ 87 |
88 |
 $$msg15059$ 91 |
92 |
93 | $$GroupSummary$ 94 |
95 |
96 |
iif--> $$msg15068$ 99 |
100 |
101 | $$GroupProject$ 102 |
103 |
104 |
iif--> $$msg15053$ 107 |
108 |
109 | $$GroupStatus$ 110 |
111 |
112 |
iif--> $$msg15051$ 115 |
116 |
117 | $$GroupCustom$ 118 |
119 |
120 |
iif--> $$msg15082$ 123 |
124 |
125 | $$GroupPhysical$ 126 |
127 |

$$msg16090$

128 |
129 |
iif--> 130 | 131 | 132 | iif--> 133 | $$GroupSimulation$ 134 |


$$FilePath$

143 | 144 | 145 | -------------------------------------------------------------------------------- /CAD/Design Data/Simulation/Report/Material.htm: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 |
$$msg16032$$$Name$
$$msg16033$$$msg16034$$$Density$
$$msg16024$$$YieldStrength$
$$msg16049$$$UltimateStrength$
$$msg16036$$$msg16037$$$YoungsModulus$
$$msg16038$$$PoissonsRatio$
$$msg16039$$$ShearModulus$
$$msg16040$$$msg16041$$$LinearExpansion$
$$msg16043$$$ThermalConductivity$
$$msg16044$$$SpecificHeat$
$$msg16045$$$PartNames$
-------------------------------------------------------------------------------- /CAD/Design Data/Simulation/Report/ReactionForces.htm: -------------------------------------------------------------------------------- 1 | 2 | $$ConstraintName$ 3 | $$Force$ 4 | $$ForceX$ 5 | $$Moment$ 6 | $$MomentX$ 7 | 8 | 9 | $$ForceY$ 10 | $$MomentY$ 11 | 12 | 13 | $$ForceZ$ 14 | $$MomentZ$ 15 | -------------------------------------------------------------------------------- /CAD/Design Data/Simulation/Report/Simulation.htm: -------------------------------------------------------------------------------- 1 |
2 |
3 |

 $$SimulationName$

4 |
5 |
6 |

$$msg16015$

7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | iif--> iif--> 58 |
$$msg16016$$$DesignObjective$
$$msg16017$$$SimulationType$
$$msg16013$$$LastModifDate$
59 |


$$msg16018$

60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 85 |
$$msg16019$$$AvgMeshSize$
$$msg16020$$$MinSize$
$$msg16021$$$GradingFactor$
$$msg16022$$$MaxTurnAngle$
$$msg16023$$$CurvedMesh$
iif--> $$msg16025$ 110 |
111 |
112 | $$GroupMaterial$ 113 |
114 |
iif--> $$msg16026$ 117 |
118 |
119 | $$GroupLoad$ 120 | $$GroupConstraint$ 121 | $$GroupContact$ 122 |
123 |
iif--> $$msg16027$ 126 |
127 |
128 | $$GroupConfiguration$ 129 |
130 |
iif--> 131 | 132 | 133 | 134 | -------------------------------------------------------------------------------- /CAD/Design Data/Simulation/Report/minus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Design Data/Simulation/Report/minus.png -------------------------------------------------------------------------------- /CAD/Design Data/Simulation/Report/plus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Design Data/Simulation/Report/plus.png -------------------------------------------------------------------------------- /CAD/Design Data/Standard.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Design Data/Standard.xml -------------------------------------------------------------------------------- /CAD/Design Data/StudioLighting.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Design Data/StudioLighting.xml -------------------------------------------------------------------------------- /CAD/Design Data/StudioScene.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Design Data/StudioScene.xml -------------------------------------------------------------------------------- /CAD/Design Data/SurfaceTexture.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Design Data/SurfaceTexture.xml -------------------------------------------------------------------------------- /CAD/Design Data/Table.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Design Data/Table.xml -------------------------------------------------------------------------------- /CAD/Design Data/Text.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Design Data/Text.xml -------------------------------------------------------------------------------- /CAD/Design Data/Thread.xls: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Design Data/Thread.xls -------------------------------------------------------------------------------- /CAD/Design Data/ViewAnnotation.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Design Data/ViewAnnotation.xml -------------------------------------------------------------------------------- /CAD/Design Data/Weld.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Design Data/Weld.xml -------------------------------------------------------------------------------- /CAD/Design Data/WeldBead.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Design Data/WeldBead.xml -------------------------------------------------------------------------------- /CAD/LaserCameraConnector.ipt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/LaserCameraConnector.ipt -------------------------------------------------------------------------------- /CAD/LaserMountBase.ipt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/LaserMountBase.ipt -------------------------------------------------------------------------------- /CAD/LaserMountBase2.ipt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/LaserMountBase2.ipt -------------------------------------------------------------------------------- /CAD/LaserMountPole2.ipt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/LaserMountPole2.ipt -------------------------------------------------------------------------------- /CAD/LaserMountTop.ipt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/LaserMountTop.ipt -------------------------------------------------------------------------------- /CAD/OldVersions/makerscannerAssembly.ipj.bak: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/OldVersions/makerscannerAssembly.ipj.bak -------------------------------------------------------------------------------- /CAD/OldVersions/makerscannerAssembly.ipj.old.bak: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/OldVersions/makerscannerAssembly.ipj.old.bak -------------------------------------------------------------------------------- /CAD/PS3_eye_holder_from_base.ipt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/PS3_eye_holder_from_base.ipt -------------------------------------------------------------------------------- /CAD/Solidworks 2013/lasercameraconnector.SLDPRT: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Solidworks 2013/lasercameraconnector.SLDPRT -------------------------------------------------------------------------------- /CAD/Solidworks 2013/lasermountbase.SLDPRT: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Solidworks 2013/lasermountbase.SLDPRT -------------------------------------------------------------------------------- /CAD/Solidworks 2013/lasermountbase2.SLDPRT: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Solidworks 2013/lasermountbase2.SLDPRT -------------------------------------------------------------------------------- /CAD/Solidworks 2013/lasermountpole2.SLDPRT: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Solidworks 2013/lasermountpole2.SLDPRT -------------------------------------------------------------------------------- /CAD/Solidworks 2013/lasermounttop.SLDPRT: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Solidworks 2013/lasermounttop.SLDPRT -------------------------------------------------------------------------------- /CAD/Solidworks 2013/ps3_eye.SLDPRT: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Solidworks 2013/ps3_eye.SLDPRT -------------------------------------------------------------------------------- /CAD/Solidworks 2013/ps3_eye_holder_from_base.SLDPRT: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Solidworks 2013/ps3_eye_holder_from_base.SLDPRT -------------------------------------------------------------------------------- /CAD/Templates/English/ANSI (in).dwg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Templates/English/ANSI (in).dwg -------------------------------------------------------------------------------- /CAD/Templates/English/ANSI (in).idw: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Templates/English/ANSI (in).idw -------------------------------------------------------------------------------- /CAD/Templates/English/Sheet Metal (in).ipt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Templates/English/Sheet Metal (in).ipt -------------------------------------------------------------------------------- /CAD/Templates/English/Standard (in).iam: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Templates/English/Standard (in).iam -------------------------------------------------------------------------------- /CAD/Templates/English/Standard (in).ipn: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Templates/English/Standard (in).ipn -------------------------------------------------------------------------------- /CAD/Templates/English/Standard (in).ipt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Templates/English/Standard (in).ipt -------------------------------------------------------------------------------- /CAD/Templates/English/Weldment (ANSI).iam: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Templates/English/Weldment (ANSI).iam -------------------------------------------------------------------------------- /CAD/Templates/English/am_ansi.dwg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Templates/English/am_ansi.dwg -------------------------------------------------------------------------------- /CAD/Templates/Metric/ANSI (mm).dwg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Templates/Metric/ANSI (mm).dwg -------------------------------------------------------------------------------- /CAD/Templates/Metric/ANSI (mm).idw: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Templates/Metric/ANSI (mm).idw -------------------------------------------------------------------------------- /CAD/Templates/Metric/BSI.dwg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Templates/Metric/BSI.dwg -------------------------------------------------------------------------------- /CAD/Templates/Metric/BSI.idw: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Templates/Metric/BSI.idw -------------------------------------------------------------------------------- /CAD/Templates/Metric/DIN.dwg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Templates/Metric/DIN.dwg -------------------------------------------------------------------------------- /CAD/Templates/Metric/DIN.idw: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Templates/Metric/DIN.idw -------------------------------------------------------------------------------- /CAD/Templates/Metric/GB.dwg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Templates/Metric/GB.dwg -------------------------------------------------------------------------------- /CAD/Templates/Metric/GB.idw: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Templates/Metric/GB.idw -------------------------------------------------------------------------------- /CAD/Templates/Metric/GOST.dwg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Templates/Metric/GOST.dwg -------------------------------------------------------------------------------- /CAD/Templates/Metric/GOST.idw: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Templates/Metric/GOST.idw -------------------------------------------------------------------------------- /CAD/Templates/Metric/ISO.dwg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Templates/Metric/ISO.dwg -------------------------------------------------------------------------------- /CAD/Templates/Metric/ISO.idw: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Templates/Metric/ISO.idw -------------------------------------------------------------------------------- /CAD/Templates/Metric/JIS.dwg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Templates/Metric/JIS.dwg -------------------------------------------------------------------------------- /CAD/Templates/Metric/JIS.idw: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Templates/Metric/JIS.idw -------------------------------------------------------------------------------- /CAD/Templates/Metric/Sheet Metal (DIN).ipt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Templates/Metric/Sheet Metal (DIN).ipt -------------------------------------------------------------------------------- /CAD/Templates/Metric/Sheet Metal (mm).ipt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Templates/Metric/Sheet Metal (mm).ipt -------------------------------------------------------------------------------- /CAD/Templates/Metric/Standard (DIN).iam: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Templates/Metric/Standard (DIN).iam -------------------------------------------------------------------------------- /CAD/Templates/Metric/Standard (DIN).ipn: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Templates/Metric/Standard (DIN).ipn -------------------------------------------------------------------------------- /CAD/Templates/Metric/Standard (DIN).ipt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Templates/Metric/Standard (DIN).ipt -------------------------------------------------------------------------------- /CAD/Templates/Metric/Standard (mm).iam: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Templates/Metric/Standard (mm).iam -------------------------------------------------------------------------------- /CAD/Templates/Metric/Standard (mm).ipn: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Templates/Metric/Standard (mm).ipn -------------------------------------------------------------------------------- /CAD/Templates/Metric/Standard (mm).ipt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Templates/Metric/Standard (mm).ipt -------------------------------------------------------------------------------- /CAD/Templates/Metric/Weldment (ANSI - mm).iam: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Templates/Metric/Weldment (ANSI - mm).iam -------------------------------------------------------------------------------- /CAD/Templates/Metric/Weldment (BSI).iam: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Templates/Metric/Weldment (BSI).iam -------------------------------------------------------------------------------- /CAD/Templates/Metric/Weldment (DIN).iam: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Templates/Metric/Weldment (DIN).iam -------------------------------------------------------------------------------- /CAD/Templates/Metric/Weldment (GB).iam: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Templates/Metric/Weldment (GB).iam -------------------------------------------------------------------------------- /CAD/Templates/Metric/Weldment (ISO).iam: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Templates/Metric/Weldment (ISO).iam -------------------------------------------------------------------------------- /CAD/Templates/Metric/Weldment (JIS).iam: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Templates/Metric/Weldment (JIS).iam -------------------------------------------------------------------------------- /CAD/Templates/Metric/am_bsi.dwg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Templates/Metric/am_bsi.dwg -------------------------------------------------------------------------------- /CAD/Templates/Metric/am_din.dwg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Templates/Metric/am_din.dwg -------------------------------------------------------------------------------- /CAD/Templates/Metric/am_gb.dwg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Templates/Metric/am_gb.dwg -------------------------------------------------------------------------------- /CAD/Templates/Metric/am_iso.dwg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Templates/Metric/am_iso.dwg -------------------------------------------------------------------------------- /CAD/Templates/Metric/am_jis.dwg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Templates/Metric/am_jis.dwg -------------------------------------------------------------------------------- /CAD/Templates/Sheet Metal.ipt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Templates/Sheet Metal.ipt -------------------------------------------------------------------------------- /CAD/Templates/Standard.dwg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Templates/Standard.dwg -------------------------------------------------------------------------------- /CAD/Templates/Standard.iam: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Templates/Standard.iam -------------------------------------------------------------------------------- /CAD/Templates/Standard.idw: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Templates/Standard.idw -------------------------------------------------------------------------------- /CAD/Templates/Standard.ipn: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Templates/Standard.ipn -------------------------------------------------------------------------------- /CAD/Templates/Standard.ipt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Templates/Standard.ipt -------------------------------------------------------------------------------- /CAD/Templates/Weldment.iam: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/Templates/Weldment.iam -------------------------------------------------------------------------------- /CAD/makerscannerAssembly.iam: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/makerscannerAssembly.iam -------------------------------------------------------------------------------- /CAD/makerscannerAssembly.ipj: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/makerscannerAssembly.ipj -------------------------------------------------------------------------------- /CAD/ps3_eye.ipt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/ps3_eye.ipt -------------------------------------------------------------------------------- /CAD/ps3_eye_assembly2.iam: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/CAD/ps3_eye_assembly2.iam -------------------------------------------------------------------------------- /COPYING: -------------------------------------------------------------------------------- 1 | /usr/share/automake-1.15/COPYING -------------------------------------------------------------------------------- /Cameras.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2009-2010, Andrew Barry 3 | * 4 | * This file is part of MakerScanner. 5 | * 6 | * MakerScanner is free software; you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License (Version 2, June 1991) as published by 8 | * the Free Software Foundation. 9 | * 10 | * MakerScanner is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | 19 | #include "Cameras.h" 20 | 21 | // Init camera capture and get ready to start the scanning thread 22 | Cameras::Cameras(wxTextCtrl *pMemo, wxFrame *windowIn, ScanStatus *scanStatusIn, int cameraNumIn) 23 | { 24 | window = windowIn; 25 | m_MyCapture = NULL; 26 | m_LastFrame = NULL; 27 | m_pMemo = pMemo; 28 | m_CamPaused = false; 29 | m_CamPlaying = false; 30 | cameraNum = cameraNumIn; 31 | // m_CamStopped = false; 32 | distanceToReferenceWall = -1; 33 | 34 | scanStatus = scanStatusIn; 35 | 36 | myScanThread = NULL; 37 | 38 | noLaserImage = NULL; 39 | laserCenteredImage = NULL; 40 | 41 | captureThread = NULL; 42 | 43 | thresholdPixelValue = 25; 44 | 45 | brightnessFilterValue = 0.8; 46 | 47 | // filename format for the first frame from camera 0 is MyFrame0.bmp 48 | // the 12th frame is MyFrame12.bmp 49 | m_filename = wxT("MyFrame"); // This is the base name, integers will be appended for each frame captured 50 | m_fileformat = wxT(".bmp"); // can choose bmp, jpg, etc for saving images 51 | m_LastCapturedFrameFilename = wxT(""); 52 | m_FilenameIndex = wxT(""); 53 | m_NumberOfCapturedFrames = 0; 54 | 55 | //cvNamedWindow("My Camera", CV_WINDOW_AUTOSIZE); 56 | 57 | if (InitializeCamera() == true) 58 | { 59 | 60 | captureThread = new CaptureThread(window, m_MyCapture); 61 | if ( captureThread->Create() != wxTHREAD_NO_ERROR ) 62 | { 63 | m_pMemo->AppendText(wxT("\nFailed to create capture thread.")); 64 | } else { 65 | captureThread->Run(); 66 | captureThread->SetCapture(PREVIEW); 67 | } 68 | } 69 | } 70 | 71 | // kill the thread and release the camera 72 | Cameras::~Cameras() 73 | { 74 | StopCaptureThread(); 75 | 76 | if (noLaserImage) 77 | { 78 | cvReleaseImage(&noLaserImage); 79 | } 80 | 81 | if (laserCenteredImage) 82 | { 83 | cvReleaseImage(&laserCenteredImage); 84 | } 85 | 86 | if (m_MyCapture) cvReleaseCapture(&m_MyCapture); 87 | 88 | } 89 | 90 | // Attempt to connect to the camera and grab a frame 91 | bool Cameras::InitializeCamera() 92 | { 93 | //m_MyCapture = cvCreateCameraCapture(CV_CAP_ANY); 94 | m_MyCapture = cvCaptureFromCAM(cameraNum); 95 | if (!m_MyCapture) 96 | { 97 | m_pMemo->AppendText(wxT("\nFailed to connect to camera.")); 98 | return false; 99 | } 100 | cvQueryFrame(m_MyCapture); // this call is necessary to get correct capture properties 101 | 102 | // TODO: These resolution selection calls don't appear to work right now. 103 | //cvSetCaptureProperty(m_MyCapture, CV_CAP_PROP_FRAME_WIDTH, 1280); 104 | //cvSetCaptureProperty(m_MyCapture, CV_CAP_PROP_FRAME_HEIGHT, 960); 105 | m_FrameHeight = (int) cvGetCaptureProperty(m_MyCapture, CV_CAP_PROP_FRAME_HEIGHT); 106 | m_FrameWidth = (int) cvGetCaptureProperty(m_MyCapture, CV_CAP_PROP_FRAME_WIDTH); 107 | //m_FrameRate = (int) cvGetCaptureProperty(m_MyCapture, CV_CAP_PROP_FPS); 108 | wxString TempString = wxT("\nCamera online at "); 109 | TempString << m_FrameWidth << wxT("x") << m_FrameHeight << wxT("."); 110 | m_pMemo->AppendText(TempString); 111 | 112 | FrameGrab(); 113 | 114 | return true; 115 | } 116 | 117 | // Determine if we are OK to capture from the camera 118 | bool Cameras::CaptureExists() 119 | { 120 | if (!m_MyCapture) 121 | { 122 | m_pMemo->AppendText(wxT("\nCamera not initialized.")); 123 | return false; 124 | } 125 | return true; 126 | } 127 | 128 | // Grab a frame (note that this is NOT the same as the FrameGrab in ScanThread.cpp) 129 | 130 | // TODO: remove this 131 | IplImage *Cameras::FrameGrab() 132 | { 133 | if (!CaptureExists()) return NULL; 134 | for (int i=0; i < 8; i++) cvGrabFrame(m_MyCapture); // it takes a few images to get to the newest one 135 | m_LastFrame = cvRetrieveFrame(m_MyCapture); 136 | //cvShowImage("My Camera", m_LastFrame); 137 | return m_LastFrame; 138 | 139 | } 140 | 141 | // Save an image 142 | // TODO: remove this 143 | void Cameras::SaveSingleFrame() 144 | { 145 | if (!CaptureExists()) return; 146 | m_NumberOfCapturedFrames++; 147 | cvSaveImage(GetLastCapturedFrameFilename().char_str(), m_LastFrame); 148 | //m_pMemo->AppendText(wxChar((char*)GetLastCapturedFrameFilename().c_str())); 149 | //cvSaveImage("testImage.bmp", m_LastFrame); 150 | } 151 | 152 | // TODO: remove this 153 | wxString Cameras::GetLastCapturedFrameFilename() 154 | { 155 | m_LastCapturedFrameFilename = m_filename; // basic filename 156 | m_LastCapturedFrameFilename << m_NumberOfCapturedFrames; 157 | m_LastCapturedFrameFilename.Append(m_fileformat); 158 | m_pMemo->AppendText(m_LastCapturedFrameFilename); 159 | 160 | return m_LastCapturedFrameFilename; 161 | } 162 | 163 | // Start the scan thread! 164 | void Cameras::StartScan() 165 | { 166 | if (GetInitialData() == true) 167 | { 168 | myScanThread = new ScanThread(window, captureThread, scanStatus, noLaserImage, laserCenteredImage, distanceToReferenceWall); 169 | if ( myScanThread->Create() != wxTHREAD_NO_ERROR ) 170 | { 171 | m_pMemo->AppendText(wxT("\nFailed to create scan thread.")); 172 | } else { 173 | scanStatus->SetScanning(true); 174 | myScanThread->SetThresholdPixelValue(thresholdPixelValue); 175 | myScanThread->SetBrightnessThreshold(brightnessFilterValue); 176 | myScanThread->Run(); 177 | } 178 | } 179 | } 180 | 181 | // Shutdown the thread 182 | void Cameras::StopCaptureThread() 183 | { 184 | if (captureThread) 185 | { 186 | captureThread->SetCapture(STOP); 187 | captureThread->Wait(); 188 | captureThread = NULL; 189 | } 190 | } 191 | 192 | bool Cameras::GetInitialData() 193 | { 194 | // pop up the dialog box to ask the user to center the laser or give us the distance 195 | // to the reference wall. 196 | 197 | DistanceToReferenceDialog distDiag(captureThread, window, wxID_ANY); 198 | 199 | int returnNum = distDiag.ShowModal(); 200 | 201 | if (returnNum == wxID_OK) 202 | { 203 | distanceToReferenceWall = distDiag.GetWallDistance(); 204 | noLaserImage = distDiag.GetNoLaserImage(); 205 | 206 | } else if (returnNum == USER_CENTERED_LASER) 207 | { 208 | 209 | noLaserImage = distDiag.GetNoLaserImage(); 210 | laserCenteredImage = distDiag.GetLaserCenteredImage(); 211 | 212 | 213 | } else { 214 | // cancelled 215 | return false; 216 | } 217 | return true; 218 | } 219 | -------------------------------------------------------------------------------- /Cameras.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2009-2010, Andrew Barry 3 | * 4 | * This file is part of MakerScanner. 5 | * 6 | * MakerScanner is free software; you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License (Version 2, June 1991) as published by 8 | * the Free Software Foundation. 9 | * 10 | * MakerScanner is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | 19 | #ifndef CAMERAS_H 20 | #define CAMERAS_H 21 | 22 | #include 23 | 24 | #ifndef OPENCV_INCLUDES 25 | #define OPENCV_INCLUDES 26 | #include "cv.h" 27 | #include "highgui.h" 28 | #endif // OPENCV_INCLUDES 29 | 30 | 31 | #include "ScanThread.h" 32 | #include "CaptureThread.h" 33 | #include "ScanStatus.h" 34 | #include "DistanceToReferenceDialog.h" 35 | 36 | /* 37 | * Init camera capture and starts scanning thread which also supports image preview. 38 | */ 39 | 40 | class Cameras 41 | { 42 | public: 43 | // pMemo is the text box to output strings to, frame gets events sent to it. 44 | Cameras(wxTextCtrl *pMemo, wxFrame *windowIn, ScanStatus *scanStatusIn, int cameraNumIn); 45 | virtual ~Cameras(); 46 | 47 | // Attempt to connect to the camera 48 | bool InitializeCamera(); 49 | 50 | // Get a frame 51 | IplImage* FrameGrab(); 52 | 53 | IplImage* GetLastFrame() { return m_LastFrame; } 54 | void SaveSingleFrame(); 55 | wxString GetLastCapturedFrameFilename(); 56 | 57 | // Get a reference to the scan thread 58 | ScanThread* GetScanThread() { return myScanThread; } 59 | 60 | void SetThresholdPixelValue(int val) { thresholdPixelValue = val; } 61 | 62 | void SetBrightnessFilterValue(float val) { brightnessFilterValue = val; } 63 | 64 | // Start the scan thread 65 | void StartScan(); 66 | 67 | void StopCaptureThread(); 68 | 69 | bool GetInitialData(); 70 | 71 | 72 | private: 73 | // window to send events to (Cameras doesn't, but ScanThread does send events) 74 | wxFrame *window; 75 | 76 | // text control to send log events to 77 | wxTextCtrl *m_pMemo; 78 | 79 | // OpenCV camera capture object 80 | CvCapture * m_MyCapture; 81 | 82 | // contains the last frame captured 83 | IplImage *m_LastFrame; 84 | 85 | // contains the object we are scanning without the laser 86 | IplImage *noLaserImage; 87 | 88 | // contains the laser centered image 89 | IplImage *laserCenteredImage; 90 | 91 | // ScanThread that does most of the work 92 | ScanThread *myScanThread; 93 | 94 | CaptureThread *captureThread; 95 | 96 | ScanStatus *scanStatus; 97 | 98 | float distanceToReferenceWall; 99 | 100 | float brightnessFilterValue; 101 | 102 | wxString m_filename, m_CamSpacer, m_fileformat, m_FilenameIndex, m_LastCapturedFrameFilename; 103 | int m_NumberOfCapturedFrames, m_FrameHeight, m_FrameWidth, m_FrameRate, thresholdPixelValue, cameraNum; 104 | bool m_CamPaused, m_CamPlaying, m_Camped; 105 | bool CaptureExists(); 106 | 107 | }; 108 | 109 | #endif // CAMERAS_H 110 | -------------------------------------------------------------------------------- /CaptureThread.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2009-2010, Andrew Barry 3 | * 4 | * This file is part of MakerScanner. 5 | * 6 | * MakerScanner is free software; you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License (Version 2, June 1991) as published by 8 | * the Free Software Foundation. 9 | * 10 | * MakerScanner is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | 19 | 20 | #include "CaptureThread.h" 21 | 22 | DEFINE_EVENT_TYPE(IMAGE_UPDATE_EVENT) 23 | 24 | CaptureThread::CaptureThread(wxFrame *windowIn, CvCapture *captureIn) : wxThread(wxTHREAD_JOINABLE) 25 | { 26 | capturing = IDLE; 27 | window = windowIn; 28 | cvCapture = captureIn; 29 | } 30 | 31 | // called on thread quit -- free all memory 32 | void CaptureThread::OnExit() 33 | { 34 | 35 | } 36 | 37 | // Called when thread is started 38 | void* CaptureThread::Entry() 39 | { 40 | while (true) 41 | { 42 | // check to see if the thread should exit 43 | if (TestDestroy() == true) 44 | { 45 | break; 46 | } 47 | 48 | if (capturing == CAPTURE) 49 | { 50 | // get a new image 51 | CaptureFrame(); 52 | } else if (capturing == PREVIEW) 53 | { 54 | 55 | // get a new image and show it on screen 56 | CaptureFrame(); 57 | SendFrame(imageQueue.back()); 58 | } else if (capturing == IDLE) 59 | { 60 | Sleep(10); 61 | } else if (capturing == STOP) 62 | { 63 | break; 64 | } 65 | 66 | Yield(); 67 | } 68 | 69 | return NULL; 70 | } 71 | 72 | void CaptureThread::CaptureFrame() 73 | { 74 | if (!cvCapture){ 75 | //fail 76 | return; 77 | } 78 | 79 | if (imageQueue.size() > 100) 80 | { 81 | // stack too big, throw out some data 82 | imageQueue.pop(); 83 | } 84 | 85 | for (int i=0; i < 1; i++) cvGrabFrame(cvCapture); // it takes a few images to get to the newest one 86 | IplImage* lastFrame = cvRetrieveFrame(cvCapture); 87 | // cvShowImage("My Camera", LastFrame); 88 | imageQueue.push(lastFrame); 89 | 90 | } 91 | 92 | IplImage* CaptureThread::Pop() 93 | { 94 | if (imageQueue.size() <= 0) 95 | { 96 | CaptureFrame(); 97 | } 98 | 99 | IplImage *image = imageQueue.front(); 100 | 101 | if (imageQueue.size() > 1) 102 | { 103 | imageQueue.pop(); 104 | } 105 | 106 | return image; 107 | } 108 | 109 | /* 110 | * Flush the stack, allowing the user to make sure s/he gets the most 111 | * up to date image. Delete all images in the stack. 112 | */ 113 | void CaptureThread::Flush() 114 | { 115 | CaptureStatus oldCap = capturing; 116 | 117 | capturing = IDLE; 118 | 119 | while (imageQueue.size() > 0) 120 | { 121 | imageQueue.pop(); 122 | 123 | // since you should never release an image gotten by cvRetrieveFrame, 124 | // we don't need to release images here. 125 | } 126 | 127 | capturing = oldCap; 128 | } 129 | 130 | // Display the given image on the frame 131 | // Copies the image so it is safe to change it after the function call 132 | void CaptureThread::SendFrame(IplImage *frame) 133 | { 134 | if (!frame) 135 | { 136 | return; 137 | } 138 | 139 | IplImage* pDstImg; 140 | CvSize sz = cvSize(frame->width, frame->height); 141 | pDstImg = cvCreateImage(sz, 8, 3); 142 | cvZero(pDstImg); 143 | // convert the image into a 3 channel image for display on the frame 144 | if (frame->nChannels == 1) 145 | { 146 | //cvCvtColor(frame, pDstImg, CV_GRAY2BGR); 147 | 148 | // another way to convert grayscale to RGB 149 | cvMerge(frame, frame, frame, NULL, pDstImg); 150 | } else if (frame->nChannels == 3){ 151 | 152 | // opencv stores images as BGR instead of RGB so we need to convert 153 | cvConvertImage(frame, pDstImg, CV_CVTIMG_SWAP_RB); 154 | 155 | } else { 156 | // we don't know how to display this image based on its number of channels 157 | 158 | // give up 159 | cvReleaseImage( &pDstImg ); 160 | return; 161 | } 162 | 163 | wxCommandEvent event(IMAGE_UPDATE_EVENT, GetId()); 164 | 165 | // send the image in the event 166 | event.SetClientData(pDstImg); 167 | 168 | // Send the event to the frame! 169 | window->GetEventHandler()->AddPendingEvent(event); 170 | } 171 | -------------------------------------------------------------------------------- /CaptureThread.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2009-2010, Andrew Barry 3 | * 4 | * This file is part of MakerScanner. 5 | * 6 | * MakerScanner is free software; you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License (Version 2, June 1991) as published by 8 | * the Free Software Foundation. 9 | * 10 | * MakerScanner is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | 19 | #ifndef CAPTURE_THREAD_H 20 | #define CAPTURE_THREAD_H 21 | 22 | #include 23 | 24 | #include "cv.h" 25 | #include "highgui.h" 26 | 27 | #include 28 | 29 | using namespace std; 30 | 31 | /* 32 | * IDLE = don't capture, but stay alive 33 | * CAPTURE = Try to get every frame, enabling a limited-size buffer 34 | * PREVIEW = Get frames and immediatley send them to the frame via events 35 | * STOP = Leave the thread loop. Set this right before you Wait() for the thread to exit. 36 | */ 37 | enum CaptureStatus 38 | { 39 | IDLE, 40 | CAPTURE, 41 | PREVIEW, 42 | STOP 43 | }; 44 | 45 | BEGIN_DECLARE_EVENT_TYPES() 46 | DECLARE_EVENT_TYPE(IMAGE_UPDATE_EVENT, -1) 47 | END_DECLARE_EVENT_TYPES() 48 | 49 | 50 | class CaptureThread : public wxThread 51 | { 52 | public: 53 | // Constructor 54 | CaptureThread(wxFrame *windowIn, CvCapture *captureIn); 55 | 56 | // Function that is run on thread init 57 | virtual void* Entry(); 58 | 59 | // Safely close 60 | virtual void OnExit(); 61 | 62 | IplImage* Pop(); 63 | 64 | void SetCapture(CaptureStatus newStatus) { capturing = newStatus; } 65 | 66 | int GetQueueSize() { return imageQueue.size(); } 67 | void SendFrame(IplImage *frame); 68 | 69 | void Flush(); 70 | 71 | private: 72 | 73 | CaptureStatus capturing; 74 | 75 | wxFrame *window; 76 | CvCapture *cvCapture; 77 | 78 | void CaptureFrame(); 79 | 80 | queue imageQueue; 81 | 82 | 83 | 84 | }; 85 | 86 | 87 | 88 | #endif //CAPTURE_THREAD_H 89 | -------------------------------------------------------------------------------- /ChangeLog: -------------------------------------------------------------------------------- 1 | 0.3.1 (Jan. 16, 2017): Fix wxWidgets errors. 2 | 3 | 0.3.1 (Sept. 18 2010): Minor bug fix release. Fixes a number of crashes and adds the ability to switch which camera is used. Also now saves location of last scan for easier file-system navigation. 4 | 5 | 0.3 (Summer 2010): Removed requirement for USB-based laser movement. Added on-screen feedback for where the laser appears. Substantially improved vibration and movement robustness. 6 | 7 | 0.2 (Fall 2009): Substantial improvement in accuracy by moving from a calibration-only method to a reference-pixel method. Enabled .ply output. 8 | 9 | 0.1 (Fall 2008): Original version. 10 | -------------------------------------------------------------------------------- /DistanceToReferenceDialog.cpp: -------------------------------------------------------------------------------- 1 | #include "DistanceToReferenceDialog.h" 2 | 3 | //(*InternalHeaders(DistanceToReferenceDialog) 4 | #include 5 | #include 6 | //*) 7 | 8 | //(*IdInit(DistanceToReferenceDialog) 9 | const long DistanceToReferenceDialog::ID_STATICTEXT1 = wxNewId(); 10 | const long DistanceToReferenceDialog::ID_STATICLINE1 = wxNewId(); 11 | const long DistanceToReferenceDialog::ID_STATICTEXT4 = wxNewId(); 12 | const long DistanceToReferenceDialog::ID_BUTTON1 = wxNewId(); 13 | const long DistanceToReferenceDialog::ID_STATICTEXT5 = wxNewId(); 14 | const long DistanceToReferenceDialog::ID_BUTTON2 = wxNewId(); 15 | const long DistanceToReferenceDialog::ID_STATICTEXT6 = wxNewId(); 16 | const long DistanceToReferenceDialog::ID_STATICTEXT7 = wxNewId(); 17 | const long DistanceToReferenceDialog::ID_SPINCTRL1 = wxNewId(); 18 | const long DistanceToReferenceDialog::ID_PANEL1 = wxNewId(); 19 | //*) 20 | 21 | BEGIN_EVENT_TABLE(DistanceToReferenceDialog,wxDialog) 22 | //(*EventTable(DistanceToReferenceDialog) 23 | //*) 24 | END_EVENT_TABLE() 25 | 26 | DistanceToReferenceDialog::DistanceToReferenceDialog(CaptureThread *captureThreadIn, wxWindow* parent,wxWindowID id,const wxPoint& pos,const wxSize& size) 27 | { 28 | //(*Initialize(DistanceToReferenceDialog) 29 | wxFlexGridSizer* FlexGridSizer1; 30 | wxBoxSizer* BoxSizer2; 31 | wxBoxSizer* BoxSizer1; 32 | wxBoxSizer* BoxSizer5; 33 | 34 | Create(parent, wxID_ANY, _("Distance to Reference Surface"), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE, _T("wxID_ANY")); 35 | SetClientSize(wxSize(446,289)); 36 | BoxSizer1 = new wxBoxSizer(wxHORIZONTAL); 37 | Panel1 = new wxPanel(this, ID_PANEL1, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL, _T("ID_PANEL1")); 38 | BoxSizer2 = new wxBoxSizer(wxVERTICAL); 39 | BoxSizer5 = new wxBoxSizer(wxHORIZONTAL); 40 | StaticText1 = new wxStaticText(Panel1, ID_STATICTEXT1, _("Before we start, we need to know a few things:\n\n1) what your object looks like without the laser.\n2) how far away your flat reference surface is."), wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICTEXT1")); 41 | BoxSizer5->Add(StaticText1, 0, wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); 42 | BoxSizer2->Add(BoxSizer5, 0, wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); 43 | StaticLine1 = new wxStaticLine(Panel1, ID_STATICLINE1, wxDefaultPosition, wxSize(10,-1), wxLI_HORIZONTAL, _T("ID_STATICLINE1")); 44 | BoxSizer2->Add(StaticLine1, 0, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); 45 | FlexGridSizer1 = new wxFlexGridSizer(0, 2, 0, 0); 46 | lblCoverLaser = new wxStaticText(Panel1, ID_STATICTEXT4, _("1) Cover the laser"), wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICTEXT4")); 47 | FlexGridSizer1->Add(lblCoverLaser, 1, wxALL|wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL, 5); 48 | butLaserCovered = new wxButton(Panel1, ID_BUTTON1, _("Done"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_BUTTON1")); 49 | FlexGridSizer1->Add(butLaserCovered, 0, wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); 50 | lblCenterLaser = new wxStaticText(Panel1, ID_STATICTEXT5, _("2) Center the laser"), wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICTEXT5")); 51 | lblCenterLaser->Disable(); 52 | FlexGridSizer1->Add(lblCenterLaser, 1, wxALL|wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL, 5); 53 | butLaserCentered = new wxButton(Panel1, ID_BUTTON2, _("Done"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_BUTTON2")); 54 | butLaserCentered->Disable(); 55 | FlexGridSizer1->Add(butLaserCentered, 1, wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); 56 | lblOr = new wxStaticText(Panel1, ID_STATICTEXT6, _("or"), wxDefaultPosition, wxSize(45,17), 0, _T("ID_STATICTEXT6")); 57 | lblOr->Disable(); 58 | FlexGridSizer1->Add(lblOr, 1, wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); 59 | FlexGridSizer1->Add(-1,-1,1, wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); 60 | lblEnterDistance = new wxStaticText(Panel1, ID_STATICTEXT7, _("Enter the distance to the\nflat reference wall (cm):"), wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICTEXT7")); 61 | lblEnterDistance->Disable(); 62 | FlexGridSizer1->Add(lblEnterDistance, 1, wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); 63 | spinDistance = new wxSpinCtrl(Panel1, ID_SPINCTRL1, _T("50"), wxDefaultPosition, wxSize(79,27), 0, 0, 1000, 50, _T("ID_SPINCTRL1")); 64 | spinDistance->SetValue(_T("50")); 65 | spinDistance->Disable(); 66 | FlexGridSizer1->Add(spinDistance, 0, wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); 67 | FlexGridSizer1->Add(-1,-1,1, wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); 68 | butDistanceEntered = new wxButton(Panel1, wxID_OK, _("Done"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("wxID_OK")); 69 | butDistanceEntered->Disable(); 70 | FlexGridSizer1->Add(butDistanceEntered, 1, wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); 71 | BoxSizer2->Add(FlexGridSizer1, 1, wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); 72 | Panel1->SetSizer(BoxSizer2); 73 | BoxSizer2->Fit(Panel1); 74 | BoxSizer2->SetSizeHints(Panel1); 75 | BoxSizer1->Add(Panel1, 1, wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); 76 | SetSizer(BoxSizer1); 77 | BoxSizer1->SetSizeHints(this); 78 | 79 | Connect(ID_BUTTON1,wxEVT_COMMAND_BUTTON_CLICKED,(wxObjectEventFunction)&DistanceToReferenceDialog::OnButLaserCoveredClick); 80 | Connect(ID_BUTTON2,wxEVT_COMMAND_BUTTON_CLICKED,(wxObjectEventFunction)&DistanceToReferenceDialog::OnButLaserCenteredClick); 81 | //*) 82 | 83 | butLaserCovered->SetFocus(); 84 | captureThread = captureThreadIn; 85 | } 86 | 87 | DistanceToReferenceDialog::~DistanceToReferenceDialog() 88 | { 89 | //(*Destroy(DistanceToReferenceDialog) 90 | //*) 91 | } 92 | 93 | 94 | void DistanceToReferenceDialog::OnButLaserCenteredClick(wxCommandEvent& event) 95 | { 96 | captureThread->Flush(); 97 | IplImage *laserCenteredTemp = captureThread->Pop(); 98 | 99 | laserCentered = cvCloneImage(laserCenteredTemp); 100 | 101 | EndModal(USER_CENTERED_LASER); 102 | } 103 | 104 | 105 | bool DistanceToReferenceDialog::TransferDataFromWindow() 106 | { 107 | distance = spinDistance->GetValue(); 108 | 109 | return true; 110 | } 111 | 112 | void DistanceToReferenceDialog::OnButLaserCoveredClick(wxCommandEvent& event) 113 | { 114 | captureThread->Flush(); 115 | IplImage *tempNoLaserImage = captureThread->Pop(); 116 | 117 | noLaserImage = cvCloneImage(tempNoLaserImage); 118 | 119 | 120 | butLaserCovered->Enable(false); 121 | lblCoverLaser->Enable(false); 122 | 123 | lblCenterLaser->Enable(true); 124 | butLaserCentered->Enable(true); 125 | lblOr->Enable(true); 126 | lblEnterDistance->Enable(true); 127 | spinDistance->Enable(true); 128 | butDistanceEntered->Enable(true); 129 | 130 | butLaserCentered->SetFocus(); 131 | 132 | } 133 | 134 | 135 | -------------------------------------------------------------------------------- /DistanceToReferenceDialog.h: -------------------------------------------------------------------------------- 1 | #ifndef DISTANCETOREFERENCEDIALOG_H 2 | #define DISTANCETOREFERENCEDIALOG_H 3 | 4 | //(*Headers(DistanceToReferenceDialog) 5 | #include 6 | #include 7 | #include 8 | #include 9 | #include 10 | #include 11 | #include 12 | //*) 13 | 14 | #define USER_CENTERED_LASER 999 15 | 16 | #include "CaptureThread.h" 17 | 18 | class DistanceToReferenceDialog: public wxDialog 19 | { 20 | public: 21 | 22 | DistanceToReferenceDialog(CaptureThread *captureThreadIn, wxWindow* parent,wxWindowID id=wxID_ANY,const wxPoint& pos=wxDefaultPosition,const wxSize& size=wxDefaultSize); 23 | virtual ~DistanceToReferenceDialog(); 24 | 25 | //(*Declarations(DistanceToReferenceDialog) 26 | wxPanel* Panel1; 27 | wxButton* butLaserCentered; 28 | wxStaticText* lblOr; 29 | wxStaticText* lblCoverLaser; 30 | wxStaticText* StaticText1; 31 | wxStaticLine* StaticLine1; 32 | wxButton* butLaserCovered; 33 | wxStaticText* lblCenterLaser; 34 | wxStaticText* lblEnterDistance; 35 | wxSpinCtrl* spinDistance; 36 | wxButton* butDistanceEntered; 37 | //*) 38 | 39 | float GetWallDistance() { return distance; } 40 | IplImage* GetLaserCenteredImage() { return laserCentered; } 41 | IplImage* GetNoLaserImage() { return noLaserImage; } 42 | 43 | virtual bool TransferDataFromWindow(); 44 | 45 | protected: 46 | 47 | //(*Identifiers(DistanceToReferenceDialog) 48 | static const long ID_STATICTEXT1; 49 | static const long ID_STATICLINE1; 50 | static const long ID_STATICTEXT4; 51 | static const long ID_BUTTON1; 52 | static const long ID_STATICTEXT5; 53 | static const long ID_BUTTON2; 54 | static const long ID_STATICTEXT6; 55 | static const long ID_STATICTEXT7; 56 | static const long ID_SPINCTRL1; 57 | static const long ID_PANEL1; 58 | //*) 59 | 60 | private: 61 | 62 | //(*Handlers(DistanceToReferenceDialog) 63 | void OnButLaserCenteredClick(wxCommandEvent& event); 64 | void OnButLaserCoveredClick(wxCommandEvent& event); 65 | //*) 66 | 67 | float distance; 68 | IplImage *noLaserImage, *laserCentered; 69 | CaptureThread *captureThread; 70 | 71 | DECLARE_EVENT_TABLE() 72 | }; 73 | 74 | #endif 75 | -------------------------------------------------------------------------------- /Documentation/3DMakerScannerMath.vsdx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/Documentation/3DMakerScannerMath.vsdx -------------------------------------------------------------------------------- /Documentation/3DMakerScannerMath.vsdx.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/Documentation/3DMakerScannerMath.vsdx.pdf -------------------------------------------------------------------------------- /INSTALL: -------------------------------------------------------------------------------- 1 | See http://www.makerscanner.com/ for instructions. 2 | 3 | -------------------------------------------------------------------------------- /IndividualPixels.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2009-2010, Andrew Barry 3 | * 4 | * This file is part of MakerScanner. 5 | * 6 | * MakerScanner is free software; you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License (Version 2, June 1991) as published by 8 | * the Free Software Foundation. 9 | * 10 | * MakerScanner is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | 19 | #ifndef INDIVIDUAL_PIXELS 20 | #define INDIVIDUAL_PIXELS 21 | 22 | #ifndef OPENCV_INCLUDES 23 | #define OPENCV_INCLUDES 24 | #include "cv.h" 25 | #include "highgui.h" 26 | #endif // OPENCV_INCLUDES 27 | 28 | /* 29 | * Standard code for getting individual pixel access -- RgbImage, BwImage, RgbImage Float, and BwImageFloat 30 | * Nothing especailly novel here... 31 | */ 32 | 33 | template class Pixels 34 | { 35 | private: 36 | IplImage* imgp; 37 | public: 38 | Pixels(IplImage* img=0) {imgp=img;} 39 | ~Pixels(){imgp=0;} 40 | void operator=(IplImage* img) {imgp=img;} 41 | inline T* operator[](const int rowIndx) { 42 | return ((T *)(imgp->imageData + rowIndx*imgp->widthStep));} 43 | }; 44 | 45 | typedef struct{ 46 | unsigned char b,g,r; 47 | } RgbPixel; 48 | 49 | typedef struct{ 50 | float b,g,r; 51 | } RgbPixelFloat; 52 | 53 | typedef Pixels RgbImage; 54 | typedef Pixels RgbImageFloat; 55 | typedef Pixels BwImage; 56 | typedef Pixels BwImageFloat; 57 | 58 | #endif // INDIVIDUAL_PIXELS 59 | 60 | /* How to use this class 61 | // refer to individual pixels as shown below. 62 | // when they are changed in the class's image, they change in the parameter image as well. 63 | // http://www.cs.iit.edu/~agam/cs512/lect-notes/opencv-intro/opencv-intro.html#SECTION00053000000000000000 64 | # For a single-channel byte image: 65 | 66 | IplImage* img=cvCreateImage(cvSize(640,480),IPL_DEPTH_8U,1); 67 | BwImage imgA(img); 68 | imgA[i][j] = 111; 69 | 70 | # For a multi-channel byte image: 71 | 72 | IplImage* img=cvCreateImage(cvSize(640,480),IPL_DEPTH_8U,3); 73 | RgbImage imgA(img); 74 | imgA[i][j].b = 111; 75 | imgA[i][j].g = 111; 76 | imgA[i][j].r = 111; 77 | 78 | # For a multi-channel float image: 79 | 80 | IplImage* img=cvCreateImage(cvSize(640,480),IPL_DEPTH_32F,3); 81 | RgbImageFloat imgA(img); 82 | imgA[i][j].b = 111; 83 | imgA[i][j].g = 111; 84 | imgA[i][j].r = 111; 85 | 86 | */ 87 | -------------------------------------------------------------------------------- /Makefile.am: -------------------------------------------------------------------------------- 1 | ##Process this file with automake to create Makefile.in 2 | 3 | bin_PROGRAMS = makerscanner 4 | makerscanner_SOURCES = ActiveStereoApp.cpp CaptureThread.h ScanStatus.h ActiveStereoApp.h DistanceToReferenceDialog.cpp ScanThread.cpp ActiveStereoMain.cpp DistanceToReferenceDialog.h ScanThread.h ActiveStereoMain.h IndividualPixels.h Cameras.cpp PointCloud.cpp Cameras.h PointCloud.h camview.cpp PointCloudPoint.cpp camview.h PointCloudPoint.h SetHorz.h CaptureThread.cpp ScanStatus.cpp 5 | 6 | EXTRA_DIST = laserIcon.png 7 | pixmapdir = $(datadir)/pixmaps 8 | pixmap_DATA = laserIcon.png 9 | 10 | 11 | 12 | ##AM_CPPFLAGS = $(DEPS_CFLAGS) -DPIXMAPS_DIR=\""$(datadir)/pixmaps"\" 13 | 14 | ## Add the OpenCV flags that we got from PKG_CHECK_MODULES([OPENCV], [opencv >= 2.0]) in configure.ac 15 | AM_CPPFLAGS = $(OPENCV_CFLAGS) $(DEPS_CFLAGS) -DPIXMAPS_DIR=\""$(datadir)/pixmaps"\" 16 | 17 | ## Add the OpenCV linking libraries that we got from PKG_CHECK_MODULES([OPENCV], [opencv >= 2.0]) in configure.ac 18 | makerscanner_LDADD = $(OPENCV_LIBS) 19 | ##libfoo_la_LDFLAGS = -version-info @version_info@ 20 | 21 | -------------------------------------------------------------------------------- /MakerscannerWin3.cbp: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 121 | 122 | -------------------------------------------------------------------------------- /NEWS: -------------------------------------------------------------------------------- 1 | See ChangeLog. 2 | -------------------------------------------------------------------------------- /PointCloud.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2009-2010, Andrew Barry 3 | * 4 | * This file is part of MakerScanner. 5 | * 6 | * MakerScanner is free software; you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License (Version 2, June 1991) as published by 8 | * the Free Software Foundation. 9 | * 10 | * MakerScanner is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | 19 | #include "PointCloud.h" 20 | 21 | #include 22 | 23 | // define a linked list of PointCloudPoints 24 | WX_DEFINE_LIST(ListOfCloudPoints); 25 | 26 | // PointCloud holds PointCloudPoints which are individual lines in a pointcloud file 27 | // Points are identified by height in the image and by laser position 28 | PointCloud::PointCloud() 29 | { 30 | cloudMap = new CloudMap(); 31 | numberOfPoints = 0; 32 | } 33 | 34 | // Destructor -- clear the hash map and delete all PointCloudPoints 35 | PointCloud::~PointCloud() 36 | { 37 | 38 | // empty the hash map 39 | 40 | CloudMap::iterator it; 41 | 42 | for( it = cloudMap->begin(); it != cloudMap->end(); ++it ) 43 | { 44 | delete it->second; 45 | } 46 | 47 | delete cloudMap; 48 | } 49 | 50 | // The points are uniquely identified by h and laserPos. 51 | // Index is -- laserPos * 1000 + h yielding an set size of 255*1000 + 1000 = 256,000 52 | // Each hash map container holds a linked list of PointCloudPoints, which can be combined in an average 53 | // for that point 54 | int PointCloud::GetKey(int h, int laserPos) 55 | { 56 | return laserPos * 1000 + h; 57 | } 58 | 59 | // Helper function to add a point that creates the PointCloudPoint for you 60 | void PointCloud::AddPoint(double dist, double theta, double phi, int r, int g, int b, int w, int h, int laserPos) 61 | { 62 | // make a new point 63 | PointCloudPoint *newPoint = new PointCloudPoint(dist, theta, phi, r, g, b, w, h, laserPos); 64 | AddPoint(newPoint); 65 | } 66 | 67 | // Add a point to the point cloud. If there is not already a point at this h, and laserPos, make 68 | // a new linked list. Otherwise, add to the linked list that we already have for this location 69 | void PointCloud::AddPoint(PointCloudPoint *point) 70 | { 71 | // first, get the list 72 | ListOfCloudPoints *thisList; 73 | 74 | if (cloudMap->find(GetKey(point->h, point->laserPosition)) == cloudMap->end()) 75 | { 76 | // this is a new point, create a new list 77 | thisList = new ListOfCloudPoints(); 78 | (*cloudMap)[GetKey(point->h, point->laserPosition)] = thisList; 79 | numberOfPoints ++; 80 | 81 | } else { 82 | thisList = (*cloudMap)[GetKey(point->h, point->laserPosition)]; 83 | } 84 | 85 | // add the point to the list 86 | 87 | thisList->Append(point); 88 | 89 | 90 | } 91 | 92 | // Return a .ply file containing the entire point cloud (large string!) 93 | wxString PointCloud::GetPointCloudPly() 94 | { 95 | wxString cloudString = wxT(""); 96 | 97 | wxString headerString = wxT("ply"); 98 | headerString += wxT("\nformat ascii 1.0"); 99 | 100 | headerString += wxT("\nelement vertex "); 101 | headerString << numberOfPoints; 102 | 103 | headerString += wxT("\nproperty float x"); 104 | headerString += wxT("\nproperty float y"); 105 | headerString += wxT("\nproperty float z"); 106 | headerString += wxT("\nproperty uchar diffuse_red"); 107 | headerString += wxT("\nproperty uchar diffuse_green"); 108 | headerString += wxT("\nproperty uchar diffuse_blue"); 109 | headerString += wxT("\nelement face 0"); 110 | headerString += wxT("\nproperty list uchar int vertex_indices"); 111 | headerString += wxT("\nend_header"); 112 | 113 | CloudMap::iterator it; 114 | ListOfCloudPoints *thisList; 115 | 116 | for( it = cloudMap->begin(); it != cloudMap->end(); ++it ) 117 | { 118 | thisList = it->second; 119 | 120 | PointCloudPoint thisPoint = AverageList(thisList); 121 | 122 | cloudString += wxT("\n") + thisPoint.GetPlyString(); 123 | 124 | } 125 | 126 | return headerString + cloudString; 127 | } 128 | 129 | // average a linked list of points to handle a case where we have more than one point per h, laserPos 130 | PointCloudPoint PointCloud::AverageList(ListOfCloudPoints *thisList) 131 | { 132 | double number = double(thisList->GetCount()); 133 | 134 | double sumDist = 0; 135 | 136 | PointCloudPoint *point = NULL; 137 | 138 | // iterate over the list and average all values 139 | for ( ListOfCloudPoints::Node *node = thisList->GetFirst(); node; node = node->GetNext() ) 140 | { 141 | 142 | point = node->GetData(); 143 | sumDist += point->dist; 144 | } 145 | 146 | if (point == NULL) 147 | { 148 | return PointCloudPoint(0, 0, 0, 0, 0, 0, 0, 0, 0); 149 | } 150 | 151 | return PointCloudPoint(sumDist/number, point->theta, point->phi, point->r, point->g, point->b, point->w, point->h, point->laserPosition); 152 | 153 | } 154 | -------------------------------------------------------------------------------- /PointCloud.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2009-2010, Andrew Barry 3 | * 4 | * This file is part of MakerScanner. 5 | * 6 | * MakerScanner is free software; you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License (Version 2, June 1991) as published by 8 | * the Free Software Foundation. 9 | * 10 | * MakerScanner is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | 19 | #ifndef POINT_CLOUD_H 20 | #define POINT_CLOUD_H 21 | 22 | #include "PointCloudPoint.h" 23 | 24 | #include 25 | #include 26 | #include 27 | 28 | WX_DECLARE_LIST(PointCloudPoint, ListOfCloudPoints); 29 | 30 | WX_DECLARE_HASH_MAP( int, ListOfCloudPoints*, wxIntegerHash, wxIntegerEqual, CloudMap ); 31 | 32 | /* 33 | * This class holds point cloud data that can be fitlered and printed to a .ply file 34 | */ 35 | 36 | class PointCloud 37 | { 38 | public: 39 | PointCloud(); 40 | ~PointCloud(); 41 | void AddPoint(double dist, double theta, double phi, int r, int g, int b, int w, int h, int laserPos); 42 | void AddPoint(PointCloudPoint *point); 43 | wxString GetPointCloudPly(); 44 | 45 | private: 46 | // The points are uniquely identified by h and laserPos. 47 | // Index is -- laserPos * 1000 + h yielding an set size of 255*1000 + 1000 = 256,000 48 | // Each hash map container holds a linked list of PointCloudPoints, which can be combined in an average 49 | // for that point 50 | 51 | int GetKey(int h, int laserPos); 52 | PointCloudPoint AverageList(ListOfCloudPoints *thisList); 53 | 54 | CloudMap *cloudMap; 55 | int numberOfPoints; 56 | 57 | 58 | 59 | 60 | }; 61 | 62 | 63 | #endif 64 | -------------------------------------------------------------------------------- /PointCloudPoint.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2009-2010, Andrew Barry 3 | * 4 | * This file is part of MakerScanner. 5 | * 6 | * MakerScanner is free software; you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License (Version 2, June 1991) as published by 8 | * the Free Software Foundation. 9 | * 10 | * MakerScanner is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | 19 | #include "PointCloudPoint.h" 20 | 21 | // copy constructor 22 | PointCloudPoint::PointCloudPoint(PointCloudPoint *point) 23 | { 24 | dist = point->dist; 25 | theta = point->theta; 26 | phi = point->phi; 27 | 28 | r = point->r; 29 | g = point->g; 30 | b = point->b; 31 | w = point->w; 32 | h = point->h; 33 | laserPosition = point->laserPosition; 34 | } 35 | 36 | // Generates the point cloud string for this point (one line) 37 | wxString PointCloudPoint::GetPlyString() 38 | { 39 | 40 | double pxDist = dist; 41 | 42 | 43 | double x, y, z; 44 | 45 | x = pxDist * tan(theta); 46 | y = pxDist; 47 | z = pxDist * tan(phi); 48 | 49 | wxString xString = wxT(""); 50 | xString << x; 51 | 52 | wxString yString = wxT(""); 53 | yString << y; 54 | 55 | wxString zString = wxT(""); 56 | zString << z; 57 | 58 | wxString rString = wxT(""); 59 | rString << r; 60 | 61 | wxString gString = wxT(""); 62 | gString << g; 63 | 64 | wxString bString = wxT(""); 65 | bString << b; 66 | 67 | return xString + wxT(" ") + yString + wxT(" ") + zString + wxT(" ") + rString + wxT(" ") 68 | + gString + wxT(" ") + bString; 69 | 70 | } 71 | -------------------------------------------------------------------------------- /PointCloudPoint.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2009-2010, Andrew Barry 3 | * 4 | * This file is part of MakerScanner. 5 | * 6 | * MakerScanner is free software; you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License (Version 2, June 1991) as published by 8 | * the Free Software Foundation. 9 | * 10 | * MakerScanner is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | 19 | #ifndef POINT_CLOUD_POINT_H 20 | #define POINT_CLOUD_POINT_H 21 | 22 | #include 23 | #include 24 | 25 | /* 26 | * Holds a point cloud point and can generate a .ply point cloud string (one line of the file) for this point. 27 | */ 28 | 29 | class PointCloudPoint 30 | { 31 | public: 32 | PointCloudPoint(double distIn, double thetaIn, double phiIn, int rIn, int gIn, int bIn, int wIn, int hIn, int laserPosIn) 33 | { 34 | dist = distIn; 35 | theta = thetaIn; 36 | phi = phiIn; 37 | 38 | r = rIn; 39 | g = gIn; 40 | b = bIn; 41 | w = wIn; 42 | h = hIn; 43 | laserPosition = laserPosIn; 44 | } 45 | PointCloudPoint(PointCloudPoint *point); 46 | 47 | // Generates the point cloud string for this point (one line) 48 | wxString GetPlyString(); 49 | 50 | double dist, theta, phi; 51 | int r, g, b, w, h, laserPosition; 52 | }; 53 | 54 | #endif 55 | -------------------------------------------------------------------------------- /README: -------------------------------------------------------------------------------- 1 | README.md -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | makerscanner 2 | ============ 3 | 4 | Software for the makerscanner. See http://www.makerscanner.com/ for details and instructions. 5 | 6 | 7 | To build from source on Linux: 8 | 9 | sudo apt-get install libwxgtk3.0-dev libgsl0-dev libopencv-dev 10 | (or equivalent for your system) 11 | 12 | ./bootstrap.sh 13 | ./configure 14 | make 15 | sudo make install 16 | 17 | -------------------------------------------------------------------------------- /ScanStatus.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2009-2010, Andrew Barry 3 | * 4 | * This file is part of MakerScanner. 5 | * 6 | * MakerScanner is free software; you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License (Version 2, June 1991) as published by 8 | * the Free Software Foundation. 9 | * 10 | * MakerScanner is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | 19 | 20 | #include "ScanStatus.h" 21 | 22 | ScanStatus::ScanStatus() 23 | { 24 | scanning = false; 25 | } 26 | 27 | ScanStatus::~ScanStatus() 28 | { 29 | 30 | } 31 | -------------------------------------------------------------------------------- /ScanStatus.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2009-2010, Andrew Barry 3 | * 4 | * This file is part of MakerScanner. 5 | * 6 | * MakerScanner is free software; you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License (Version 2, June 1991) as published by 8 | * the Free Software Foundation. 9 | * 10 | * MakerScanner is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | 19 | #ifndef SCAN_STATUS_H 20 | #define SCAN_STATUS_H 21 | 22 | class ScanStatus 23 | { 24 | public: 25 | ScanStatus(); 26 | ~ScanStatus(); 27 | 28 | void SetScanning(bool newScanning) { scanning = newScanning; } 29 | 30 | bool GetScanning() { return scanning; } 31 | 32 | 33 | private: 34 | 35 | bool scanning; 36 | }; 37 | 38 | #endif //SCAN_STATUS_H 39 | -------------------------------------------------------------------------------- /ScanThread.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2009-2010, Andrew Barry 3 | * 4 | * This file is part of MakerScanner. 5 | * 6 | * MakerScanner is free software; you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License (Version 2, June 1991) as published by 8 | * the Free Software Foundation. 9 | * 10 | * MakerScanner is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | 19 | #ifndef SCAN_THREAD_H 20 | #define SCAN_THREAD_H 21 | 22 | #include 23 | #include 24 | #include 25 | #include 26 | #include 27 | #include "cv.h" 28 | #include "highgui.h" 29 | #include "IndividualPixels.h" 30 | 31 | #include 32 | #include 33 | 34 | #include "PointCloud.h" 35 | #include "CaptureThread.h" 36 | #include "ScanStatus.h" 37 | 38 | // include USB code 39 | extern "C" 40 | { 41 | #include "SetHorz.h" 42 | } 43 | 44 | #define MAX_X 640 // TODO: remove this define and auto-detect image size 45 | #define MAX_Y 480 // TODO: remove this define and auto-detect image size 46 | 47 | #include 48 | 49 | using namespace std; 50 | 51 | 52 | // clear event types in the header of the source file 53 | BEGIN_DECLARE_EVENT_TYPES() 54 | DECLARE_EVENT_TYPE(DISPLAY_TEXT_EVENT, -2) 55 | DECLARE_EVENT_TYPE(WRITE_TO_FILE_EVENT, -6) 56 | DECLARE_EVENT_TYPE(SCAN_PROGRESS_EVENT, -7) 57 | DECLARE_EVENT_TYPE(SCAN_FINISHED_EVENT, -8) 58 | END_DECLARE_EVENT_TYPES() 59 | 60 | // Thread that performs image capture and point cloud creation 61 | // Uses events to communicate with GUI thread for frame and disk interactions 62 | class ScanThread : public wxThread 63 | { 64 | public: 65 | // Constructor 66 | ScanThread(wxFrame *windowIn, CaptureThread *captureIn, ScanStatus *scanStatusIn, IplImage *noLaserIn, 67 | IplImage *laserCenteredIn, float distanceToReferenceIn); 68 | 69 | // Function that is run on thread init 70 | virtual void* Entry(); 71 | 72 | // TODO: Remove 73 | void SetPixelRange(int Xmin = 0, int Ymin = 0, int Xmax = MAX_X, int Ymax = MAX_Y); 74 | 75 | // set image subtraction threshold value 76 | void SetThresholdPixelValue(int thres) { minPxVal = thres; } 77 | 78 | float FindReferenceLaser(IplImage *img); 79 | 80 | void SetBrightnessThreshold(float newThreshold) { brightnessThreshold = newThreshold; } 81 | 82 | private: 83 | 84 | // Find the laser by subtracting noLaser (class variable) and withLaser images 85 | // the compute distances and add to the pointcloud object 86 | vector* FindLaser2(IplImage *withLaser); 87 | 88 | // send an UpdateImage event to the frame dialog 89 | //void DisplayImage(IplImage *frame); 90 | 91 | // send a display text event to the frame 92 | void DisplayText(wxString text); 93 | 94 | // send a write to file event to the frame 95 | void WriteToFile(wxString str); 96 | 97 | // write the current pointcloud to a file 98 | void WritePointCloudFile(); 99 | 100 | // compute distance to pixel based on width reference pixel position and the laser pixel position 101 | double PixelToDistance2(float laserCenter, float widthReference); 102 | 103 | // Add a point to the pointcloud, with some filtering 104 | void AddPointCloudPoint(PointCloudPoint *newPoint, BwImage laserHitPx, BwImage laserFilterPx); 105 | 106 | // point cloud points for storing filtering 107 | PointCloudPoint *holdingPointBefore; 108 | PointCloudPoint *holdingPoint; 109 | 110 | // Send a scan progress event to update the frame progress bar 111 | void SendScanProgress(int laserPos); 112 | 113 | // Send a scan finished event to the frame 114 | void SendScanFinishedEvent(); 115 | 116 | // Safely close 117 | void OnExit(); 118 | 119 | void AddPointcloudPoints(vector *laserPos); 120 | 121 | // give the laser locations, find the reference position in the top 25 pixels 122 | float GetReferenceLaserLocation(vector *laserCenterPx); 123 | 124 | // Computes the distance to the reference wall based on the member variables 125 | // noLaser image and laserCentered image, which must already be set when this is called 126 | float GetDistanceToReferenceWall(vector *laserCenterPx); 127 | 128 | void DisplayLaserPx(vector *laserPx); 129 | 130 | float FindBrightestPointInRow(BwImage subPx, int row, int rowWidth); 131 | 132 | // ---- variables ---- // 133 | 134 | // the frame we send events to 135 | wxFrame *window; 136 | 137 | // the thread that is running the camera capture 138 | CaptureThread *captureThread; 139 | 140 | // current distance from flat reference 141 | double pixelsPerCmOnFlatReference; 142 | 143 | // our current pointcloud 144 | PointCloud *pointCloud; 145 | 146 | // Object that allows us to communicate between the frame 147 | ScanStatus *scanStatus; 148 | 149 | // values sent to us from the frame 150 | int laserIncrement, laserMaxLeft, laserMaxRight, minPxVal; 151 | 152 | // relative amount of brightness needed to be counted as a valid point 153 | // ranges from 0-1.0. Valid points have brightness > brightnessThreshold * topBrightness 154 | float brightnessThreshold; 155 | 156 | IplImage *noLaser, *laserCentered, *noLaserBlur, *coveredImage; 157 | 158 | bool scanning, determinedTargetDistance; 159 | int m_Xmin, m_Ymin, m_Xmax, m_Ymax; 160 | 161 | // if true, this is the first line we are doing in this scan 162 | bool m_firstLaserPosition; 163 | 164 | // distance from flat reference in cm 165 | float distanceFromFlatReference; 166 | 167 | }; 168 | 169 | #endif 170 | -------------------------------------------------------------------------------- /SetConfig.c: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2009-2010, Andrew Barry 3 | * 4 | * This file is part of MakerScanner. 5 | * 6 | * MakerScanner is free software; you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License (Version 2, June 1991) as published by 8 | * the Free Software Foundation. 9 | * 10 | * MakerScanner is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | 19 | #include 20 | #include 21 | 22 | #include "SetConfig.h" 23 | 24 | #define FALSE 0 25 | #define TRUE 1 26 | 27 | // return codes 28 | // 0: success 29 | // -1: No matching device found 30 | // -2: Unable to send SET_CONFIGURATION request 31 | 32 | int SetConfig() { 33 | struct usb_bus *bus; 34 | struct usb_device *dev; 35 | usb_dev_handle *udev; 36 | int dev_found, ret; 37 | char buffer[8]; 38 | 39 | usb_init(); 40 | 41 | usb_find_busses(); 42 | usb_find_devices(); 43 | 44 | udev = NULL; 45 | dev_found = FALSE; 46 | for (bus = usb_get_busses(); bus && !dev_found; bus = bus->next) { 47 | for (dev = bus->devices; dev && !dev_found; dev = dev->next) { 48 | if ((dev->descriptor.idVendor == 0x6666) && (dev->descriptor.idProduct == 0x0003)) { 49 | dev_found = TRUE; 50 | udev = usb_open(dev); 51 | } 52 | } 53 | } 54 | if (!dev_found) { 55 | printf("No matching device found...\n"); 56 | return -1; 57 | } 58 | if (udev) { 59 | ret = usb_control_msg(udev, USB_TYPE_STANDARD | USB_RECIP_DEVICE, USB_REQ_SET_CONFIGURATION, 1, 0, buffer, 0, 100); 60 | if (ret < 0) { 61 | printf("Unable to send SET_CONFIGURATION standard request, ret = %d...\n", ret); 62 | return -2; 63 | } 64 | usb_close(udev); 65 | } 66 | return 0; 67 | } 68 | -------------------------------------------------------------------------------- /SetConfig.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2009-2010, Andrew Barry 3 | * 4 | * This file is part of MakerScanner. 5 | * 6 | * MakerScanner is free software; you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License (Version 2, June 1991) as published by 8 | * the Free Software Foundation. 9 | * 10 | * MakerScanner is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | 19 | #ifndef SET_CONFIG_H 20 | #define SET_CONFIG_H 21 | 22 | // USB set config control header file 23 | 24 | int SetConfig(); 25 | 26 | #endif 27 | -------------------------------------------------------------------------------- /SetHorz.c: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2009-2010, Andrew Barry 3 | * 4 | * This file is part of MakerScanner. 5 | * 6 | * MakerScanner is free software; you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License (Version 2, June 1991) as published by 8 | * the Free Software Foundation. 9 | * 10 | * MakerScanner is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | 19 | /* 20 | * Standard USB calls to the PIC. This comes from http://ece.olin.edu/poe/ 21 | */ 22 | 23 | #include 24 | #include 25 | 26 | #include "SetHorz.h" 27 | 28 | #define FALSE 0 29 | #define TRUE 1 30 | 31 | #define SET_DUTY 0x04 32 | #define SERVO_POS 0x05 33 | #define LASER_INTENSITY 0x06 34 | 35 | #define HORIZ_MIN 0 36 | #define HORIZ_MAX 255 37 | 38 | /* 39 | * Return codes: 40 | * 0 = success 41 | * -1 = no matching device 42 | * -2 = unable to send vendor request 43 | * -3 = illegal offset 44 | */ 45 | 46 | int LaserIntensity = DEFAULT_LASER_INTENSITY; 47 | 48 | // Send the USB call for moving the mirror 49 | int SetHorz(int horz) 50 | { 51 | horz = HORIZ_MAX - horz; 52 | if ((horz < HORIZ_MIN) || (horz > HORIZ_MAX)) { 53 | printf("Horizontal laser offset specified, (%d), is out of range (0 - 155).\n", horz); 54 | return -3; 55 | } 56 | return SetUSB(horz, SET_DUTY); 57 | } 58 | 59 | // Move the servo 60 | int SetServo(int servo) 61 | { 62 | if (servo < 50 || servo > 150) { 63 | printf("Illegal offset (%d) specified.\n", servo); 64 | return -3; 65 | } 66 | return SetUSB(servo, SERVO_POS); 67 | } 68 | 69 | // Change the laser intensity 70 | int SendLaserIntensity(int intensity) 71 | { 72 | if (intensity < 0 || intensity > 100) 73 | { 74 | printf("Intensity specified, (%d), is out of range (0-100).\n", intensity); 75 | return -3; 76 | } 77 | if (intensity == 0) intensity = LASER_ZERO_VOLTS_VALUE; 78 | else intensity = (int) ( (((float) intensity) * (float) LASER_INTENSITY_RANGE) + (float) LASER_MIN_VALUE_TO_TURN_ON + 0.5); 79 | 80 | return SetUSB(intensity, LASER_INTENSITY); 81 | } 82 | 83 | void SetLaserIntensity(int intensity) { LaserIntensity = intensity; } 84 | 85 | int GetLaserIntensity() { return LaserIntensity; } 86 | 87 | // USB call to PIC 88 | int SetUSB(int horz, unsigned char op) 89 | { 90 | struct usb_bus *bus; 91 | struct usb_device *dev; 92 | usb_dev_handle *udev; 93 | int dev_found, ret; 94 | char buffer[8]; 95 | 96 | usb_init(); 97 | 98 | usb_find_busses(); 99 | usb_find_devices(); 100 | 101 | udev = NULL; 102 | dev_found = FALSE; 103 | for (bus = usb_get_busses(); bus && !dev_found; bus = bus->next) { 104 | for (dev = bus->devices; dev && !dev_found; dev = dev->next) { 105 | if ((dev->descriptor.idVendor == 0x6666) && (dev->descriptor.idProduct == 0x0003)) { 106 | dev_found = TRUE; 107 | udev = usb_open(dev); 108 | } 109 | } 110 | } 111 | if (!dev_found) { 112 | printf("No matching device found...\n"); 113 | return -1; 114 | } 115 | 116 | ret = usb_control_msg(udev, 0x40, op, horz, 0, buffer, 0, 100); 117 | if (udev) { 118 | if (ret < 0) { 119 | printf("Unable to send SET_DUTY vendor request, ret = %d...\n", ret); 120 | return -2; 121 | } 122 | //usb_close(udev); 123 | } 124 | return 0; 125 | } 126 | -------------------------------------------------------------------------------- /SetHorz.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2009-2010, Andrew Barry 3 | * 4 | * This file is part of MakerScanner. 5 | * 6 | * MakerScanner is free software; you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License (Version 2, June 1991) as published by 8 | * the Free Software Foundation. 9 | * 10 | * MakerScanner is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | 19 | // Send USB calls to the PIC mircoprocessor 20 | 21 | #ifndef SET_HORZ_H 22 | #define SET_HORZ_H 23 | 24 | #define LASER_INTENSITY_RANGE 0.25 // inputs to PIC for laser: 60 yields 0 volts, 170 yields 2.44 volts which is just enough to turn the laser on, 25 | // 195 yields 3 volts, so range is from 170-195 which spans 25, so the factor here is 0.25 (it will be multiplied by 0-100 to yield 0-25) 26 | // NOTE!! values outside the range 60 - 195 27 | // will produce negative voltages or voltages greater than 3 V, which can damage laser 28 | 29 | 30 | #define LASER_MIN_VALUE_TO_TURN_ON 160 // upon further use, the value where the laser turns on seems to vary a bit. For now, 160 is a good number 31 | #define LASER_ZERO_VOLTS_VALUE 60 32 | #define DEFAULT_LASER_INTENSITY 30 33 | 34 | int SetHorz(int horz); 35 | int SetServo(int servo); 36 | int SendLaserIntensity(int intensity); 37 | void SetLaserIntensity(int intensity); 38 | int GetLaserIntensity(); 39 | int SetUSB(int horz, unsigned char op); 40 | 41 | #endif 42 | -------------------------------------------------------------------------------- /bootstrap.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | autoscan 4 | autoheader 5 | aclocal 6 | autoconf 7 | automake -a 8 | -------------------------------------------------------------------------------- /camview.cpp: -------------------------------------------------------------------------------- 1 | //////////////////////////////////////////////////////////////////// 2 | // Name: implementation of the CCamView class 3 | // File: camview.cpp 4 | // Purpose: eye/camera view/GUI system control methods 5 | // 6 | // Created by: Larry Lart on 22-Feb-2006 7 | // Updated by: Andrew Barry Jan 2010 8 | // 9 | // Copyright: (c) 2006 Larry Lart 10 | //////////////////////////////////////////////////////////////////// 11 | 12 | 13 | // on windows, you must include the wx headers before 14 | // other headers - Andy 15 | #include 16 | 17 | 18 | // main header -- this has wx headers in it so make 19 | // sure to include it before other headers - Andy 20 | #include "camview.h" 21 | 22 | 23 | // system header 24 | #include 25 | #include 26 | #include "cv.h" 27 | #include "highgui.h" 28 | 29 | 30 | #ifdef __GNUG__ 31 | #pragma implementation 32 | #pragma interface 33 | #endif 34 | 35 | // implement message map 36 | BEGIN_EVENT_TABLE(CCamView, wxWindow) 37 | EVT_PAINT( CCamView::OnPaint ) 38 | EVT_SIZE( CCamView::OnSize ) 39 | END_EVENT_TABLE() 40 | 41 | //////////////////////////////////////////////////////////////////// 42 | // Method: Constructor 43 | // Class: CCamView 44 | // Purose: build my CCamView object 45 | // Input: nothing 46 | // Output: nothing 47 | //////////////////////////////////////////////////////////////////// 48 | CCamView::CCamView( wxWindow *frame, const wxPoint& pos, const wxSize& size ): 49 | wxWindow(frame, -1, pos, size, wxSIMPLE_BORDER ) 50 | { 51 | //m_pCamera = NULL; 52 | 53 | // set my canvas width/height 54 | m_nWidth = size.GetWidth( ); 55 | m_nHeight = size.GetHeight( ); 56 | 57 | m_bDrawing = false; 58 | 59 | m_bNewImage = 0; 60 | 61 | m_pBitmap = NULL; 62 | 63 | } 64 | 65 | //////////////////////////////////////////////////////////////////// 66 | // Method: Destructor 67 | // Class: CCamView 68 | // Purose: destroy my object 69 | // Input: nothing 70 | // Output: nothing 71 | //////////////////////////////////////////////////////////////////// 72 | CCamView::~CCamView( ) 73 | { 74 | //m_pCamera = NULL; 75 | } 76 | 77 | //////////////////////////////////////////////////////////////////// 78 | // Method: Is Capture Enabled 79 | // Class: CCamView 80 | // Purose: check if camera is initialized 81 | // Input: nothing 82 | // Output: bool yes/no 83 | //////////////////////////////////////////////////////////////////// 84 | bool CCamView::IsCaptureEnabled( ) 85 | { 86 | // return( m_pCamera->IsInitialized( ) ); 87 | return( 1 ); 88 | } 89 | 90 | //////////////////////////////////////////////////////////////////// 91 | // Method: OnPaint 92 | // Class: CCamView 93 | // Purose: on paint event 94 | // Input: reference to paint event 95 | // Output: nothing 96 | //////////////////////////////////////////////////////////////////// 97 | void CCamView::OnPaint( wxPaintEvent& event ) 98 | { 99 | wxPaintDC dc(this); 100 | Draw( dc ); 101 | } 102 | 103 | //////////////////////////////////////////////////////////////////// 104 | // Method: Draw 105 | // Class: CCamView 106 | // Purose: camera drawing 107 | // Input: reference to dc 108 | // Output: nothing 109 | //////////////////////////////////////////////////////////////////// 110 | void CCamView::Draw( wxDC& dc ) 111 | { 112 | // check if dc available 113 | if( !dc.IsOk( ) || m_bDrawing == true ){ return; } 114 | 115 | m_bDrawing = true; 116 | 117 | int x,y,w,h; 118 | dc.GetClippingBox( &x, &y, &w, &h ); 119 | // if there is a new image to draw 120 | if( m_bNewImage ) 121 | { 122 | dc.DrawBitmap( *m_pBitmap, x, y ); 123 | m_bNewImage = false; 124 | } else 125 | { 126 | // draw inter frame ? 127 | } 128 | 129 | m_bDrawing = false; 130 | 131 | return; 132 | } 133 | 134 | //////////////////////////////////////////////////////////////////// 135 | // Method: OnDraw 136 | // Class: CCamView 137 | // Purose: CCamView drawing 138 | // Input: nothing 139 | // Output: nothing 140 | //////////////////////////////////////////////////////////////////// 141 | void CCamView::DrawCam( IplImage* pImg ) 142 | { 143 | // return; 144 | if( m_bDrawing ) return; 145 | m_bDrawing = true; 146 | // if there was an image then we need to update view 147 | if( pImg ) 148 | { 149 | // copy the image (will be deleted after display) 150 | IplImage *pDstImg = pImg;//cvCloneImage(pImg); 151 | 152 | int nCamWidth = pImg->width;//m_pCamera->m_nWidth; 153 | int nCamHeight = pImg->height;//m_pCamera->m_nHeight; 154 | 155 | 156 | // draw a vertical line through the center of the image 157 | cvLine(pDstImg, cvPoint(nCamWidth/2, 0), cvPoint(nCamWidth/2, nCamHeight), CV_RGB( 0,255,0 )); 158 | 159 | // draw a horizontal line at pixel 25 160 | cvLine(pDstImg, cvPoint(0, 25), cvPoint(nCamWidth, 25), CV_RGB( 0,255,0 )); 161 | 162 | // draw a horizontal line through the center of the image 163 | //cvLine(pDstImg, cvPoint(0, nCamHeight/2), cvPoint(nCamWidth, nCamHeight/2), CV_RGB( 0,255,0 )); 164 | 165 | // process image from opencv to wxwidgets 166 | unsigned char *rawData; 167 | // draw my stuff to output canvas 168 | CvSize roiSize; 169 | int step = 0; 170 | 171 | // get raw data from ipl image 172 | cvGetRawData( pDstImg, &rawData, &step, &roiSize ); 173 | 174 | // convert data from raw image to wxImg 175 | 176 | 177 | wxImage *pWxImg = new wxImage( nCamWidth, nCamHeight, rawData, TRUE ); 178 | 179 | // convert to bitmap to be used by the window to draw 180 | 181 | if (m_pBitmap) 182 | { 183 | delete m_pBitmap; 184 | } 185 | 186 | m_pBitmap = new wxBitmap( pWxImg->Scale(m_nWidth, m_nHeight) ); 187 | 188 | m_bNewImage = true; 189 | m_bDrawing = false; 190 | 191 | Refresh( FALSE ); 192 | 193 | //Update( ); 194 | delete pWxImg; 195 | 196 | //cvReleaseImage( &pDstImg ); 197 | 198 | 199 | } 200 | 201 | } 202 | 203 | //////////////////////////////////////////////////////////////////// 204 | // Method: CheckUpdate 205 | // Class: CCamView 206 | // Purose: CHeck for updates 207 | // Input: reference to size event 208 | // Output: nothing 209 | //////////////////////////////////////////////////////////////////// 210 | void CCamView::CheckUpdate() 211 | { 212 | Update( ); 213 | } 214 | 215 | //////////////////////////////////////////////////////////////////// 216 | // Method: OnSize 217 | // Class: CCamView 218 | // Purose: adjust on windows resize 219 | // Input: reference to size event 220 | // Output: nothing 221 | //////////////////////////////////////////////////////////////////// 222 | void CCamView::OnSize( wxSizeEvent& even ) 223 | { 224 | int nWidth = even.GetSize().GetWidth(); 225 | int nHeight = even.GetSize().GetHeight(); 226 | 227 | m_nWidth = nWidth; 228 | m_nHeight = nHeight; 229 | 230 | } 231 | -------------------------------------------------------------------------------- /camview.h: -------------------------------------------------------------------------------- 1 | //////////////////////////////////////////////////////////////////// 2 | // Name: camera view header 3 | // File: camview.h 4 | // Purpose: interface for the CCamView class. 5 | // 6 | // Created by: Larry Lart on 06-Jul-2006 7 | // Updated by: Andrew Barry Jan 2010 8 | // 9 | //////////////////////////////////////////////////////////////////// 10 | 11 | #ifndef _CCAMVIEW_H 12 | #define _CCAMVIEW_H 13 | 14 | #include 15 | 16 | #include "cv.h" 17 | #include "highgui.h" 18 | 19 | class CCamView : public wxWindow 20 | { 21 | public: 22 | CCamView( wxWindow *frame, const wxPoint& pos, const wxSize& size ); 23 | 24 | // Operations 25 | public: 26 | 27 | 28 | // Implementation 29 | public: 30 | virtual ~CCamView( ); 31 | bool IsCaptureEnabled( ); 32 | void CheckUpdate( ); 33 | 34 | // Draw method 35 | void DrawCam( IplImage* pImg ); 36 | void Draw( wxDC& dc ); 37 | 38 | // Public data 39 | public: 40 | //CCamera *m_pCamera; 41 | 42 | // Protected data 43 | protected: 44 | //CImage m_Canvas; 45 | wxBitmap *m_pBitmap; 46 | 47 | bool m_bDrawing; 48 | bool m_bNewImage; 49 | 50 | int m_nWidth; 51 | int m_nHeight; 52 | 53 | // private methods 54 | private: 55 | void OnPaint(wxPaintEvent& event); 56 | void OnSize( wxSizeEvent& even ); 57 | 58 | // protected data 59 | protected: 60 | 61 | DECLARE_EVENT_TABLE() 62 | }; 63 | 64 | #endif 65 | 66 | -------------------------------------------------------------------------------- /configure.ac: -------------------------------------------------------------------------------- 1 | # -*- Autoconf -*- 2 | # Process this file with autoconf to produce a configure script. 3 | 4 | AC_PREREQ([2.65]) 5 | AC_INIT([makerscanner], [0.3.2], [abarry@makerscanner.com]) 6 | AM_INIT_AUTOMAKE(makerscanner, 0.3.2) 7 | AC_CONFIG_SRCDIR([ScanStatus.cpp]) 8 | AC_CONFIG_HEADERS([config.h]) 9 | 10 | # Checks for programs. 11 | AC_PROG_CXX 12 | AC_PROG_CC 13 | 14 | # Checks for libraries. 15 | 16 | ########################################################################## 17 | # check for libgsl headers 18 | ########################################################################## 19 | 20 | # use the C++ compiler for the following checks 21 | AC_LANG([C++]) 22 | 23 | # store current CXXFLAGS and merge with AM_CXXFLAGS for compilation check 24 | OLD_CXXFLAGS=$CXXFLAGS; 25 | CXXFLAGS="$AM_CXXFLAGS $CXXFLAGS" 26 | 27 | # check for libgsl library headers 28 | AC_MSG_CHECKING([for the libgsl library headers]) 29 | # try to compile a file that includes a header of the library XXX 30 | AC_COMPILE_IFELSE([AC_LANG_SOURCE([[#include ]])], 31 | [AC_MSG_RESULT([found]) 32 | FOUND_GSL=1;], 33 | [AC_MSG_RESULT([not found]) 34 | FOUND_GSL=0;]) 35 | 36 | # reset original CXXFLAGS 37 | CXXFLAGS=$OLD_CXXFLAGS 38 | 39 | # handle results 40 | if test $FOUND_GSL != 1; then 41 | AC_MSG_NOTICE([]) 42 | AC_MSG_NOTICE([The libgsl library was not found!]) 43 | 44 | AC_MSG_NOTICE([]) 45 | AC_MSG_ERROR([ 46 | libgsl must be installed on your system. 47 | 48 | If you are on Ubuntu you can probably solve this by running 49 | 50 | sudo apt-get install libgsl0-dev 51 | ]) 52 | fi 53 | 54 | ########################################################################## 55 | 56 | 57 | 58 | PKG_CHECK_MODULES([OPENCV], [opencv >= 2.0]) 59 | 60 | 61 | 62 | # check for wxWidgets 63 | 64 | m4_include(wxwin.m4) 65 | 66 | AM_OPTIONS_WXCONFIG 67 | reqwx=2.4.0 68 | AM_PATH_WXCONFIG($reqwx, wxWin=1) 69 | if test "$wxWin" != 1; then 70 | AC_MSG_ERROR([ 71 | wxWidgets must be installed on your system. 72 | 73 | Please check that wx-config is in path, the directory 74 | where wxWidgets libraries are installed (returned by 75 | 'wx-config --libs' or 'wx-config --static --libs' command) 76 | is in LD_LIBRARY_PATH or equivalent variable and 77 | wxWidgets version is $reqwx or above. 78 | 79 | If you are on Ubuntu you can probably solve this by running 80 | sudo apt-get install libwxgtk2.8-dev 81 | ]) 82 | fi 83 | 84 | CPPFLAGS="$CPPFLAGS $WX_CPPFLAGS" 85 | CXXFLAGS="$CXXFLAGS $WX_CXXFLAGS_ONLY" 86 | CFLAGS="$CFLAGS $WX_CFLAGS_ONLY" 87 | LIBS="$LIBS $WX_LIBS" 88 | 89 | # Checks for header files. 90 | 91 | # Checks for typedefs, structures, and compiler characteristics. 92 | AC_HEADER_STDBOOL 93 | AC_C_INLINE 94 | 95 | # Checks for library functions. 96 | 97 | AC_CONFIG_FILES([Makefile]) 98 | AC_OUTPUT 99 | -------------------------------------------------------------------------------- /laserIcon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/laserIcon.ico -------------------------------------------------------------------------------- /laserIcon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/laserIcon.png -------------------------------------------------------------------------------- /laserIcon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 18 | 20 | 27 | 28 | 48 | 50 | 51 | 53 | image/svg+xml 54 | 56 | 57 | 58 | 59 | 63 | 70 | 72 | 75 | 79 | 80 | 82 | 86 | 96 | 106 | 107 | 111 | 116 | 121 | 126 | 131 | 136 | 141 | 146 | 151 | 156 | 161 | 168 | 175 | 182 | 189 | 196 | 203 | 210 | 217 | 224 | 231 | 238 | 245 | 252 | 253 | 254 | 261 | 262 | 263 | -------------------------------------------------------------------------------- /laserIcon.xcf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/laserIcon.xcf -------------------------------------------------------------------------------- /makerscanner-0.3.1.tar.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/makerscanner-0.3.1.tar.gz -------------------------------------------------------------------------------- /resource.rc: -------------------------------------------------------------------------------- 1 | aaaa ICON "laserIcon.ico" 2 | 3 | #include "wx/msw/wx.rc" 4 | -------------------------------------------------------------------------------- /windows-package/AUTHORS: -------------------------------------------------------------------------------- 1 | Andrew Barry 2 | Original Version, 0.1, 0.2, 0.3 3 | 4 | 2008-2010 5 | 6 | -------------------------------------------------------------------------------- /windows-package/README: -------------------------------------------------------------------------------- 1 | See http://www.makerscanner.com/ and/or http://wiki.makerbot.com/makerscanner for instructions. 2 | -------------------------------------------------------------------------------- /windows-package/cv210.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/windows-package/cv210.dll -------------------------------------------------------------------------------- /windows-package/cxcore210.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/windows-package/cxcore210.dll -------------------------------------------------------------------------------- /windows-package/highgui210.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/windows-package/highgui210.dll -------------------------------------------------------------------------------- /windows-package/installer.iss: -------------------------------------------------------------------------------- 1 | 2 | 3 | [Setup] 4 | AppName=MakerScanner 5 | AppVerName=MakerScanner v0.3.1 6 | DefaultDirName={pf}\MakerScanner 7 | DefaultGroupName=MakerScanner 8 | UninstallDisplayIcon={app}\MakerScanner.exe 9 | Compression=lzma 10 | SolidCompression=yes 11 | OutputDir=userdocs:MakerScanner 12 | AppMutex=MakerScanner 13 | 14 | [Files] 15 | Source: MakerScanner.exe; DestDir: {app} 16 | Source: README; DestDir: {app} 17 | Source: AUTHORS; DestDir: {app} 18 | Source: LICENSE; DestDir: {app} 19 | Source: laserIcon.ico; DestDir: {app} 20 | Source: cv210.dll; DestDir: {app} 21 | Source: cxcore210.dll; DestDir: {app} 22 | Source: highgui210.dll; DestDir: {app} 23 | Source: mingwm10.dll; DestDir: {app} 24 | 25 | [Icons] 26 | Name: {group}\MakerScanner; Filename: {app}\MakerScanner.exe; WorkingDir: {app} 27 | Name: {commonstartup}\MakerScanner; Filename: {app}\MakerScanner.exe; WorkingDir: {app} 28 | 29 | [Run] 30 | Filename: {app}\MakerScanner.exe; Description: Run MakerScanner; Flags: postinstall nowait skipifsilent 31 | -------------------------------------------------------------------------------- /windows-package/laserIcon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/windows-package/laserIcon.ico -------------------------------------------------------------------------------- /windows-package/mingwm10.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andybarry/makerscanner/5d9e1982a90729523d9f37bd48609ffe472d5f76/windows-package/mingwm10.dll -------------------------------------------------------------------------------- /wxsmith/ActiveStereoframe.wxs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | MakerScanner v0.3.1 5 | 1009,746 6 | 1009,746 7 | 0 8 | 9 | 120,232 10 | 11 | wxVERTICAL 12 | 13 | 14 | 15 | 16 | wxVERTICAL 17 | 18 | 19 | 20 | 21 | 22 | 2 23 | 24 | 25 | 26 | 27 | wxALL|wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL 28 | 5 29 | 30 | 31 | 32 | 33 | 34 | 35 | wxALL|wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL 36 | 5 37 | 38 | 39 | 40 | 41 | 42 | 43 | wxALL|wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL 44 | 5 45 | 46 | 47 | 48 | 49 | 50 | wxALL|wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL 51 | 5 52 | 53 | 54 | 55 | wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL 56 | 5 57 | 58 | 59 | 60 | 61 | 62 | 63 | wxALL|wxALIGN_TOP|wxALIGN_CENTER_HORIZONTAL 64 | 5 65 | 66 | 67 | 68 | wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL 69 | 5 70 | 71 | 72 | 73 | 74 | 75 | 76 | 2 77 | 78 | 79 | 80 | 81 | wxALL|wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL 82 | 5 83 | 84 | 85 | 86 | 87 | 25 88 | 5 89 | 50 90 | 158,30 91 | 92 | 93 | 94 | wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL 95 | 5 96 | 97 | 98 | 99 | 100 | 101 | 102 | wxALL|wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL 103 | 5 104 | 105 | 106 | 107 | 108 | 80 109 | 158,35 110 | 111 | 112 | 113 | wxALL|wxEXPAND|wxSHAPED|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL 114 | 5 115 | 116 | 117 | 118 | wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL 119 | 5 120 | 121 | 122 | 123 | wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL 124 | 5 125 | 126 | 127 | 128 | 129 | 319,170 130 | 131 | wxALL|wxEXPAND|wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL 132 | 5 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 150,32 141 | 0 142 | 143 | 144 | wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL 145 | 5 146 | 147 | 148 | 149 | 150 | 151 | 150,32 152 | 0 153 | 154 | 155 | wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL 156 | 5 157 | 158 | 159 | 160 | wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL 161 | 5 162 | 163 | 164 | wxALL|wxALIGN_TOP|wxALIGN_CENTER_HORIZONTAL 165 | 5 166 | 167 | 168 | wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL 169 | 5 170 | 171 | 172 | 173 | 10,-1 174 | 175 | wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL 176 | 5 177 | 178 | 179 | 180 | ------------------ Quick Tips ------------------ The top 25 pixels (above the green line) are reserved for a flat surface. If the entire top of the image is not looking at a flat surface, the scan will not work well. Try not to move the camera or objects during the scan. The system uses an image-difference technique which means that it is sensitive to any changes in the image. ------------------ Initializing ------------------ 181 | 999,133 182 | 390,154 183 | 184 | 185 | wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL 186 | 5 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | 196 | Alt-F4 197 | Quit the application 198 | 199 | 200 | 201 | 202 | 203 | 204 | 205 | Change the camera if you have more than one (requires restart) 206 | 207 | 208 | 209 | 210 | 211 | 212 | 213 | F1 214 | Show info about this application 215 | 216 | 217 | 218 | 219 | 220 | 1 221 | -1 222 | wxSB_NORMAL 223 | 224 | 225 | 226 | -------------------------------------------------------------------------------- /wxsmith/DistanceToReferenceDialog.wxs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Distance to Reference Surface 5 | 446,289 6 | 0 7 | 8 | 9 | 10 | 11 | wxVERTICAL 12 | 13 | 14 | 15 | 16 | 17 | 18 | wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL 19 | 5 20 | 21 | 22 | wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL 23 | 5 24 | 25 | 26 | 27 | 10,-1 28 | 29 | wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL 30 | 5 31 | 32 | 33 | 34 | 2 35 | 36 | 37 | 38 | 39 | wxALL|wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL 40 | 5 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL 49 | 5 50 | 51 | 52 | 53 | 54 | 0 55 | 56 | wxALL|wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL 57 | 5 58 | 59 | 60 | 61 | 62 | 63 | 0 64 | 65 | 66 | wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL 67 | 5 68 | 69 | 70 | 71 | 72 | 73 | 45,17 74 | 0 75 | 76 | wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL 77 | 5 78 | 79 | 80 | 81 | wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL 82 | 5 83 | 84 | 85 | 86 | 87 | 88 | 0 89 | 90 | wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL 91 | 5 92 | 93 | 94 | 95 | 96 | 50 97 | 1000 98 | 79,27 99 | 0 100 | 101 | wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL 102 | 5 103 | 104 | 105 | wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL 106 | 5 107 | 108 | 109 | 110 | 111 | 112 | 0 113 | 114 | wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL 115 | 5 116 | 117 | 118 | 119 | wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL 120 | 5 121 | 122 | 123 | 124 | 125 | wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL 126 | 5 127 | 128 | 129 | 130 | 131 | 132 | -------------------------------------------------------------------------------- /wxwin.m4: -------------------------------------------------------------------------------- 1 | dnl --------------------------------------------------------------------------- 2 | dnl Macros for wxWidgets detection. Typically used in configure.in as: 3 | dnl 4 | dnl AC_ARG_ENABLE(...) 5 | dnl AC_ARG_WITH(...) 6 | dnl ... 7 | dnl AM_OPTIONS_WXCONFIG 8 | dnl ... 9 | dnl ... 10 | dnl AM_PATH_WXCONFIG(2.6.0, wxWin=1) 11 | dnl if test "$wxWin" != 1; then 12 | dnl AC_MSG_ERROR([ 13 | dnl wxWidgets must be installed on your system 14 | dnl but wx-config script couldn't be found. 15 | dnl 16 | dnl Please check that wx-config is in path, the directory 17 | dnl where wxWidgets libraries are installed (returned by 18 | dnl 'wx-config --libs' command) is in LD_LIBRARY_PATH or 19 | dnl equivalent variable and wxWidgets version is 2.3.4 or above. 20 | dnl ]) 21 | dnl fi 22 | dnl CPPFLAGS="$CPPFLAGS $WX_CPPFLAGS" 23 | dnl CXXFLAGS="$CXXFLAGS $WX_CXXFLAGS_ONLY" 24 | dnl CFLAGS="$CFLAGS $WX_CFLAGS_ONLY" 25 | dnl 26 | dnl LIBS="$LIBS $WX_LIBS" 27 | dnl --------------------------------------------------------------------------- 28 | 29 | dnl --------------------------------------------------------------------------- 30 | dnl AM_OPTIONS_WXCONFIG 31 | dnl 32 | dnl adds support for --wx-prefix, --wx-exec-prefix, --with-wxdir and 33 | dnl --wx-config command line options 34 | dnl --------------------------------------------------------------------------- 35 | 36 | AC_DEFUN([AM_OPTIONS_WXCONFIG], 37 | [ 38 | AC_ARG_WITH(wxdir, 39 | [ --with-wxdir=PATH Use uninstalled version of wxWidgets in PATH], 40 | [ wx_config_name="$withval/wx-config" 41 | wx_config_args="--inplace"]) 42 | AC_ARG_WITH(wx-config, 43 | [ --with-wx-config=CONFIG wx-config script to use (optional)], 44 | wx_config_name="$withval" ) 45 | AC_ARG_WITH(wx-prefix, 46 | [ --with-wx-prefix=PREFIX Prefix where wxWidgets is installed (optional)], 47 | wx_config_prefix="$withval", wx_config_prefix="") 48 | AC_ARG_WITH(wx-exec-prefix, 49 | [ --with-wx-exec-prefix=PREFIX 50 | Exec prefix where wxWidgets is installed (optional)], 51 | wx_config_exec_prefix="$withval", wx_config_exec_prefix="") 52 | ]) 53 | 54 | dnl Helper macro for checking if wx version is at least $1.$2.$3, set's 55 | dnl wx_ver_ok=yes if it is: 56 | AC_DEFUN([_WX_PRIVATE_CHECK_VERSION], 57 | [ 58 | wx_ver_ok="" 59 | if test "x$WX_VERSION" != x ; then 60 | if test $wx_config_major_version -gt $1; then 61 | wx_ver_ok=yes 62 | else 63 | if test $wx_config_major_version -eq $1; then 64 | if test $wx_config_minor_version -gt $2; then 65 | wx_ver_ok=yes 66 | else 67 | if test $wx_config_minor_version -eq $2; then 68 | if test $wx_config_micro_version -ge $3; then 69 | wx_ver_ok=yes 70 | fi 71 | fi 72 | fi 73 | fi 74 | fi 75 | fi 76 | ]) 77 | 78 | dnl --------------------------------------------------------------------------- 79 | dnl AM_PATH_WXCONFIG(VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND 80 | dnl [, WX-LIBS [, ADDITIONAL-WX-CONFIG-FLAGS]]]]) 81 | dnl 82 | dnl Test for wxWidgets, and define WX_C*FLAGS, WX_LIBS and WX_LIBS_STATIC 83 | dnl (the latter is for static linking against wxWidgets). Set WX_CONFIG_NAME 84 | dnl environment variable to override the default name of the wx-config script 85 | dnl to use. Set WX_CONFIG_PATH to specify the full path to wx-config - in this 86 | dnl case the macro won't even waste time on tests for its existence. 87 | dnl 88 | dnl Optional WX-LIBS argument contains comma- or space-separated list of 89 | dnl wxWidgets libraries to link against (it may include contrib libraries). If 90 | dnl it is not specified then WX_LIBS and WX_LIBS_STATIC will contain flags to 91 | dnl link with all of the core wxWidgets libraries. 92 | dnl 93 | dnl Optional ADDITIONAL-WX-CONFIG-FLAGS argument is appended to wx-config 94 | dnl invocation command in present. It can be used to fine-tune lookup of 95 | dnl best wxWidgets build available. 96 | dnl 97 | dnl Example use: 98 | dnl AM_PATH_WXCONFIG([2.6.0], [wxWin=1], [wxWin=0], [html,core,net] 99 | dnl [--unicode --debug]) 100 | dnl --------------------------------------------------------------------------- 101 | 102 | dnl 103 | dnl Get the cflags and libraries from the wx-config script 104 | dnl 105 | AC_DEFUN([AM_PATH_WXCONFIG], 106 | [ 107 | dnl do we have wx-config name: it can be wx-config or wxd-config or ... 108 | if test x${WX_CONFIG_NAME+set} != xset ; then 109 | WX_CONFIG_NAME=wx-config 110 | fi 111 | 112 | if test "x$wx_config_name" != x ; then 113 | WX_CONFIG_NAME="$wx_config_name" 114 | fi 115 | 116 | dnl deal with optional prefixes 117 | if test x$wx_config_exec_prefix != x ; then 118 | wx_config_args="$wx_config_args --exec-prefix=$wx_config_exec_prefix" 119 | WX_LOOKUP_PATH="$wx_config_exec_prefix/bin" 120 | fi 121 | if test x$wx_config_prefix != x ; then 122 | wx_config_args="$wx_config_args --prefix=$wx_config_prefix" 123 | WX_LOOKUP_PATH="$WX_LOOKUP_PATH:$wx_config_prefix/bin" 124 | fi 125 | if test "$cross_compiling" = "yes"; then 126 | wx_config_args="$wx_config_args --host=$host_alias" 127 | fi 128 | 129 | dnl don't search the PATH if WX_CONFIG_NAME is absolute filename 130 | if test -x "$WX_CONFIG_NAME" ; then 131 | AC_MSG_CHECKING(for wx-config) 132 | WX_CONFIG_PATH="$WX_CONFIG_NAME" 133 | AC_MSG_RESULT($WX_CONFIG_PATH) 134 | else 135 | AC_PATH_PROG(WX_CONFIG_PATH, $WX_CONFIG_NAME, no, "$WX_LOOKUP_PATH:$PATH") 136 | fi 137 | 138 | if test "$WX_CONFIG_PATH" != "no" ; then 139 | WX_VERSION="" 140 | 141 | min_wx_version=ifelse([$1], ,2.2.1,$1) 142 | if test -z "$5" ; then 143 | AC_MSG_CHECKING([for wxWidgets version >= $min_wx_version]) 144 | else 145 | AC_MSG_CHECKING([for wxWidgets version >= $min_wx_version ($5)]) 146 | fi 147 | 148 | WX_CONFIG_WITH_ARGS="$WX_CONFIG_PATH $wx_config_args $5 $4" 149 | 150 | WX_VERSION=`$WX_CONFIG_WITH_ARGS --version 2>/dev/null` 151 | wx_config_major_version=`echo $WX_VERSION | \ 152 | sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'` 153 | wx_config_minor_version=`echo $WX_VERSION | \ 154 | sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'` 155 | wx_config_micro_version=`echo $WX_VERSION | \ 156 | sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'` 157 | 158 | wx_requested_major_version=`echo $min_wx_version | \ 159 | sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'` 160 | wx_requested_minor_version=`echo $min_wx_version | \ 161 | sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'` 162 | wx_requested_micro_version=`echo $min_wx_version | \ 163 | sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'` 164 | 165 | _WX_PRIVATE_CHECK_VERSION([$wx_requested_major_version], 166 | [$wx_requested_minor_version], 167 | [$wx_requested_micro_version]) 168 | 169 | if test -n "$wx_ver_ok"; then 170 | 171 | AC_MSG_RESULT(yes (version $WX_VERSION)) 172 | WX_LIBS=`$WX_CONFIG_WITH_ARGS --libs` 173 | 174 | dnl is this even still appropriate? --static is a real option now 175 | dnl and WX_CONFIG_WITH_ARGS is likely to contain it if that is 176 | dnl what the user actually wants, making this redundant at best. 177 | dnl For now keep it in case anyone actually used it in the past. 178 | AC_MSG_CHECKING([for wxWidgets static library]) 179 | WX_LIBS_STATIC=`$WX_CONFIG_WITH_ARGS --static --libs 2>/dev/null` 180 | if test "x$WX_LIBS_STATIC" = "x"; then 181 | AC_MSG_RESULT(no) 182 | else 183 | AC_MSG_RESULT(yes) 184 | fi 185 | 186 | dnl starting with version 2.2.6 wx-config has --cppflags argument 187 | wx_has_cppflags="" 188 | if test $wx_config_major_version -gt 2; then 189 | wx_has_cppflags=yes 190 | else 191 | if test $wx_config_major_version -eq 2; then 192 | if test $wx_config_minor_version -gt 2; then 193 | wx_has_cppflags=yes 194 | else 195 | if test $wx_config_minor_version -eq 2; then 196 | if test $wx_config_micro_version -ge 6; then 197 | wx_has_cppflags=yes 198 | fi 199 | fi 200 | fi 201 | fi 202 | fi 203 | 204 | dnl starting with version 2.7.0 wx-config has --rescomp option 205 | wx_has_rescomp="" 206 | if test $wx_config_major_version -gt 2; then 207 | wx_has_rescomp=yes 208 | else 209 | if test $wx_config_major_version -eq 2; then 210 | if test $wx_config_minor_version -ge 7; then 211 | wx_has_rescomp=yes 212 | fi 213 | fi 214 | fi 215 | if test "x$wx_has_rescomp" = x ; then 216 | dnl cannot give any useful info for resource compiler 217 | WX_RESCOMP= 218 | else 219 | WX_RESCOMP=`$WX_CONFIG_WITH_ARGS --rescomp` 220 | fi 221 | 222 | if test "x$wx_has_cppflags" = x ; then 223 | dnl no choice but to define all flags like CFLAGS 224 | WX_CFLAGS=`$WX_CONFIG_WITH_ARGS --cflags` 225 | WX_CPPFLAGS=$WX_CFLAGS 226 | WX_CXXFLAGS=$WX_CFLAGS 227 | 228 | WX_CFLAGS_ONLY=$WX_CFLAGS 229 | WX_CXXFLAGS_ONLY=$WX_CFLAGS 230 | else 231 | dnl we have CPPFLAGS included in CFLAGS included in CXXFLAGS 232 | WX_CPPFLAGS=`$WX_CONFIG_WITH_ARGS --cppflags` 233 | WX_CXXFLAGS=`$WX_CONFIG_WITH_ARGS --cxxflags` 234 | WX_CFLAGS=`$WX_CONFIG_WITH_ARGS --cflags` 235 | 236 | WX_CFLAGS_ONLY=`echo $WX_CFLAGS | sed "s@^$WX_CPPFLAGS *@@"` 237 | WX_CXXFLAGS_ONLY=`echo $WX_CXXFLAGS | sed "s@^$WX_CFLAGS *@@"` 238 | fi 239 | 240 | ifelse([$2], , :, [$2]) 241 | 242 | else 243 | 244 | if test "x$WX_VERSION" = x; then 245 | dnl no wx-config at all 246 | AC_MSG_RESULT(no) 247 | else 248 | AC_MSG_RESULT(no (version $WX_VERSION is not new enough)) 249 | fi 250 | 251 | WX_CFLAGS="" 252 | WX_CPPFLAGS="" 253 | WX_CXXFLAGS="" 254 | WX_LIBS="" 255 | WX_LIBS_STATIC="" 256 | WX_RESCOMP="" 257 | ifelse([$3], , :, [$3]) 258 | 259 | fi 260 | else 261 | 262 | WX_CFLAGS="" 263 | WX_CPPFLAGS="" 264 | WX_CXXFLAGS="" 265 | WX_LIBS="" 266 | WX_LIBS_STATIC="" 267 | WX_RESCOMP="" 268 | 269 | ifelse([$3], , :, [$3]) 270 | 271 | fi 272 | 273 | AC_SUBST(WX_CPPFLAGS) 274 | AC_SUBST(WX_CFLAGS) 275 | AC_SUBST(WX_CXXFLAGS) 276 | AC_SUBST(WX_CFLAGS_ONLY) 277 | AC_SUBST(WX_CXXFLAGS_ONLY) 278 | AC_SUBST(WX_LIBS) 279 | AC_SUBST(WX_LIBS_STATIC) 280 | AC_SUBST(WX_VERSION) 281 | AC_SUBST(WX_RESCOMP) 282 | ]) 283 | 284 | dnl --------------------------------------------------------------------------- 285 | dnl Get information on the wxrc program for making C++, Python and xrs 286 | dnl resource files. 287 | dnl 288 | dnl AC_ARG_ENABLE(...) 289 | dnl AC_ARG_WITH(...) 290 | dnl ... 291 | dnl AM_OPTIONS_WXCONFIG 292 | dnl ... 293 | dnl AM_PATH_WXCONFIG(2.6.0, wxWin=1) 294 | dnl if test "$wxWin" != 1; then 295 | dnl AC_MSG_ERROR([ 296 | dnl wxWidgets must be installed on your system 297 | dnl but wx-config script couldn't be found. 298 | dnl 299 | dnl Please check that wx-config is in path, the directory 300 | dnl where wxWidgets libraries are installed (returned by 301 | dnl 'wx-config --libs' command) is in LD_LIBRARY_PATH or 302 | dnl equivalent variable and wxWidgets version is 2.6.0 or above. 303 | dnl ]) 304 | dnl fi 305 | dnl 306 | dnl AM_PATH_WXRC([HAVE_WXRC=1], [HAVE_WXRC=0]) 307 | dnl if test "x$HAVE_WXRC" != x1; then 308 | dnl AC_MSG_ERROR([ 309 | dnl The wxrc program was not installed or not found. 310 | dnl 311 | dnl Please check the wxWidgets installation. 312 | dnl ]) 313 | dnl fi 314 | dnl 315 | dnl CPPFLAGS="$CPPFLAGS $WX_CPPFLAGS" 316 | dnl CXXFLAGS="$CXXFLAGS $WX_CXXFLAGS_ONLY" 317 | dnl CFLAGS="$CFLAGS $WX_CFLAGS_ONLY" 318 | dnl 319 | dnl LDFLAGS="$LDFLAGS $WX_LIBS" 320 | dnl --------------------------------------------------------------------------- 321 | 322 | 323 | 324 | dnl --------------------------------------------------------------------------- 325 | dnl AM_PATH_WXRC([ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]) 326 | dnl 327 | dnl Test for wxWidgets' wxrc program for creating either C++, Python or XRS 328 | dnl resources. The variable WXRC will be set and substituted in the configure 329 | dnl script and Makefiles. 330 | dnl 331 | dnl Example use: 332 | dnl AM_PATH_WXRC([wxrc=1], [wxrc=0]) 333 | dnl --------------------------------------------------------------------------- 334 | 335 | dnl 336 | dnl wxrc program from the wx-config script 337 | dnl 338 | AC_DEFUN([AM_PATH_WXRC], 339 | [ 340 | AC_ARG_VAR([WXRC], [Path to wxWidget's wxrc resource compiler]) 341 | 342 | if test "x$WX_CONFIG_NAME" = x; then 343 | AC_MSG_ERROR([The wxrc tests must run after wxWidgets test.]) 344 | else 345 | 346 | AC_MSG_CHECKING([for wxrc]) 347 | 348 | if test "x$WXRC" = x ; then 349 | dnl wx-config --utility is a new addition to wxWidgets: 350 | _WX_PRIVATE_CHECK_VERSION(2,5,3) 351 | if test -n "$wx_ver_ok"; then 352 | WXRC=`$WX_CONFIG_WITH_ARGS --utility=wxrc` 353 | fi 354 | fi 355 | 356 | if test "x$WXRC" = x ; then 357 | AC_MSG_RESULT([not found]) 358 | ifelse([$2], , :, [$2]) 359 | else 360 | AC_MSG_RESULT([$WXRC]) 361 | ifelse([$1], , :, [$1]) 362 | fi 363 | 364 | AC_SUBST(WXRC) 365 | fi 366 | ]) 367 | --------------------------------------------------------------------------------