精华内容
下载资源
问答
  • 导出和复制有什么不同
    万次阅读
    2019-03-14 14:38:59

    Jenkins复制和导出导入job

    方法一:同一个Jenkins中复制job

    如果是同一个Jenkins复制job,只需要在创建Job时,选择Copy from一个已有的job即可。

    方法二:直接复制jobs或指定的job目录

    这种方法适合跨Jenkins复制。

    Jenkins的job都在$JENKINS_HOME/jobs目录(一般是/var/lib/jenkins/jobs)下,每个job一个目录。

    复制全部job:

    cd /var/lib/jenkins
    # 在源Jenkins上压缩jobs目录
    tar -czvf jobs.tar.gz jobs
    # 在目标Jenkins上解压jobs目录
    tar -zxvf jobs.tar.gz
    

    复制某个job:

    cd /var/lib/jenkins/jobs
    # 在源Jenkins上压缩指定的job目录
    tar -czvf myjob.tar.gz myjob
    # 在目标Jenkins上解压指定的job目录
    tar -zxvf myjob.tar.gz
    

    然后在目标Jenkins上,打开Manage Jenkins,选择Reload Configuration from Disk。

    不需要重启目标Jenkins。

    参考文档:

    方法三:用Jenkins-CLI来导出和导入

    在Jenkins上,打开Manage Jenkins,打开Jenkins-CLI。

    下载jenkins-cli.jar,按照Jenkins-CLI页面的指引来操作:

    # 导出一个job
    java -jar jenkins-cli.jar -s http://192.168.37.131:8080/ get-job myjob > myjob.xml
    # 导入一个jobs
    java -jar jenkins-cli.jar -s http://192.168.37.131:8080/ get-job myjob < myjob.xml
    

    然后在目标Jenkins上,打开Manage Jenkins,选择Reload Configuration from Disk。

    不需要重启目标Jenkins。

    这种方法在本地操作时会遇到ERROR: anonymous is missing the Overall/Read permission的错,原因是为了安全考虑Jenkins默认不允许直接通过jenkins-cli来调用。请参见:https://stackoverflow.com/questions/51038858/jenkins-cli-error-anonymous-is-missing-the-overall-read-permission

    参考文档:

    更多相关内容
  • MySQL数据库导入、导出复制表、重命名表

    千次阅读 多人点赞 2019-11-30 14:13:09
    提前说明这是一篇小白总结,高手勿喷请绕行,写这篇总结的原因是发觉自己时候确实眼高手低了,大道至简,花了很多时间去看索引、缓存、主从等等,等到出现实际问题的时候却发现自己磨磨蹭蹭写出的SQL语句居然...

    前言

    提前说明这是一篇小白总结,高手勿喷请绕行,写这篇总结的原因是发觉自己有时候确实眼高手低了,大道至简,花了很多时间去看索引、缓存、主从等等,等到出现实际问题的时候却发现自己磨磨蹭蹭写出的SQL语句居然有语法错误,看来还得稳扎稳打从基础入手,因为实际工作的用到的SQL并不多,现在把常用的几条总结一下,即使下次不能立马写出来,也能在这篇文章中的快速找到想要的。

    正如标题中的提到的这些,数据库的导入和导出在紧急处理线上数据时很常用,而复制表基本上也是为了不影响原数据的情况下进行问题排查,重命名表是为了导入多份备份数据时原数据不被覆盖,比如想对比两天的A表数据,可以先把第一天的数据导入,然后将A表名修改成Aold,接着直接再导入第二天的数据库数据,这样就可以将数据库中表Aold和A进行对比了,可以避免两个数据库中的同一个表进行对比时写很长的SQL。

    测试环境

    Welcome to the MySQL monitor. Commands end with ; or \g.
    Your MySQL connection id is 11
    Server version: 5.7.28-log MySQL Community Server (GPL)
    Copyright © 2000, 2019, Oracle and/or its affiliates. All rights reserved.
    Oracle is a registered trademark of Oracle Corporation and/or its
    affiliates. Other names may be trademarks of their respective owners.
    Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.

    测试过程

    为了说明实现这些要求的具体SQL,我们先建立一个测试数据库,然后创建测试表格,插入测试数据,最后在这个数据库上依次实现这些要求。

    创建测试数据

    创建测试数据库和表格

    mysql> create database dbtest;
    Query OK, 1 row affected (0.00 sec)
    
    mysql> use dbtest
    Database changed
    
    mysql> create table a(id int, num int);
    Query OK, 0 rows affected (0.02 sec)
    
    mysql> create table b(id int, name varchar(32));
    Query OK, 0 rows affected (0.01 sec)
    
    mysql> show tables;
    +--------------+
    | Tables_in_zz |
    +--------------+
    | a            |
    | b            |
    +--------------+
    2 rows in set (0.00 sec)
    

    插入测试数据

    mysql> insert into a values(1, 100);
    Query OK, 1 row affected (0.02 sec)
    
    mysql> insert into a values(2, 200);
    Query OK, 1 row affected (0.01 sec)
    
    mysql> select * from a;
    +------+------+
    | id   | num  |
    +------+------+
    |    1 |  100 |
    |    2 |  200 |
    +------+------+
    2 rows in set (0.01 sec)
    
    mysql> insert into b values(1, 'albert');
    Query OK, 1 row affected (0.01 sec)
    
    mysql> insert into b values(2, 'tom');
    Query OK, 1 row affected (0.01 sec)
    
    mysql> select * from b;
    +------+--------+
    | id   | name   |
    +------+--------+
    |    1 | albert |
    |    2 | tom    |
    +------+--------+
    2 rows in set (0.00 sec)
    

    数据库导出

    数据库导出时使用的最基础的工具叫mysqldump,这是单独的工具不是mysql命令,刚学MySQL的时候居然在MySQL的命令行中使用mysqldump,现在只能当笑话看了。

    导出指定数据库中所有表结构和数据

    在系统的命令行工具下输入以下命令,敲入回车输入密码,再回车就可以将数据库dbtest的结构和数据导出到dbtest.sql文件中:

    >mysqldump -uroot -h192.168.1.101 -p dbtest > dbtest.sql
    

    打开dbtest.sql文件,显示如下:文件内容比较长,里面包含了数据库的表结构和其中的数据信息:

    -- MySQL dump 10.13  Distrib 5.7.21, for Win64 (x86_64)
    --
    -- Host: localhost    Database: dbtest
    -- ------------------------------------------------------
    -- Server version   5.7.21-log
    
    /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
    /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
    /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
    /*!40101 SET NAMES utf8 */;
    /*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
    /*!40103 SET TIME_ZONE='+00:00' */;
    /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
    /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
    /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
    /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
    
    --
    -- Table structure for table `a`
    --
    
    DROP TABLE IF EXISTS `a`;
    /*!40101 SET @saved_cs_client     = @@character_set_client */;
    /*!40101 SET character_set_client = utf8 */;
    CREATE TABLE `a` (
      `id` int(11) DEFAULT NULL,
      `num` int(11) DEFAULT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    /*!40101 SET character_set_client = @saved_cs_client */;
    
    --
    -- Dumping data for table `a`
    --
    
    LOCK TABLES `a` WRITE;
    /*!40000 ALTER TABLE `a` DISABLE KEYS */;
    INSERT INTO `a` VALUES (1,100),(2,200);
    /*!40000 ALTER TABLE `a` ENABLE KEYS */;
    UNLOCK TABLES;
    
    --
    -- Table structure for table `b`
    --
    
    DROP TABLE IF EXISTS `b`;
    /*!40101 SET @saved_cs_client     = @@character_set_client */;
    /*!40101 SET character_set_client = utf8 */;
    CREATE TABLE `b` (
      `id` int(11) DEFAULT NULL,
      `name` varchar(32) DEFAULT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    /*!40101 SET character_set_client = @saved_cs_client */;
    
    --
    -- Dumping data for table `b`
    --
    
    LOCK TABLES `b` WRITE;
    /*!40000 ALTER TABLE `b` DISABLE KEYS */;
    INSERT INTO `b` VALUES (1,'albert'),(2,'tom');
    /*!40000 ALTER TABLE `b` ENABLE KEYS */;
    UNLOCK TABLES;
    /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
    
    /*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
    /*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
    /*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
    /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
    /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
    /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
    /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
    
    -- Dump completed on 2019-11-30 11:32:23
    

    只导出指定数据库中所有表的结构

    只导出表结构的方法和上面是一样的,只是加上 -d 选项就可以了,运行下面命令就可以将dbtest数据库中的所有表结构导出到 dbteststructure.sql 中,因为和上面类似,文件中的内容就不贴了,只比 dbtest.sql 文件少了插入数据的内容:

    >mysqldump -uroot -h192.168.1.101 -p -d dbtest > dbteststructure.sql
    

    只导出指定数据库中的一个表

    只导出数据库中指定表,可以是一个也可以是多个,在数据库名字后面跟表的名字就可以了,比如导出表a:

    >mysqldump -uroot -h192.168.1.101 -p dbtest a > dbtest_a.sql
    

    导出多个数据库数据

    出多个数据库数据需要加上 --databases 选项,然后在后面依次跟上数据库名字就行:

    >mysqldump -uroot -h192.168.1.101 -p --databases dbtest dbtest2 > db_more.sql
    

    导出所有数据库数据

    导出所有的数据库时不需要加数据库的名字,加上 --all-databases 选项就可以了

    >mysqldump -uroot -h192.168.1.101 -p --all-databases > db_all.sql
    

    数据库导入

    数据库的导入比较简单,实际上就是把sql文件在MySQL中执行一下,可以使用以下两种方式:

    系统命令行导入

    一般需要指定导入的数据库dbtest和sql文件的路径,在Linux上举例:

    >mysql -uroot -h192.168.1.101 -p dbtest < /home/albert/dbtest.sql --default-character-set=utf8 
    

    在Windows上举例,主要是路径需要注意,Windows上使用正斜杠/和反斜杠\都可以,默认是反斜杠,如果路径中包含空格可以用双引号将整个路径包起来:

    >mysql -uroot -h192.168.1.101 -p dbtest < D:\albert\dbtest.sql --default-character-set=utf8
    

    注意--default-character-set=utf8是指定默认的字符集,主要是防止导入时出现编码错误,之前总结过,在此复习一下。

    MySQL命令行导入

    首先连接MySQL服务器进行登陆:

    >mysql -uroot -h192.168.1.101 -p --default-character-set=utf8
    

    输入密码登陆后再使用source命令直接导入sql文件就可以:

    mysql> source D:\albert\dbtest.sql
    

    数据表复制

    数据表的复制可以分为结构复制和完全复制,其中完全复制时可以先复制结构,再将数据复制到新表中:

    只复制表结构

    • 使用LIKE语句,只不过5.0版本之后才支持,之前的版本无法使用
    CREATE TABLE new_table LIKE old_table;
    
    mysql> select * from a;
    +------+------+
    | id   | num  |
    +------+------+
    |    1 |  100 |
    |    2 |  200 |
    +------+------+
    2 rows in set (0.01 sec)
    
    mysql> create table a2 like a;
    Query OK, 0 rows affected (0.04 sec)
    
    mysql> desc a2;
    +-------+---------+------+-----+---------+-------+
    | Field | Type    | Null | Key | Default | Extra |
    +-------+---------+------+-----+---------+-------+
    | id    | int(11) | YES  |     | NULL    |       |
    | num   | int(11) | YES  |     | NULL    |       |
    +-------+---------+------+-----+---------+-------+
    2 rows in set (0.02 sec)
    
    mysql> select * from a2;
    Empty set (0.00 sec)
    
    • 使用 SELECT 语句加不成立的条件实现
    CREATE TABLE new_table SELECT * FROM old_table WHERE FALSE;
    
    mysql> create table a3 select * from a where false;
    Query OK, 0 rows affected (0.07 sec)
    Records: 0  Duplicates: 0  Warnings: 0
    
    mysql> desc a3;
    +-------+---------+------+-----+---------+-------+
    | Field | Type    | Null | Key | Default | Extra |
    +-------+---------+------+-----+---------+-------+
    | id    | int(11) | YES  |     | NULL    |       |
    | num   | int(11) | YES  |     | NULL    |       |
    +-------+---------+------+-----+---------+-------+
    2 rows in set (0.01 sec)
    
    mysql> select * from a3;
    Empty set (0.01 sec)
    

    复制表结构和数据

    • 可以先按照上面的语句复制结构,然后再讲数据复制过去:
    CREATE TABLE new_table SELECT * FROM old_table WHERE FALSE;
    INSERT INTO new_table SELECT * FROM old_table;
    
    mysql> insert into a2 select * from a;
    Query OK, 2 rows affected (0.07 sec)
    Records: 2  Duplicates: 0  Warnings: 0
    
    mysql> select * from a2;
    +------+------+
    | id   | num  |
    +------+------+
    |    1 |  100 |
    |    2 |  200 |
    +------+------+
    2 rows in set (0.00 sec)
    
    • 直接将结构和数据全部复制
    CREATE TABLE new_table SELECT * FROM old_table;
    
    mysql> create table a4 select * from a;
    Query OK, 2 rows affected (0.06 sec)
    Records: 2  Duplicates: 0  Warnings: 0
    
    mysql> desc a4;
    +-------+---------+------+-----+---------+-------+
    | Field | Type    | Null | Key | Default | Extra |
    +-------+---------+------+-----+---------+-------+
    | id    | int(11) | YES  |     | NULL    |       |
    | num   | int(11) | YES  |     | NULL    |       |
    +-------+---------+------+-----+---------+-------+
    2 rows in set (0.01 sec)
    
    mysql> select * from a4;
    +------+------+
    | id   | num  |
    +------+------+
    |    1 |  100 |
    |    2 |  200 |
    +------+------+
    2 rows in set (0.00 sec)
    

    数据表重命名

    使用 ALTER 命令实现

    ALTER TABLE old_table RENAME [TO|AS] new_table;
    

    这个语句中的TOAS是可选的,加不加都行,也可以选择其中一个,效果是一样的,测试如下:

    mysql> show tables;
    +------------------+
    | Tables_in_dbtest |
    +------------------+
    | a                |
    | b                |
    +------------------+
    5 rows in set (0.02 sec)
    
    mysql> alter table b rename c;
    Query OK, 0 rows affected (0.04 sec)
    
    mysql> show tables;
    +------------------+
    | Tables_in_dbtest |
    +------------------+
    | a                |
    | c                |
    +------------------+
    5 rows in set (0.00 sec)
    
    mysql> alter table c rename to d;
    Query OK, 0 rows affected (0.02 sec)
    
    mysql> show tables;
    +------------------+
    | Tables_in_dbtest |
    +------------------+
    | a                |
    | d                |
    +------------------+
    5 rows in set (0.00 sec)
    
    mysql> alter table d rename as e;
    Query OK, 0 rows affected (0.02 sec)
    
    mysql> show tables;
    +------------------+
    | Tables_in_dbtest |
    +------------------+
    | a                |
    | e                |
    +------------------+
    5 rows in set (0.00 sec)
    

    使用RENAME命令

    RENAME TABLE old_table TO new_table;
    

    这个语句中TO就不能省略了,否则会报语法错误,测试如下:

    mysql> show tables
        -> ;
    +------------------+
    | Tables_in_dbtest |
    +------------------+
    | a                |
    | e                |
    +------------------+
    5 rows in set (0.00 sec)
    
    mysql> rename table e to f;
    Query OK, 0 rows affected (0.11 sec)
    
    mysql> show tables;
    +------------------+
    | Tables_in_dbtest |
    +------------------+
    | a                |
    | f                |
    +------------------+
    5 rows in set (0.01 sec)
    

    总结

    1. 数据库的导出、导入、数据表的复制、重命名都是MySQL操作的基础,需要熟练掌握
    2. 数据库导出:mysqldump -uroot -h192.168.1.101 -p dbtest > dbtest.sql
    3. 数据库导入:mysql -uroot -h192.168.1.101 -p dbtest < /tmp/dbtest.sql --default-character-set=utf8
    4. 数据表复制:CREATE TABLE new_table SELECT * FROM old_table;
    5. 表格重命名:RENAME TABLE old_table TO new_table;
    展开全文
  • UE4-导入和导出

    千次阅读 2020-12-22 16:18:29
    FBX可以包含以下类型的数据:可以是带基本材质数据的静态网格体数据,可以是带基本材质数据的骨骼蒙皮数据,可以是细节层级数据骨骼动画数据。FBX格式作为一种主流导出格式,可以在大多数DCC应用中找到,其中...

    1.导出静态网格体

    UE4能够识别FBX格式的静态网格体和骨架网格体,其中也包括动画。FBX可以包含以下类型的数据:可以是带有基本材质数据的静态网格体数据,可以是带有基本材质数据的骨骼蒙皮数据,可以是细节层级数据和骨骼动画数据。FBX格式作为一种主流导出格式,可以在大多数DCC应用中找到,其中包括但不限于3ds Max、Maya、Houdini、Blender以及其它支持FBX格式的应用。你可以阅读应用文档了解情况,因为在文档中通常会写明该应用支持哪些格式。

    当你在3ds Max或其他DCC中导出静态网格体时,你应该在“FBX Export”界面中勾选“Smoothing Groups”、“Trangulate”、“Preserve edge orientation”。

    如果导入的骨架网格体带有动画,你还需勾选“Animation”。我一般会检查是否关闭了其他选项,目的是确保不会意外导入静态网格体的其它信息。

    2.导出骨架网格体

    在“Geometry”分段下勾选相同的设置:“Smoothing Groups”、“Trangulate”以及“Preserve Edge Orientation”,不同之处在于,在“Animation”分段下,你需要勾选“Animation”,并且勾选“Deformations”下的“Deformations”和“Skins”。如果要导入“Morphs”目标,还要勾选“Morphs”,然后像平常一样导入资源。

    3.3D网格体的导入

    我想谈谈3D网格体的两种导入方法,虽然就像导入纹理一样简单,但它经常被忽略。那么,在UE4中该怎么导入资源呢?有两种方法,一种是使用“Import”按钮,然后选择要导入的对象。另一个方法是拖入资源,打开Windows资源管理器,我可以选择文件并直接拖入内容浏览器,导入流程和纹理完全一样。我知道这有点简单,但它经常会被忽略。

    4.可用的3D网格体导入选项

    静态网格体导入选项有很多种类,其中有一些需要你启用,但多数时候参考默认设置就可以了。让我们先来看看有哪些选项,这里有“Auto Generate Collision”、“Generate Lightmap UVs”、“Transform Vertex to Absolute”、“Import Textures”和“Import Normal Maps”。这里还有很多其它选项,但多数时候,你只需使用我刚才提到的那些选项。

    “Auto Generate Collision”能为导入的资源生成碰撞。“Generate Lightmap UVs”用于生成光照贴图UV。注意,引擎为你生成的光照贴图UV往往效果不是最好,因为引擎会提取第一个UV通道的信息,然后试着展开UV,以便所有纹理都位于0到1的UV空间中。有时候结果很不错,但有时结果可能不是那么好。我倾向于禁用这个选项,因为我或者美术师会在DCC中手动设置光照贴图,然后再导入资源。每个项目都是不同的,所以你应该根据情况选择最适合你的工作流。

    接下来我想谈谈“Transform Vertex to Absolute”,如果不小心没有勾选它,你会发现,原本被正确放置的所有碰撞网格体都会回到静态网格体的原点,因为它们的枢轴点都归零了。如果出现这种情况,一定要确保勾选“Transform Vertex to Absolute”。这种情况很少发生,但如果发生了,往往会找不到原因。

    最后是“Import Textures”和“Import Normal Maps”,我总是禁用这两个选项,原因是一般来说,材质和纹理会和模型一起被导入和设置或在模型完成后被导入和设置。通常,当你检查模型时或导入模型查看它的效果时,会连带产生大量测试资源。请关闭这两个选项,以确保没有多余资源与模型一起被导入。通用,这只是我的个人工作流程,如果你发现你的项目有必要使用这些选项,请使用它们。

    如果要导入骨骼网格体动画的话,导入选项的区别在于,在“Mesh”选项下,静态网格体的导入选项禁用了“Skeletal Mesh”选项。如果我要导入骨架网格体或动画网格体,我就要启用“Skeletal Mesh”选项,我要找一个现有骨架,然后选择是否需要导入动画,同样,我禁用了“Import Textures”和“Import Normal Maps”,因为我习惯在之后手动设置材质和纹理。

    5.资源的重新导入

    在UE4中有很多方法,可以实现资源的重新导入。最简单便捷的方法就是拖放资源,就像你导入静态网格体、纹理或动画那样,直接在文件资源管理器中将资源拖入内容浏览器中,你可以对更新过的资源执行相同操作,虚幻引擎会自动导入并覆盖资源,并更新原先载入的资源。

    另一种方法是在UE4的内容浏览器中,你可以右键点击对象,然后在菜单中选择“Reimport”,引擎就会执行整个流程。如果双击点击对象打开它,在“Detail”面板的“Import Settings”设置中,可以看到一个“Source File”路径,它的作用是定义这个对象在你电脑上的保存路径,所以当我点击“Reimport”时,引擎会自动根据这个路径重新导入资源。如果你第一次使用这个项目或从别人那里接手了这个项目,这个功能——右键点击重新导入的功能就没法使用,因为虚幻引擎不知道资源的位置。不过重新导入过一次后,虚幻引擎就会跟踪资源路径,然后每当你右键点击重新导入资源时,引擎就会重新导入资源。

    接下来我想介绍的内容仅限于纹理的重新导入,双机点击一个纹理,在顶部菜单栏中能看到一个“Reimport”按钮。同上,当你第一次使用这个项目或从别人那里接手了这个项目,这个功能就没法使用,因为虚幻引擎不知道资源的位置。你需要手动在资源管理器中找到资源路径重新导入过一次后,虚幻引擎就会跟踪资源路径,然后每当你点击重新导入资源时,引擎就会重新导入资源。

    6.自动重新导入

    与他人协同开发时,可以让虚幻引擎监听包含更新资源的 Dropbox或Google网盘的文件夹,一旦文件夹中更新了资源,虚幻引擎就会自动读取并更新文件夹中的资源。这是我们设置监听文件夹的界面,你需要在“Editor Preference”的“Loading&Saving”分段中设置它。

    7.完整导入FBX格式的场景

    在开发电子游戏时,你通常会单独导入某个资源,然后在关卡内复制并使用这些资源,但在某些情况下,比如建筑可视化这类项目中,这种方法会行不通,因为所有资源都已经在AutoCAD、3ds Max或其它DCC中被放置在了它们应该在的位置。如果单独导入各个资源,然后调整它们的位置,将会是一个非常耗时的过程,这就需要用到完整场景FBX导入器。完整场景导入的一个好处是,它不仅支持静态网格体,也支持骨架网格体、动画、材质、纹理、刚体、变换目标、摄像机和光源。假如你在DCC中放置了很多用于丰富场景内容的类型Actor,它都能支持导入,导入器能够将它们全部导入进UE4中,然后为你自动设置好。有一点要注意,或者说两点,材质和摄像机都有一些限制,材质只能导入漫反射贴图和法线贴图,而摄像机的动画都不能导入,你需要在UE4中设置动画。

    在UE4中要使用“完整场景导入”,你需要点击“File”>“Import Into Level”。在Windows资源管理器中找到需要导入的FBX资源,点击“Open”,然后需要在UE4中指定一个文件夹,用于导入所有资源。

    然后会打开“FBX Scene Import Options”,你会发现所有需要导入的资源。注意右侧有各种选项,供你在导入时使用。整个流程是,引擎会读取FBX文件,将它整体导入,就好像你单独导入所有模型一样。另一个好处是,当导入完成后,引擎会自动为我重新构建整个场景,并将它保存在蓝图中,以便我快速便捷地更新场景内的任何模型。

    8.UE4的资源导出

    很多人都不知道,其实你可以导出几乎所有被导入UE4的资源。让我来谈谈如何导出资源,然后我们再讨论下资源迁移,因为资源迁移是另一种将资源导出UE4的方法,但资源迁移能够保留所有内部关联,这点非常有用。

    有很多种方法可以导出资源。首先,如果选中静态网格体,我可以右键点击资源,点击“Asset Actions”,选择“Export”,这样可以将网格体作为FBX导出。

    我可以在关卡中选中网格体,点击“File”>“Export Selected”或“Export All”。“Export Selected”只能导出我在关卡中选中的网格体,而“Export All”能够导出关卡中的所有内存。

    你还可以导出骨架网格体和它们的动画,只需右键点击资源,点击“Asset Actions”,选择“Export”。

    我提到的另一种方法是资源迁移,资源迁移非常有用。假设你想升级UE4版本,比如从版本4.15升级到4.16。你希望把资源复制到新版本,但当你尝试把4.15的资源放入4.16的文件夹,你发现所有内部关联全都丢失了,材质没有关联资源。资源全都迁移了,但你必须重新关联它们。防止这种情况发生的办法,就是使用资源迁移,它的作用是获取所有你希望迁移的资源,将这些资源打包,然后放到“Content”文件夹中。当你在新项目中打开它时,材质、纹理和网格体的所有内部关联都会被完整保留,这样你只需要打开项目继续工作,而不需要在项目中修复一大堆关联丢失问题。

    让我们看看如何迁移资源,我们的做法是,右键点击资源,点击“Asset Actions”>“Migrate”,会打开“Asset Report”弹窗,这个弹窗的作用是,它告诉我们该网格体使用了以下材质,我只需点击“OK”。接下来要为这个网格体选择目标文件夹,也就是导出的目标位置,需要注意的一点是,如果我把资源迁移到“Content”以外的目录中,我就会冒很大的风险,丢失所有内部关联。迁移操作需要我将资源放置在项目中的“Content”文件夹下。

    展开全文
  • Qt Tablewidget表格数据的导出和导入

    千次阅读 多人点赞 2021-02-07 14:46:01
    文章目录一. xls/xlsx文件数据导入TableWidget表格二. tableWidget表格数据导出为xls...我所使用的这种方法,导入/导出相对较慢,网上另一种比较快,机会再写出来。 前期准备: pro文件加入 QT += axcontainer 在头


    QT里面自带的TableWidget控件可以实现表格显示的功能,刚开始学习TableWidget,只是自己提前创建好表格,规定好数据,但真正的软件不会让我们规定好数据格式。下面我们一起来看一下,如何导入xls文件,自动生成表格。

    在这里插入图片描述
    我所使用的这种方法,导入/导出相对较慢,网上有另一种比较快,有机会再写出来。

    前期准备:

    pro文件加入
    QT += axcontainer

    在头文件加入#include<ActiveQt/QAxObject>

    网上还有写#include

    版本不同,可能代码写法不同,自己测试。

    一. xls/xlsx文件数据导入TableWidget表格

    在这里插入图片描述
    我们右击导入按钮,转到槽,添加被点击后的代码

    QString strData;
    void MainWindow::on_pushButton_17_clicked()
    {
    	//首先我们需要创建一个文件选择对话框
        QString curPash =QDir::currentPath(); //获取当前路径
        QString dlgTitle="选择表格文件";
        //xls和xlsx格式的文件都可以,xlsx兼容xls,注意每一种类型后面要加两个分号
        QString filter="表格文件(*.xls *.xlsx);;xls文件(*.xls);;xlsx文件(*.xlsx);;所有文件(*.*)";
        //创建文件选择对话框
        QStringList fileList = QFileDialog::getOpenFileNames(this,dlgTitle,curPash,filter);
        if(fileList.count()<1)
            return;
        for(int i = 0;i<fileList.count();i++)
        {
        	//保存文件地址
            strData = fileList.at(i);
        }
        //连接Excel控件
        QAxObject excel("Excel.Application");
        //不显示任何警告信息
        excel.setProperty("Visible",false);
        //获取工作簿集合
        QAxObject *workbooks = excel.querySubObject("WorkBooks");
        workbooks->dynamicCall("Open (const QString&)",str);
        //获取活动工作簿
        QAxObject *workbook = excel.querySubObject("ActiveWorkBook");
        //获取工作表集合的工作表1,即sheet1
        QAxObject *worksheet = workbook->querySubObject("Sheets(int)",1);
        QAxObject *range; //获取cell的值
        QString strVal="hull";
        QStringList header;
        //设置初始表格行列都为0
        ui->tableWidget->setRowCount(0); //设置行数为0
        ui->tableWidget->setColumnCount(0); //设置列数为0
    
        int count =0;
        for(int i = 1;i<row;i++)
        {
        	//注意setRowCount里面的函数不是追加,而是总数,很多人最开始都把这个函数以为是总数,造成程序经常崩溃
            ui->tableWidget->setRowCount(ui->tableWidget->rowCount()+1);
            for(int j = 1;j<column;j++)
            {
                if(i == 1)
                {
                    ui->tableWidget->setColumnCount(ui->tableWidget->columnCount()+1);
                    range = worksheet->querySubObject("Cells(int,int)",i,j); //获取cell的值
                    strVal = range->dynamicCall("Value2()").toString();
                    header<<strVal;
                    //设置表格头
                }
                else
                {
                    probar->setValue(++count);
                    range = worksheet->querySubObject("Cells(int,int)",i,j); //获取cell的值
                    strVal = range->dynamicCall("Value2()").toString();
                    ui->tableWidget->setItem(i-2,j-1,new QTableWidgetItem(strVal));
                }
            }
            if(i == 1)
            {
                ui->tableWidget->setHorizontalHeaderLabels(header);
            }
        }
        ui->tableWidget->setRowCount(ui->tableWidget->rowCount()-1);
        }
    }
    
    

    代码中的工作表就是xls文件打开左下角的这个:
    在这里插入图片描述


    二. tableWidget表格数据导出为xls/xlsx文件

    在这里插入图片描述
    我们右击导入按钮,转到槽,添加被点击后的代码

    void MainWindow::on_pushButton_23_clicked()
    {
        //获取保存路径
           QString filepath=QFileDialog::getSaveFileName(this,tr("Save"),".",tr(" (*.xlsx)"));
           if(!filepath.isEmpty()){
               QAxObject *excel = new QAxObject(this);
               //连接Excel控件
               excel->setControl("Excel.Application");
               //不显示窗体
               excel->dynamicCall("SetVisible (bool Visible)","false");
               //不显示任何警告信息。如果为true那么在关闭是会出现类似“文件已修改,是否保存”的提示
               excel->setProperty("DisplayAlerts", false);
               //获取工作簿集合
               QAxObject *workbooks = excel->querySubObject("WorkBooks");
               //新建一个工作簿
               workbooks->dynamicCall("Add");
               //获取当前工作簿
               QAxObject *workbook = excel->querySubObject("ActiveWorkBook");
               //获取工作表集合
               QAxObject *worksheets = workbook->querySubObject("Sheets");
               //获取工作表集合的工作表1,即sheet1
               QAxObject *worksheet = worksheets->querySubObject("Item(int)",1);
               //设置表头值
               for(int i=1;i<ui->tableWidget->columnCount()+1;i++)
               {
                   //设置设置某行某列
                   QAxObject *Range = worksheet->querySubObject("Cells(int,int)", 1, i);
                   Range->dynamicCall("SetValue(const QString &)",ui->tableWidget->horizontalHeaderItem(i-1)->text());
               }
               //设置表格数据
               for(int i = 1;i<ui->tableWidget->rowCount()+1;i++)
               {
                   for(int j = 1;j<ui->tableWidget->columnCount()+1;j++)
                   {
                       QAxObject *Range = worksheet->querySubObject("Cells(int,int)", i+1, j);
                       Range->dynamicCall("SetValue(const QString &)",ui->tableWidget->item(i-1,j-1)->data(Qt::DisplayRole).toString());
                   }
               }
               workbook->dynamicCall("SaveAs(const QString&)",QDir::toNativeSeparators(filepath));//保存至filepath
               workbook->dynamicCall("Close()");//关闭工作簿
               excel->dynamicCall("Quit()");//关闭excel
               delete excel;
               excel=NULL;
               qDebug() << "\n导出成功啦!!!";
           }
    }
    
    展开全文
  • 将ArcGIS要素属性表快速复制到Excel中(全选->复制->粘贴)。
  • jquery导出excel(解决中文导出

    千次下载 热门讨论 2015-06-08 01:28:13
    网上下载的tableexport可以实现table的客户段导出功能,但由于所提供的base64无法实现中文导出,所以修改了base64编码,并修改了tableexport中使用base64部分,实现了对中文表格的导出功能
  • Greenplum数据库架构导出复制

    千次阅读 2018-10-25 11:36:48
    目的: 导出现场的GP数据库架构:包含表结构,函数,视图...2、查看现场数据库里多少模式schema(要根据现场实际的schema):如下图 3、利用gpadmin用户登录master主机,依次执行导出语句 pg_dump -E UTF8 -s...
  • Navicat导出MySQL表结构并复制到Excel表格,适合在写论文的时候,复制表结构
  • 虚拟机导出 虚拟机导入 虚拟机导出 点“开始”-“Windows管理工具”-“Hyper-V管理器”,打开“Hyper-V管理器”,或者打开“服务器管理器”-“工具”-“Hyper-V管理器”,打开“Hyper-V管理器” 我们打开“Hyper-V...
  • 在virtualbox上将虚拟机克隆和导出

    千次阅读 2021-11-28 01:00:35
    在virtualbox上将虚拟机克隆和导出
  • 问卷星的内容是无法直接复制的,本文介绍了如何通过官方提供的功能去导出问卷到word中
  • 说明:本文用于两个es环境的数据复制,两个es环境不能互通,但需要两个环境的某个es数据相同
  • 原标题:Sketch导入、导出使用方法技巧介绍Sketch for mac是应用在Mac上的矢量绘图软件,Sketch Mac版以简约的设计是基于无限的规模层次的绘图空间,调色板,面板,菜单,窗口控件,虽然使用简单,它提供了...
  • 得到app的文稿怎么下载复制导出

    千次阅读 2020-12-20 11:19:25
    得到app的课程文稿怎么下载复制导出决策的对错关系到战争的成败,所以《孙子兵法》强调 “知敌之情' 因为情报信息是决策的依据。作为一个企业决策者,其决策也绝不能凭空臆断,而应广泛收集商业情报信息,作出正确...
  • 使用pl/sql developer导出oracle数据库的表结构表数据时,一些勾选项供用户选择,需要用户根据实际情况进行勾选或取消。导出方法如下:一、只导出表结构1.使用pl/sql developer登陆数据库;2.选择Tools-》...
  • 参考:https://zhuanlan.zhihu.com/p/334751110 visio中的图另存为pdf 利用pdf编辑器将其转化为jpg图片或png图片 将图片复制到word
  • 原标题:ArcGIS关于影像导出有密密麻麻空洞问题下载的影像由于像素比较低,时候校正完成后需要重新导出一份影像数据,我们经常会遇到导出后影像全是黑色,或者Nodata值改为0后出现了密密麻麻的小洞洞(如图一),...
  • 我们在Workbench中建立好一个数据库后,如果想把这个数据库给别人用的话,就需要导出数据,为此Workbench为我们提供了数据导出功能,位于Server下的Data Export中: 选择之后,我们需要调试一些参数,这里可能会...
  • C++静态库动态库的导入导出

    千次阅读 2021-12-14 19:37:09
    C++静态库的导出导入。 C++动态库函数的导出导入。 C++动态库类的导出导入
  • Swagger导出wordexcel文档

    千次阅读 2022-03-28 12:40:48
    现在个需求是这样的:把接口接口描述放在表格里呈现出来,那么要么是excel的表格,要么是word的表格,两种格式都试一下 一、Excel格式 第三方的项目源码在这里:https://github.com/ghdefe/swagger-json-to-csv...
  • CSharp导出List数据到xml文件,详情请参考:http://blog.csdn.net/testcs_dn/article/details/43114091
  • 14.grafana导入导出 14.1.导出操作 14.2.导入操作 15.Grafana的安装Influxdb数据源配置 15.1.grafana介绍 15.2.grafana的下载安装 15.3.访问grafana测试 15.4.grafana配置influxdb数据源 16.grafana设置匿名登录...
  • UnityAS导出OBBAPK

    万次阅读 多人点赞 2021-03-22 11:15:34
    不知道obb是啥,也不知如何找到它里面的编码,如下:我们复制obb,修改后缀为.zip 解压改复制obb,剋看到目录下如下类似的命名文件,复制名字(id) 将复制的id粘贴到如下地方,替换原来的id AS导出apk 接下来我们...
  • DBeaver 导出数据库结构数据

    万次阅读 多人点赞 2021-10-14 16:46:27
    DBeaver 导出数据库结构数据 目录DBeaver 导出数据库结构数据一、导出表结构二、导出序列三、导出表数据 一、导出表结构 1、选择需要导出的表(可多选),右键“生成 SQL”——“DDL” 2、复制生成的 SQL ...
  • easyexcel导出文件(多个sheet导出

    千次阅读 2021-11-22 14:22:42
    <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>3.0.5</version> </dependency> 单个sheet ... .
  • 我们都是资源的搬运工,平时需要一些资料都会在网上查找,时候当我们找到一些想要的内容,却发现复制不了,不是要收费就是被限制。遇到这种情况怎么办?也许大多数人都会选择放弃,或者对照着内容手动打字。今天...
  • IDEA常用配置插件(包括导入导出

    万次阅读 多人点赞 2020-10-30 16:10:07
    每次换工作或者换电脑,都要重新设置一遍IDEA的配置,很多使用顺手的设置工具没有了会感到很是难受,然后又是各种百度、尝试,感觉十分繁琐麻烦。所以自己总结起来方便以后查找,也给大家提供一个便利的地方查找...
  • mysql workbench是mysql官方的管理工具,...(3)界面右边中间个选项可以选择导出结构还是数据结构都导出,如果只要结构,而选择了导出数据结构可能会浪费很长时间,所以这个一定要选择。 (4)右上角的进阶选项很
  • MYSQL导出表名(navicat 导出表名称)

    千次阅读 2021-01-19 05:51:17
    MYSQL如何只导出数据库中表的的名字?navicat中如何只导出数据库内表的名称,不导出字段名方式一:1、打开navicat,进入你想导出表名称的库内,新建查询;2、录入:showtables;3、点击运行,即可查询当前数据库中...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 208,319
精华内容 83,327
热门标签
关键字:

导出和复制有什么不同