概述
                        
							 SViewFrame for Android 在SViewBase的基础上增加了模型属性操作、动画播放,测量,批注,漫游等功能的操作界面, 方便用户快速集成。
						
						
							仅需要基本的浏览功能或需要个性化搭建展示界面的用户, 可选择 SViewBase for Android 集成控件。
						
										
												
						集成准备
						
                            集成之前需要熟悉集成环境以便快速准确的集成相关功能界面。详细集成准备如下所示: 
                        
												 
                         集成环境
                        	
								SViewBase for Android 开发库集成需要的环境:
								
						- 开发环境:JDK7或以上版本
- 开发工具:Android Studio或Eclipse
- 运行环境: Android4.0以上的设备
集成说明
						
                           SDK包解压SDK后得到以下内容:
                        
                          
                        
                           其中Eclipse文件夹包含了Eclipse开发所需要的工程文件,Android Studio 文件夹包含了Android Studio所需的文件,
							Demo包含了Eclipse和Android Studio演示工程。接下来分别说明如何将控件集成到您的Android studio 工程和 Eclipse工程中。
                        
							                      
						
						
                            Android Studio集成
                        
 
						
                        
                           控件资源 : Android Studio文件夹下的内容为Android Studio开发所需的SDK文件
                        
						 
                        
                            打开Android Studio,将sviewframe.aar添加到您工程的libs文件夹下。如图所示:
                        
						 
 
                        
                           修改app 下的build.gradle 配置文件添加
                        
					
repositories {
	flatDir {
	 dirs 'libs'
	 }
}
                           这个是添加一个本地仓库,并把libs目录作为仓库的地址。
                        
						 
                           修改dependencies : compile(name: 'sviewframe', ext: 'aar'),其中name就是libs目录下sviewframe.aar文件名称,ext是其扩展名。
                        
					
						 
                            添加工程所应用的jar包 : 选择你的project 鼠标右键选择
						
						【open Module Settings】
                         
                        
                            选择你的module Dependencies 选项卡,选择+号,选择
						
						【File dependency】 找到需要导入的jar包,点击ok
                         
 
                         
 
                        
                          点击Rebuild Project按钮重新构建工程
                        
						
						
                         注意事项
                         根据您的工作环境不同,可能会遇到以下问题 
                        
                          若遇到aapt finished with non-zero exit value 1 异常,请将SDK的build.gradle中的 buildToolsVersion 设置为与app中build.gradle文件的buildToolsVersion相同,然后Rebuild Project。
                        
						
						 
                           若遇到module 合并时的重名冲突问题,请尝试重命名冲突的文件并Rebuild Project。请注意SDK要求java1.7以上的环境。 
                        
					
						 
                        
                            你需要删除support-v4:23.2.0 .重新添加你环境下的V4包。方法同3.2.2 选择Library dependency。 
                        
					
						 
                           如果提示:mergeDebugResources AAPT err 
                        
						 
 
                        
                           你可以在app 下的build.gradle 文件下添加 
                        
						aaptOptions.cruncherEnabled = false aaptOptions.useNewCruncher = false
 
 
                        
                            Eclipse集成
                        
                      
                         
                            Eclipse文件夹下的内容为Eclipse开发所需的SDK文件,开发包内容如下。
                        
											 
						 
                         控件资源:ADT文件夹中asserts包含了控件所需的资源,libs文件夹包含了控件所需jar包和so动态库,其他文件为工程附件文件,用户不需要关心。
						
						
                            资源导入,将下载的SDK导入到Eclipse,具体操作方法为:
                        
						
						
                           File选择
						【Import】,然后打开Android,选择【Existing Android Code Into Workspace】, 点击下一步,在RootDirectory中填入SDK的具体路径,点击完成。					   
                         
                        
                          主工程(开发者自己的APP工程)依赖SDK,打开主工程属性(Properties),定位到Android,然后在Libray中选择Add,选择刚才导入的工程Library工程。
                        
						 
                        
                         如果自己创建的工程未包含android-support-v4.jar,请从我们的Demo工程中复制。
						 
						
                         将Asserts 目录下的SViewData文件夹拷贝到您的工程中。
                        
						
						
                            注意:我们不建议直接将SDK内容复制到主工程的方式,这样后续SDK升级会比较麻烦,也容易遗漏一些文件的升级(比如res目录)
                        
						
                                        
						主体功能集成
						 								应用权限声明
 
						
                            由于控件需要SDCard读写,录音等权限,请在AndroidManifest里面加入
                        
						
						<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.CHANGE_CONFIGURATION" /> <uses-feature android:glEsVersion="0x00020000" />
代码混淆
						
							
						
                           如果您的App开启了混淆,那么您需要在您的混淆配置文件中添加如下配置:
                        
											
-keep  public  class ht.svbase.model.SShape {
	public <init>();							
	public void setID(int );
	public void setName(java.lang.String) ;
}
-keep  public  class ht.svbase.model.SModel {
   public <init>();
   public void setID(int);
   public void setName(java.lang.String) ;
   public void setPlacePath(java.lang.String);
   public void addSubModel(ht.svbase.model.SModel ) ;
   public void addBody(ht.svbase.model.SBody) ;
   public void setModleViews(int[] ,java.lang.String[] ) ;
}
-keep  public   class ht.svbase.model.SBody {
   public <init>();
   public void setID(int );
   public void setName(java.lang.String) ;
   public void addFace(ht.svbase.model.SFace );
   public void addEdge(ht.svbase.model.SEdge );
}
-keep public   class ht.svbase.model.SFace {
   public <init>();
   public void setID(int );
   public void setName(java.lang.String) ;
   public void addEdge(ht.svbase.model.SEdge) ;
}
控件资源初始化
	
							
						
                           在创建SViewFrame控件对象之前,需要初始化SViewFrame 所需的字体、图片等资源和渲染所需的OpenGLES版本等信息。
						   此过程在Android的Application类中进行,此代码可以从Demo工程拷贝,根据需要做配置修改。基本流程如下:
                        
 public void initSViewFrameConfig () {
	SViewFrameConfig config = SViewFrame.getSViewConfig();
	config.setApplication(this);
	String assertDataPath = "SViewData";
	String workingPath = appWorkingPath;
	config.setAssertDataPath(assertDataPath);
	config.setWorkingPath(workingPath);
	config.setAppName(Name);
	int language = SViewFrameConfig.LANGUAGE_CH;
	String internationalLanguage = Locale.getDefault().getCountry();
	if (internationalLanguage.toLowerCase().equals("us")
			|| internationalLanguage.equals("en")) {
	   language = SViewFrameConfig.LANGUAGE_EN;
	}
	config.setLanguage(language);
	config.setGLESVersion(SViewFrameConfig.GLESVERSION20);
	SViewFrame.loadConfig();
}
						由于拷贝后的资源文件存储在SDCard中,此拷贝过程可以在新版本第一次打开时执行一次即可。
						可以参考Demo程序的代码进行判断是否是第一次运行。
                        
								License授权设置
								
			 LicenseManager.setLicenceKey("M2VURUFPMCJEVHJPEgQNHhZDbFRoT1YhQ01JT1VFZGVURUFPPk1GTmheRklrTVNPRC1qT05FU11CWWwJQgA=");
Demo说明
						
                            调用方法
                        
						
						 
							SViewFrame控件运行截图如下,包含三个主要区域:
							
                        
						
						 
                             Quickbar菜单,包含复位、视图、着色模式、装配树和漫游等操作的菜单。
                        
						 
                             CommandBar菜单,包含批注、手势批注、剖视、爆炸、测量、动画和考试培训等操作的菜单。
                        
						 
                             三维展示和触摸操作区域,通过触摸操作来实现模型的控制。
                        
						 
 
                        
							SViewFrame对象支持通过xml布局文件和代码两种方式初始化,这里提供通过xml布局文件初始化的流程。
							
                        
						
						 
                            将以下代码添加到xml布局文件中
                        
						 <include android:id="@+id/sviewframe_view" layout="@layout/sview_frame_layout" />
                            布局预览效果如下图
                        
						
						 
 
                        
                             根据id查找SViewFrame对象
                        
						
 SViewFrame sViewFrame = (SViewFrame) findViewById(R.id.sviewframe_view); //初始化quickBar菜单,需要显示调用,否则可能会出现菜单点击无效的情况 sViewFrame.getQuickBar(); //初始化commandBar菜单,需要显示调用,否则可能会出现菜单点击无效的情况 sViewFrame.getCommandBar();
                            配置SViewFrame控件运行参数
                        
						
						 
                            SViewFrame 支持设置浏览时设置剔除模式、剔除比例、是否显示旋转中心点、设置默认观察模式和默认模型朝向等参数,使用方式如下:
                        
  						 
sViewFrame = (SViewFrame) findViewById(R.id.sviewframe_view);
if (sViewFrame != null) {
    SViewFrameParameters groupParameters = sViewFrame.getSViewFrameParameters();
    groupParameters.setsView(sViewFrame.getSView());
    //------------以下参数根据集成实际情况进行设置--------//
    // 设置显示旋转中心
    groupParameters.setShowRotateCenter(true);
     // 设置提出剔除百分比为0
    groupParameters.setRemoveSize(0);
     // 设置坐标轴显示位置
    groupParameters.setAxisPos(AxisPos.LEFTDOWN);
    // 设置观察模式
    groupParameters.setDefaultOrbitMode(SOrbitMode.ORBIT_3DC);
    // 设置使用计算属性
    groupParameters.setUseComputeProperty(false);
    // 设置使用实例属性
    parameters.setUseInstanceProperty(true);
      // 设置使用原型属性
    parameters.setUsePrototypeProperty(false);
    //------------end--------//
    sViewFrame.loadParameters();
  }
                            打开和关闭模型:
                        
						 
                           通过Uri 对象传入的路径来打开指定的三维模型,代码如下:
                        
Uri uri = Uri.parse(modelPath); sViewFrame.openUri(uri);
                            当您不想显示模型时,可以使用如下代码:
                        
						 sViewFrame.close();
SViewFrame对象销毁
		
						 
							当您需要销毁SViewFrame对象时,请调用onDestroy()接口来释放控件管理的C++对象资源。						
                        
						
						 
							也可以采取单开进程的方法使用SViewFrame控件,具体操作如下:						
                        
												
						 
							在AndroidManifest.xml 文件中加载SView控件的Activity 中添加    android:process=":sview"
                        
<activity android:name=".DemoActivity" android:label="@string/app_name" android:configChanges="orientation|keyboardHidden|screenSize" android:launchMode="singleTask" android:process=":sview" android:windowSoftInputMode="adjustResize"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>
	在该ACtivity销毁时使用android.os.Process.killProcess(android.os.Process.myPid());
						
						
@Override
protected void onDestroy() {
	super.onDestroy();
	sViewFrame.getSView().removeListener(readListener);
	sViewFrame.onDestroy();
	android.os.Process.killProcess(android.os.Process.myPid());
}
                            常见问题
                        
						- 集成控件后,能够显示菜单但是模型显示界面为黑色。
- 集成控件出现打开模型空白或者没有授权。
							这是由于SViewBase所依赖的C++动态库,没有打包进入您的apk导致,请清理工程重新生成apk再试。
                        
						 
							可能的原因有两个:
							 
					   
							    1).授权时间到期。请联系我们申请延长期限。
							 
							  
							    2).so文件读取异常。集成初期一般为这个原因,
							请检查是否存在多个存在so文件的文件夹:如同时存在x86.armeabi,armeabi-v7a,armeabi-v8a....,建议在性能要求不过分要求的情况下只保留armeabi-v7a即可。
                             
							  
							    3).运行设备系统为64位导致。
							可以在项目的gradle中增加强制使用armv7a下的so文件。参考代码如下:
							 
						
                          defaultConfig {
                           //强制使用armv7下的so文件。解决64位机器加载so文件不成功的问题
                              ndk{
                                 abiFilters "armeabi-v7a"
                                 }
                               }
                           
						
						查看SViewFrame接口文档