Please or 注册 to create posts and topics.

规则将覆盖率与距离道路和边界的距离联系起来

规则将覆盖率与距离道路和边界的距离联系起来

您好,
根据标题,我正在尝试创建一条规则,该规则将大量的覆盖率与距离道路和边界距离的距离联系起来。我会说我是CityEngine的初学者。
现在,我通过阅读了几篇文章并关注了几个YouTube视频,已经处理了这一规则两个星期。我设法创建了一个规则,将公约分为5个部分。
建筑物被挤出的中心部分和其他4个自由零件。我将批次分为所有这些部分,以便可以调整到边界和道路的距离,并控制建筑物表面。
只有一个问题。控制并不完美,实际上要改变距离,我必须对不同地段的面积百分比采取行动。这很不方便,因为它不允许我直接在距离上行动。
作为初学者,我想知道是否有一种方法可以实现这一结果。
提前致谢

 

例如,您可以首先使用 Compute Edge属性工具获得包裹形状的方向。然后,以下规则使您可以定义最大的建筑物覆盖率和每侧的挫折距离。如果最大覆盖范围要比setbackperedge操作的其余部分较小,则挫折室挫折会通过setbacktoarea操作(深蓝色区域)增加。

thomasfuchs_1-1741250823630.png

 

version "2024.1"

const lotArea = geometry.area
@Description("Maximum ratio of footprint to parcel area") @Percent 
attr area_ratio = 0.5 
@Description("Minimum street setback") @Distance @Range(min=0, max=15) 
attr setback_front = 5
@Description("Excact side setback") @Distance @Range(min=0, max=15) 
attr setback_side = 10
@Description("Excact rear setback") @Distance @Range(min=0, max=15) 
attr setback_rear = 15

dist(orientation) = case orientation == "front"	: setback_front
                    case orientation == "side"	: setback_side
                    case orientation == "rear"	: setback_rear
                    else                   	 	: 0

@StartRule
SetbackPerEdge --> setbackPerEdge( dist( edgeAttr.getString("orientations") ) ) 
	{ edgeAttr.getString("orientations") == "front"	= Grey
	| edgeAttr.getString("orientations") == "side" 	= Yellow
	| edgeAttr.getString("orientations") == "rear"	= Green
	| remainder 	= SetbackToArea }

SetbackToArea --> setbackToArea(lotArea * area_ratio) 
	{ edgeAttr.getString("orientations") == "front"	= Blue 
	| remainder = extrude(10) Cyan }

您好,谢谢您的答复。

我尝试了你的规则。但这无效。我不知道为什么诚实。无论如何,我以某种方式设法使用该功能将其旋转:setbacktoarea(区域,识别,只有我必须妥协,就像优先级不是对覆盖率而是距离的事实。为了解决此Invonvenientè,我在规则中创建了报告,该报告向我展示了实际的覆盖率,因此我可以手动采取行动以获取我想要的覆盖率。

现在,我不知道是否有更精致的方法来达到相同的结果。如果您知道,我可以尝试。

但是现在我引起了一个其他问题的共鸣,在Prtica中,我需要将限制设置为距边界和道路的距离,基本上是根据Eficio的高度进行更改的距离,如果需要,我需要能够消除一个边界与另一个边界的距离。

为了更好地解释,我需要使距离适应我选择的高度,这是通过设置属性来完成的。到目前为止,我想在右侧取消距离并在左侧变得最大的距离时发现的问题。为了在边界建造建筑物。

实际上,我已经尝试使用@Enum函数和@Range函数,但是两者都无法捕获我的需求。后者为我提供了一个范围,另一方面,前者使我能够分解预定的数字值,我希望@Enum函数中的那些数字值具有互动性并符合我输入的输入数据,即ALT。

我希望我很清楚。

再次感谢您在社区中的欢迎,我希望能够与CityEngine创建自己的程序规则。