一、功能介绍
在云设计工具中,可以隐藏其他楼层只显示当前楼层,也可以显示所有楼层,便于查看整体空间效果
二、面向用户
所有用户
三、操作步骤
第一步:云设计工具中,选择3d视角,点击左下角楼层导航图标,点击显示全部楼层
第二步:点击完成后,画布中显示全部楼层
第三步:点击楼层导航图标,可以切换当前楼层以及隐藏楼层
注意:显示隐藏单个或全部楼层,除当前楼层外的其他楼层只支持预览,不可编辑
一、【功能上线日期】
2024年5月7日起,逐步开放给全量用户
二、【面向群体】
所有用户
三、【功能介绍】
CAD模版切换入口:工具右上角-鼠标移动到头像上-快捷键和鼠标-面板右上角-切换模版
为了帮助用户更快速的记忆快捷键,酷家乐提供了【CAD快捷键模版】,在CAD快捷键模版中,您可以延续CAD工具的操作习惯:
1、对于纯字母或者数字的快捷键,通过输入字母/数字+【空格】或者【回车】来激活功能;例如想要激活直墙功能,则需要依次按下【L】+【空格】
(由于部分硬件限制,同时按下多个键时会出现按键冲突,因此建议您输入时使用按下+抬起的操作,来依次输入字母/数字)
2、对于非纯字母或者数字的快捷键,则直接按键即可激活功能,例如想要复制模型,则按住【ctrl】+【c】即可激活
3、您可以自定义快捷键为多个字母/数字(至多3个)
最后,欢迎各位设计师朋友们对新版的快捷键提出宝贵的意见,可以在评论区留言。
一、毛发功能概述:
棚拍支持了毛发材质功能,对于一些复杂毛绒材质比如:灯芯绒、毛绒地毯、动物皮毛等都可通过该功能快速的实现。
效果参考:
二、面向用户:
棚拍合作用户
三、毛发功能详细说明:
1.功能入口:
(1)先在“后处理”参数面板中找到“渲染复杂材质”并点击“开启渲染”(如图所示)
(2)在对应需要生成毛发的材质参数下会多出两个开关:置换、毛发,开启“毛发”功能即可
注意:置换功能和毛发功能二者是互斥的,目前仅支持任选其一,可以按需使用.
2.开启毛发功能后会弹出以下参数:
具体参数介绍:
(1)毛发数量:代表材质对应模型部件上毛发生成的数量
(2)节数:代表单根毛发的节数,参数范围是:2—100.即节数越大毛发看上去越丝滑.常用参数为:5
(3)长度:指毛生成毛发的长短
(4)厚度:单根毛发的粗细.常用参数为0.1——0.3
(5)弯曲度:在重力参数的影响下,毛发的弯曲效果
(6)重力:毛发受到重力呈现下垂的效果
(7)锥度:影响发尖锥度的效果
(8)重力、方向、宽度、长度随机:用系数控制4个向量上的随机效果,其中方向、宽度、长度随机支持以通过黑白纹理遮罩来控制随机的效果比如:
这种是比较常用的方法通过纹理贴图快速实现特定的效果
(9)卷曲度:给毛发增加随机弯曲的效果
四、案例教学
五、注意事项
1.单个场景毛发总量不过超1亿,场景毛发总数量=节数*毛发数量*毛发部件数的总和。超出后对应的部件将不显示毛发效果
2.启用置换后毛发功能将不能使用,反之也是如此
3.过高的节数会限制毛发数量的最大值
4.支持毛发模型保存,不支持单独毛发材质保存下次调用需要重新设置参数
5.材质复制后毛发参数需要重新设置
一、功能介绍
在云设计工具中,可以通过相机设置功能实现缩放/旋转定位、视图模式切换、移动参数调节等核心功能,实现设计视角的精准控制
二、面向用户
所有用户
三、功能详述
1、入口
1)在云设计工具中,3D视角下,点击底部工具栏中的相机设置
2)在云设计工具中,3D漫游视角下,点击底部工具栏中的相机设置,可以使用裁剪深度工具
注意:相机设置中包含了基础的相机偏好设置能力,用户可以根据自己的使用偏好来进行设置。这里所指的相机可以类比真是的拍摄场景中相机的使用,通过调整参数来达到想要的视觉效果
2、设置缩放中心
缩放中心有画布和鼠标两种模式
1)画布:以相机聚焦的中心点位置缩放,缩放操作不会触发相机中心点的移动,只改变相机与中心点的距离
2)鼠标:以鼠标所在位置作为中心点缩放,缩放操作会移动相机聚焦的中心点位置,并改变相机与中心点的距离
注意:缩放中心详细操作见教程文档:点击查看
3、设置旋转中心
1)旋转中心为画布
围绕相机聚焦的中心点位置旋转,旋转操作不会触发相机中心点/高度、相机中心点与相机之间距离的变化,只改变相机的所在位置(X、Y、Z轴)
2)旋转中心为鼠标
以鼠标按下时的所在位置作为中心点旋转,通常大家在家装中设定的相机中心/高度位置1300,在使用此模式进行旋转时,鼠标所在位置在3D相机所在射线位置是计算所得,将改变相机中心点/高度、相机的所在位置(X、Y、Z轴)
4、锁定相机旋转开启
点击相机设置,开启锁定相机旋转后不可以使用鼠标旋转操作
5、设置移动速度
点击相机设置,滑动移动速度轨道,可以控制缩放时相机的移动速度,移动速度影响鼠标滚轮移动以及触控板手势在相同的操作距离时的步进值
6、设置视图效果
视图效果有透视和正交两种模式
1)透视:模拟物理世界的规律,将眼睛或相机抽象成一个点,此时视锥体内的物体投影到视平面上的物体满足近大远小的规律
2)正交:所有投影射线都平行,物体大小不随距离变化而变化
7、调整视野
拉动视野轨道,调整至需要的视角
模拟透视相机在人眼、标准相机、广角相机的可视范围及效果
8、调整高度
拉动轨道,调整至合适的高度
相机聚焦的中心点所处Z轴高度(非相机所处Z轴高度)
9、设置裁剪深度
设置相机视锥中最近的可视点,去除不需要的部分,例如在希望观察较小的房间全景或单面墙的设计可以通过裁剪深度去除墙体的遮挡(当前仅支持3D漫游,后续持续迭代优化)
一、功能概述
棚拍实时预览支持人/动物ai增强
模型支持拖拽连续复制
支持skp模型在拆分界面下保留层级信息
棚拍工作台优化:增加学习帮助入口等
二、面向用户:
棚拍合作用户
三、详细说明:
1.棚拍实时预览支持人/动物ai增强
棚拍模型公库的【模特】类目,包括【人物模特】和【宠物模特】,该类目下的所有模型支持直接在实时渲染窗口预览AI增强后的效果,渲染结合AI,让AI成为渲染的一部分
注:该功能通过白名单方式开放,如有对该功能感兴趣的商家用户,请联系您的专属商务经理开通白名单进行体验
2.模型支持拖拽连续复制
点击工具右上角帮助可以查看复制相关快捷键
拖拽连续复制快捷键:option
选择需要被复制的模型后,按住option键时,工具页面鼠标箭头处会出现一个“➕”,即代表已出发点「拖拽连续复制」功能
可以拖拽模型任意方向连续复制
也可以拖拽模型,沿着模型的XYZ三个轴向进行连续复制
3.支持skp模型在拆分界面下保留层级信息
4.棚拍工作台优化
新增活动速递模块:每月公开课、产品交流会等活动可以直接点击预约报名
新增导航图标:放置鼠标左键即可查看各种学习教程、功能更新文档
客服入口更直接:直接点击“客服”即可召唤棚拍智能客服,连续输入2次人工即可召唤真人客服在线实时答疑
注意,您正在阅读的文档属于设计的早期阶段,不保证功能的稳定性,也不保证功能后续的发展方向!
一、功能介绍
1、功能简介
NCQL是一款用于分析模型数据,分析模型是否满足某种特征的查询语言。它采用和参数化编辑器相似的公式语法,任何熟悉参数化建模的用户,都可以轻松上手使用NCQL。NCQL不仅可以识别模型有哪些特征,还能将相关联的数据记录下来,以方便地定位模型及其有问题的部分。
一段 NCQL 脚本,在本质上,是一个布尔(Bool)表达式,它接收一个模型的数据,判断模型是否满足某类特征。如果模型满足某类特征,则将它记录下来。
NCQL 集成开发环境教程:点击查看
2、什么是NCQL?
1)简单的NCQL,如下图:
需求:找到真分类为背板(id 为 785),且参数D 不在 18~25之间的模型
prodCatId == 785 AND (#D < 18 OR #D > 25)
这条例子为我们展示了,NCQL可以使用与建模公式非常相似的表达式语法,来实现模型特征的分析。
2)复杂的NCQL,如下图:
需求:寻找子部件尺寸超限的模型
// 寻找部件尺寸默认状态下超限的模型
findAnyOf subModels {
findAnyOf parameters {
allTrue {
name == "W" || name == "D" || name == "H"
// parameter 的方法,用于判断
overLimited()
} -> mark "尺寸超限"
}
}
二、面向用户
全体参数化编辑器建模的用户
三、操作步骤
1、数据类型
1)基本类型
对于参数的值,NCQL 提供和建模相同的数据类型。其中常用的有以下几种:
类型 名称 解释
float 浮点数
可以为小数的数字,符合 IEEE 754 浮点数标准,可以用于数学运算。
同建模的浮点数类型。
int 整数
整数,不允许有小数。可以用于数学运算。
同建模的整数类型
string 字符串
可以表示一组任意的字符,常用于型号、编码。
同建模的字符串类型
bool 布尔值
可以表示是(true) 或 否(false),可以进行布尔运算(与AND、或OR、非 NOT)。
同建模的布尔类型。
booleanlist 多布尔
可以表示多个布尔值的组合 。只能用内置函数来操作。
同建模的多布尔类型。
material 材质
表示对材质商品的引用。可以读取材质商品的属性
同建模的材质类型。
shape 轮廓
表示对轮廓商品的引用。可以读取材质商品的属性
同建模的轮廓类型。
style 样式
表示对模型商品的引用,可以读取模型商品的属性
同建模的样式类型。
List<?>
列表
List 用来表示一组相同类型的数据。在建模中虽然无法直接使用这种类型,但参数是一个列表,子模型也是一个列表。
null 空 null本身不属于任何类型,它表示不存在。如,模型上没有KK变量的话, #KK 的值就为 null
2)复杂类型
如果只有基本数据类型就好了,但可惜,真实的世界并不是只有像原子这样的微观粒子,而是由不同种类的微观粒子组合成新的个体,再不断向上组合的。比如我们人类是由不同种类的细胞组成的,而细胞又是由不同的分子组成的,分子又是由不同的原子组成的。
和真实的世界类似,模型的结构也是复杂的,由多个部分组成。一个父模型大致可以看作是由一组变量、一组子模型、一组属性组成的,而一个子模型,又是由一组变量、一组属性组成的。NCQL 聚焦于参数化模型编辑器中能看到的模型信息,因此子模型的子模型,不会在这里出现。
完整的数据结构文档,可以参考在线代码编辑器底部栏。
3)理解参数的表达式、当前值、计算值
在模型数据结构文档中,当你阅读到参数(Parameter)的数据结构时,可能会感到疑惑,总共有三个字段:value、parsedValue、expression用于描述参数的值。这是因为一个参数化模型,在不同的使用场景,有不同的数据表现。
后台建模时,建模师会编写表达式(expression),定义参数之间的计算逻辑和约束关系。
而到了设计工具中,模型会被“实例化”,模型上的表达式将会被计算为一个有类型信息的计算值(parsedValue)。
同时,这个计算值会被转化为字符串,作为参数的当前值(value)。
一个示例如下图所示:在建模中,参数W和D都是公式类型,建模师编写的表达式分别为"300 + 400.5" 和 "#W + 1",而模型实例化后,这两个表达式分别被计算为两个 float 类型的值: 700.5 和 701.5。这两个值被放置到 parsedValue 字段。这两个值被转化为 "700.5" 和 "701.5" ,放置到 value 字段中。
以 W 为例,将这些数据组合到一个 Parameter 中,组合后的数据如下(其他字段省略):
{
"name": "W",
"type": "float",
"expression": "300 + 400.5",
"parsedValue": 700.5,
"value": "700.5"
}
4)编写安全的 NCQL
模型数据中,大部分可以直接访问到的字段,类型都在文档中有明确的声明。但唯独参数的 parsedValue 是什么类型,我们是无法提前分析得知的。
在 name.contains('万能柜') 这条表达式中,我们通过文档得知模型的 name 字段,类型是字符串,因此我们可以安全地调用 contains 方法,不用担心是否写错。
虽然参数的计算值是有可能是任意类型,但是有计算值的地方,一般都有一个 type 字段来表示这个 parsedValue 的类型,你可以通过读取 type字段来获取参数类型。
在以下的案例中,展示了先获取参数的类型,再判断参数的计算值是否大于1000。(此案例中表达式 "." 的语法,在下文 表达式 章节会讲解)。
// 假设有一个叫做 A 的变量,表示某个 FParentParameter
#A.type == "float" && #A.parsedValue > 1000
2、变量
1)NCQL 的和模型的建模表达式非常像,在建模中,你可以通过 '#' 读取各种数据,如 "#W" 代表读取参数W的值。在NCQL中,我们同样支持这种写法,并把这些可以使用 '#' 读取的数据,称作变量。变量有变量名和变量值。为了方便使用,系统会预置一些变量:
变量名:model,变量值:当前查询的主体,即当前查询的模型。
当前模型的所有参数,都会作为一个变量,预置到查询环境中。
对于每个参数来说,变量名:参数名,变量值:参数的计算值(parsedValue)。
2)假设有以下模型,有 W、D、H、materialBrandGoodId 四个参数,则系统内置的变量有:
model,变量值:当前查询的模型 FParentModel;
W,变量值:当前查询的模型参数 W 的计算值 parsedValue;
D,变量值:当前查询的模型参数 D 的计算值;
H,变量值:当前查询的模型参数 H 的计算值;
materialBrandGoodId,变量值:当前查询的模型参数 materialBrandGoodId 的计算值。
需要注意的是,由于parsedValue的类型不确定性,除非你非常确定某个参数的类型(如W、D、H 肯定是float类型),请谨慎直接使用这些变量。
3、注释
NCQL 支持注释,注释就是对 NCQL 的解释和说明,其目的是让你能够更加轻松地阅读、编写NCQL。注释不会被 NCQL执行器识别,不会影响到 NCQL 执行器的工作流程。
语法定义:以双斜杠 “//”开头,到一行的结尾,如下图:
// 这一行是注释,不会被NCQL执行
#W > 6000 // 行末的这部分也是注释,同样不会被执行
4、基于建模公式扩展的表达式语法
1)NCQL 的表达式,扩展自参数化建模公式语法。如:
#W + #D < 1000,是一个布尔类型的表达式,含义为判断模型参数 W 和 D 的和是否小于1000,计算结果为 true 或 false;
#W + #D + 1.0 是一个浮点数类型的表达式,含义为计算模型参数 W 和 D 的和,并加上 1.0,计算结果为浮点数。
2)与参数化建模的公式相同的是,NCQL 使用#变量名 来引用当前上下文中可用的变量,用 #函数名(参数1, 参数2, ...其余参数) 来调用函数。
3)与参数化建模不同的是,NCQL 的表达式进行了一些扩展,允许使用以下更高级的特性:
可以使用 字段名 来获取某个变量的的字段值。如:
#model.prodCatId == 735 来判断 model 变量的 prodCatId 是否为 735
#model.name == '万能柜'来判断 model 变量的 name 是否为 '万能柜'
在已知类型的变量上,可以调用变量支持的方法。如:
#model.getParamValue('W') ,表示调用 model 变量的 getParamValue 方法,并传入参数 'W'
#str.contains('a') 表示调用 str 变量的 contains 方法,并传入参数 'a'。
4)具体哪些类型,有哪些方法可用,见各个数据类型的文档。
需求一:找到真分类为999,并且参数W、D、H中有任意一个大于1000的模型
参考答案如下:
#model.prodCatId == 999 AND (#W > 1000 OR #D > 1000 OR #H > 1000)
需求二:找到有WLH变量,并且WLH是整数类型的模型
参考答案如下:
#model.paramType("WLH") == "int"
需求三:找到名称等于 "万能柜",或名称包含 "下柜" 的模型
参考答案如下:
#model.name.contains("下柜") OR #model.name == "万能柜"
5、查询主体
1)上述的例子中,读取模型上的字段,或调用模型的方法,都需要指定前缀 “#model.xxx" 。有没有一种办法,能简化这些表达式呢? 答案是 查询主体。在NCQL中,每一行表达式都会作用一个查询主体,查询主体默认为 model。
2)你可以直接省略前缀,来读取当前查询主体上的字段。下图展示了一个示例的模型数据,以及三组含义相同的表达式:
3)虽然使用基于查询主体的省略表达式,可以让NCQL变得更加简洁易写,但需要注意的是,查询主体增加了理解成本,如表达式 “name” 是读取当前查询主体的name字段,而表达式 “#name” 是读取名为name的变量。并且查询主体可能会发生切换(见下文的”子查询块“),因此在使用时,需要更加小心。
6、查询块
1)一般而言,一条查询语句是完全不够分析模型的。我们需要将多条查询语句以灵活的方式进行组合。NCQL 中,查询块(queryBlock)就是用来实现查询语句的组合的。同时,过长的表达式难以阅读、编写与理解,使用查询块,可以优化查询语句的结构,使其更加清晰。
2)查询块本身返回一个bool值,它的语法如下,以匹配方式开头,以 { 和 } 包裹。
匹配方式 {
查询语句1
查询语句2
...
查询块1
查询块2
...
子查询块1
子查询块2
...
}
3)匹配模式包含以下三种:
allTrue:当查询块中的所有查询,都为true时,查询块为true,否则为false
anyTrue:当查询块中的任意一个查询为true时,查询块为true,否则为false
noneTrue:当查询块中的所有查询都为false时,查询块为true,否则为false
4)查询块内部,可以由多种不同的查询自由组合而成:
查询语句:布尔类型的表达式,不能换行。
查询块:递归的查询方式,以匹配模式开头,以 { 和 } 包裹。即查询块内部,还可以继续嵌套查询块
子查询块:见 子查询块 章节。
5)假设有如下复杂的表达式:
// 假设当前查询主体为某个参数
(paramTypeId == 1 && parsedValue < min && parsedValue > max)
// 注意,这里为阅读方便,在 OR 之前使用了换行
// 你在实际编写脚本的时候不能有这个换行
OR paramTypeId == 2 && !optionValues.contains(value);
可以使用查询块来优化,使其更加清晰:将表达式从 || 进行拆分,最后使用 anyTrue 来表示或的关系。
// 假设当前查询主体为某个参数
anyTrue {
// 当参数的值类型为区间的时候,判断参数的值是否在区间内
paramTypeId == 1 && parsedValue < min && parsedValue > max
// 当参数的值类型为可选的时候,判断参数的值是否在选项列表中
paramTypeId == 2 && !optionValues.contains(value)
}
进一步优化,将内部的两条查询语句,可以从 && 进行拆分,使用 allTrue 来表示与的关系。
anyTrue {
allTrue {
paramTypeId == 1 // 1为区间
parsedValue < min && parsedValue > max
}
allTrue {
paramTypeId == 2 // 2为可选
!optionValues.contains(value)
}
}
如果只是优化复杂的查询语句,那查询块的威力还不足以体现。真正需要它的地方,是下一节介绍的 子查询块 。
7、子查询块
子查询块同样返回一个布尔值,允许在查询块中深入模型结构,从而实现较为复杂的查询逻辑。子查询块大多数情况下,用于检查List字段,如模型的参数列表、子模型列表。
子查询块同样可以看成一条流水线,NCQL会尝试把List字段的每个元素,使用子查询块内部的判断条件进行检查。最终通过 查询方式,来确定最终返回的布尔值是什么。
1)子查询块 语法定义
子查询块的语法如下,以 查询方式 开头,以 { 和 } 包裹。包括可选的数据转换、可选的查询对象命名功能。
查询方式 要查询的字段 (as 查询对象命名)? {
查询块
}
2)子查询查询方式
其中最核心的部分,即为查询方式。查询方式包含以下四种:
findAnyOf:用于查询对应多个值的字段,如参数列表。当列表中任意一个值满足查询条件时,查询块为true。
findAllOf:用于查询对应多个值的字段,如参数列表。当列表中所有值都满足查询条件时,查询块为Ttrue。
findNoneOf:用于查询对应多个值的字段,如参数列表。当列表中所有值都不满足查询条件时,查询块为true。
find:用于查询对应单个值的字段,如模型商品ID。当查询条件为true时,查询块为true。
这些查询方式的使用,如下图所示:
3)子查询切换查询主体
子查询的设计用意在于深入模型的结构,因此它能够自动切换当前查询的主体。如以下例子所示:
示例1:查询主体切换到某个参数
allTrue {
prodCatId == 123 // 当前查询主体,还是model,因此 prodCatId 字段是模型的真分类
findAnyOf parameters {
// 在 findAnyOf 触发的子查询块中,当前查询的主体是每一个参数
allTrue {
// 此时,name字段表示参数的name字段,即参数名
name == "W" || name == "D" || name == "H"
paramTypeId == 5
}
}
}
示例2:查询主体切换到某个子模型
如以下模型结构:
当查询语句如下时:
allTrue {
// 当前查询的主体是顶层柜体,name字段的值为 "柜体"
name == "柜体"
findAnyOf subModels {
// 在 findAnyOf 触发的子查询块中,当前查询的主体是每一个子模型
// 因此,当判断到左门板时,当前查询的主体是左门板,name字段的值为 "左门板"
// 当判断到右门板时,当前查询的主体是右门板,name字段的值为 "右门板"
name == "左门板"
}
}
需求一:找到有子模型名称和父模型名称完全一样的模型
参考答案如下:
findAnyOf subModels {
name == #model.name
}
需求二:找到子模型全部被抑制的模型
参考答案如下:
findAllOf subModels {
suppress == true
}
需求三:找到有任意子模型,子模型叫做”背板“,并且该子模型有叫做 WLH的参数的模型
参考答案如下:
findAnyOf subModels {
allTrue {
name == "背板"
findAnyOf parameters {
name == "WLH"
}
}
}
需求四:找到有任意子模型被隐藏的模型
参考答案如下:
findAnyOf subModes {
ignore == true
}
4)子查询查询对象命名
子查询在查询的过程中,还可以为当前正在查询的变量进行命名。在子查询块声明语句中,最后面加一个 as 变量名。如以下例子中,当前正在查询的参数,被命名为了p。因此 #p.paramTypeId == 5 和 paramTypeId == 5 是完全等价的两个表达式。
findAnyOf parameters as p {
#p.paramTypeId == 5 OR paramTypeId == 5
}
它的意义在于,当你需要嵌套子查询时,由于查询主体发生了切换,在内层的子查询,是无法直接读取外层子查询主体的字段的。在这种情况下,我们可以为外层子查询的主体进行命名,这样我们可以实现更复杂的查询。
findAnyOf subModels as subModel {
allTrue {
// 此处,name表示subModel的name字段,和 #subModel.name 等价
name == "下柜"
findAnyOf parameters {
// 这里name字段,是读取的当前查询主体(parameter)的name
// 想读取外层子查询主体的name,需要使用 #subModel.name
name == #subModel.name
}
}
}
需要注意的是,子查询块声明的变量,只在子查询块中有效。在此子查询块外的表达式,将无法使用这个变量。具体见章节变量作用域
需求:找到有子部件的位置,引用了子部件自身模型参数的模型
参考答案如下:
findAnyOf subModels as m {
allTrue {
refName.isNotBlank()
anyTrue {
position.xExpression.contains("@self" + #m.refName)
position.yExpression.contains("@self" + #m.refName)
position.zExpression.contains("@self" + #m.refName)
}
}
}
8、变量声明
1)变量声明属于高阶特性,大多数场景不需要使用变量声明。
2)NCQL 允许在查询脚本中的大部分位置定义变量,变量可以在表达式中使用。当变量声明语句出现在查询块中时,它只是简单地向环境中设置变量,不会影响当前查询块的判断。
3)定义变量的语法是:
let 变量名 = 表达式
4)如:
let a = #model.getParameter('W').min;
let b = #model.getParameter('D').max;
let c = #W + #D;
let names = #listOf('W', 'D', 'H');
9、变量作用域
1)NCQL 中声明的变量,作用域是当前查询块。如果在子查询块中声明的变量,则只在当前子查询块中生效。
2)在以下示例中,我们展示了 NCQL 中变量的作用域规则。变量 a 在外层查询块中被声明并赋值为 1,而变量 b 则在内层的 findAnyOf 查询块中被声明并赋值为 2。
allTrue {
let a = 1; // 变量 a 在此作用域内可用
findAnyOf parameters {
let b = 2; // 变量 b 仅在此子查询块内可用
allTrue {
#a == 1 // 访问外层的变量 a,值为 1
#b == 2 // 访问内层的变量 b,值为 2
}
}
// 这里无法访问到 b 变量,因为 b 的作用域仅限于 findAnyOf 子查询块
#a == 1; // 仍然可以访问变量 a
}
3)在这个示例中,#a 可以在外层查询块中被访问,而 b 只能在其声明的 findAnyOf 子查询块中使用。这说明了 NCQL 中变量的作用域是局部的,子查询块中的变量不会影响外层查询块的变量。
10、查询后操作
1)当你在NCQL中分析得到模型有某种特征时,你可能会希望记录一些信息。这时你可以使用mark语法来记录这些信息,这些信息将会出现在批量分析结果的 Excel 表中。
2)查询后操作的语法定义如下:它可以跟在布尔表达式、查询块、子查询后面。当这些查询块计算结果为 true 时,查询后操作中的指令将会被执行。
布尔表达式 -> mark 字符串或 Marker 函数
查询块 -> mark 字符串或 Marker 函数
子查询 -> mark 字符串或 Marker 函数
3)看下面的这段脚本。比如,当你发现某个部件的某个参数超出了限制,你希望记录下来这个参数的名称。这时,你可以使用 “查询后操作” 语法的 mark。如以下脚本所示,这里我们使用字符串拼接操作,记录了超限的部件名和参数名。
如果部件的尺寸确实超限了,那么 allTrue 后的 mark指令将会被执行。 分析结果的excel表中,会出现如“部件 【左侧板】的参数【宽度】超限”的文案。
// 寻找部件尺寸默认状态下超限的模型
findAnyOf subModels as s {
findAnyOf parameters as p {
allTrue {
name == "W" || name == "D" || name == "H"
overLimited()
} -> mark "部件【"+#s.name+"】的参数【"+ #p.displayName+"】超限"
}
}
4)在 → mark 后,你可以简单地写字符串,也可以根据信息的严重程度,来使用不同的mark函数。我们提供了三种严重程度的mark:
信息(即 info):这代表简单地记录一些信息。你可以使用 mark -> 字符串 的语法来记录info。
警告(即 warn):这代表记录的信息是不太严重,但需要关注的问题,你可以使用 mark -> #warn(字符串) 的函数来记录警告。
错误(即 error):这代表记录的信息是严重的错误,必须尽快修复。你可以使用 mark -> #warn(字符串) 的函数来记录错误。
5)如下例子所示,如果部件商品被删除了,在设计工具中无法正常使用。所以这是一种严重的错误,使用 #error 函数来记录。
findAnyOf subModels {
#relatedProduct(brandGoodId).deleted -> mark #error("部件被删除")
}
一、功能介绍
参数化建模经常有套层。底层模型的修改和更新通常面临一些问题
1、当底层模型修改入库后,需要一层一层向上更新,操作效率非常低
2、有时候因为不知道影响哪些上层模型,底层模型也不敢修改更新
这些问题都将被模型关系图解决:您可以查看一个模型在哪些模型里作为部件使用,并可一直上溯到最顶层的模型。基于这个图,您可以
1、修改该模型的影响范围一目了然
2、使用我们提供的配套更新能力,快速完成上层模型的部件更新
二、面向用户
有参数化编辑器的商家用户
三、功能描述
1、入口
入口1:
参数化编辑器->顶部栏->校验->查看引用
从这里进入时,编辑器打开的当前模型将作为关系图的起点
入口2:
定制商品库-高级配置-变量与数据-模型更新标签页
从这里进入时,可以选择指定模型作为关系图起点(详见下一小节)
2、功能布局
3、选择起点模型
可以直接输入模型的商品id,多个id用空格分开。然后点击【查询】按钮
也可以点击【选择底层模型】从商品库中选择模型。可以多选
4、关系图
1)图的组织逻辑
关系图的逻辑为:起点模型向上寻找关联的父模型
例如下图,底层板件在3个板件模型里作为部件使用;3个板件又在柜体里作为部件使用。至于柜体里可能还有其他部件,不会显示在此图内
2)图节点的状态
节点的缩略图上有模型的状态标签,和编辑器打开模型一致。如果有模型的部件需要更新,这里会展示灰色的【待更新】标签
3)图节点的选择高亮逻辑
选择关系图内的节点A,会同时选择从起点到A路径上的所有模型,即A的子模型、孙模型
例如下图,如果只对“双层板”做部件更新,侧板和背板都不会更新部件
下图中,选择柜体,底层板件和中间的3个板件也会被选中
5、批量选择
当关系图比较大时,单点选择去执行更新,效率还是低了些。因此可以使用批量选择功能,快速选中一层的节点。注意,选中一层节点,同时也会选中它们的子孙模型节点。
6、批量更新
选中模型节点后,即可执行批量更新部件的任务
7、历史任务
发起的批量更新部件任务,可以在【查看历史任务】里跟进状态
单条任务可以点击【查看】了解每个模型的更新进度
注意,当任务中的模型等待更新时,不要在编辑器里修改模型,以免冲突
一、功能介绍
功能简介:如何进入方案详情页面?本教程为您解决
操作路径:从工作台的位置,点击我的方案的进入方案详情的页面,
二、面向用户
所有用户
三、图文操作步骤
第一步:从网站首页进入工作台。
第二步:点击我的方案,选择方案可以直接点击进入方案详情页。
1、柱子参与房间围成
云设计4.0中,柱子和墙没有融合关系,不参与房间的围成;
云设计5.0中,柱子和墙体有融合关系,参与房间的围成关系。
2、矮墙不再划分房间
云设计4.0中,矮墙会对分割房间;
云设计5.0中,矮墙在房间内不再起分割作用;分割房间可使用房间分割线。
3、梁对房间顶面的划分
云设计4.0中,横梁不会对顶面产生任何影响;
云设计5.0中,梁带有参数并会影响该房间的顶面区域,如图上对顶面进行区域划分。
4、墙体连接关系
如图所示,4.0和5.0在2D界面下墙体连接,以及3D界面下墙面编辑方式都不一样。
全教程传送门
一、功能介绍
功能简介:如何设置户型的单位?本教程为您解决
操作路径:点击云设计页面,右上角点击头像,选择偏好设置,通用里可设置方案单位
二、面向用户
所有用户
三、图文操作步骤
第一步:点击户型操作页面,选择右上角头像,点击偏好设置。
第二步:选择通用,点击单位展开可设置方案单位。
一、功能介绍
户型设计工具中可以选择导入cad文件或者导入图片生成户型,在绘制户型时节约时间,极大提高了工作效率
二、面向用户
所有用户
三、操作步骤
1、入口
入口一:在工作台页面,点击右上角开始设计,弹出新建方案视窗,选择导入图纸
入口二:进入室内设计户型界面后,点击左上角导入图纸,选择需要的户型文件导入
2、上传文件格式要求
点击左侧栏“导入户型”栏下的“导入图纸”,在文件管理弹窗中上传一个或多个相同格式的文件
支持用户上传的图纸格式有:
1)CAD文件:dwg、dxf,导入文件的具体格式要求可见:点击查看
2)图片文件:png、jpg、jpeg、webp
3)pdf文件
3、导入CAD文件进行智能识别/底图临摹
在户型工具中,点击左侧栏的导入图纸,在弹出的面板选择需要的文件点击确定,然后在弹出的面板上选择识别并生成户型/仅导入图纸模式,点击确认即可
导入CAD文件识别生成户型详细操作可见教程文档:点击查看
导入CAD底图手动临摹详细操作可见教程文档:点击查看
4、导入图片进行智能识别/手动临摹
在户型工具中,点击左侧栏的导入图纸,在弹出的面板选择需要的图片,导入png/jpg/jpeg后,弹窗左侧出现图片的预览图,支持图片的旋转、重新上传等操作,设置完成后点击确定,再次在弹出的面板上选择识别并生成户型/仅导入图纸模式,点击确认即可
导入图片识别生成户型详细操作可见教程文档:点击查看
导入图片手动临摹详细操作可见教程文档:点击查看
一、功能介绍
户型墙体、柱子等在复制时,可以选择同步复制建筑面上的硬装铺贴或造型,提升设计效率
二、工具版本
云设计5.0,
三、操作步骤
1. 以柱子为例:完成硬装造型设计
2.进入2D视角选中柱子,点击“复制”,子菜单选择“复制对象和硬装”
3.进行复制后,将同时复制硬装造型
注:目前仅墙体、柱子、梁、烟道支持该功能