【Rhino】【Python】Create a series of Blocks according to Value of object Property

文章目录

    • 1. Complete Code Display
    • 2. Detailed Code Analysis
      • 2.1 Import and Setup
      • 2.2 Function Structure and Initial Setup
      • 2.3 Object Collection and Filtering
      • 2.4 Story Management System
      • 2.5 Locating Point Processing
      • 2.6 Object Organization by Story
      • 2.7 Block Creation System
      • 2.8 Block Assembly and Placement
    • 3. Key Technical Concepts
      • 3.1 Data Organization
      • 3.2 Error Handling
      • 3.3 Automation Features
    • 4. Best Practices Demonstrated
    • 5. Practical Applications
      • 5.1 BIM Integration
      • 5.2 Drawing Management
    • 6. Further Development Possibilities
    • 7. Conclusion

在这里插入图片描述
在这里插入图片描述

1. Complete Code Display

#coding=utf-8import rhinoscriptsyntax as rs
import scriptcontext as sc
import datetimedef create_blocks_by_story():timestamp = datetime.datetime.now().strftime("%Y%m%d")parent_layer = "01 STR. LINE LAYOUT(FOR FEM)"if not rs.IsLayer(parent_layer):rs.AddLayer(parent_layer)# Get all objectsall_objects = rs.AllObjects()etabs_objects = []locating_points = []# Filter Etabs objectsfor obj in all_objects:obj_name = rs.ObjectName(obj)if obj_name and obj_name.startswith("Etabs"):if obj_name == "Etabs locating":locating_points.append(obj)else:etabs_objects.append(obj)if not etabs_objects:print("No objects with names starting with 'Etabs' found")returnstory_dict = {}story_base_points = {}story_locating_points = {}# Process locating pointsif locating_points:for point in locating_points:if rs.ObjectType(point) == 1:story_value = rs.GetUserText(point, "Story")if story_value:point_coord = rs.PointCoordinates(point)story_base_points[story_value] = (0, 0, 0)story_locating_points[story_value] = point# Sort objects by storyfor obj in etabs_objects:story_value = rs.GetUserText(obj, "Story")if story_value:if story_value not in story_dict:story_dict[story_value] = []story_dict[story_value].append(obj)# Create blocks for each storyfor story, objs in story_dict.items():if len(objs) > 0:if story not in story_base_points:print("Warning: No base point found for Story {}".format(story))continueblock_name = "Story_" + str(story)layer_name = "{}::{}_{}_{}".format(parent_layer, block_name, timestamp, "block")if not rs.IsLayer(layer_name):rs.AddLayer(layer_name)copied_objs = [rs.CopyObject(obj) for obj in objs]if story in story_locating_points:copied_objs.append(rs.CopyObject(story_locating_points[story]))base_point = story_base_points[story]block_ref = rs.AddBlock(copied_objs, base_point, block_name, True)instance = rs.InsertBlock(block_ref, base_point)rs.ObjectLayer(instance, layer_name)print("Created block '{}' with {} objects on layer '{}'".format(block_name, len(copied_objs), layer_name))if etabs_objects:rs.DeleteObjects(etabs_objects)print("All original objects have been deleted")create_blocks_by_story()

2. Detailed Code Analysis

2.1 Import and Setup

#coding=utf-8
import rhinoscriptsyntax as rs
import scriptcontext as sc
import datetime
  • UTF-8 encoding for international character support
  • Essential Rhino scripting tools
  • Datetime for timestamp generation

2.2 Function Structure and Initial Setup

def create_blocks_by_story():timestamp = datetime.datetime.now().strftime("%Y%m%d")parent_layer = "01 STR. LINE LAYOUT(FOR FEM)"

Purpose:

  • Creates unique timestamps for versioning
  • Establishes parent layer structure

2.3 Object Collection and Filtering

all_objects = rs.AllObjects()
etabs_objects = []
locating_points = []for obj in all_objects:obj_name = rs.ObjectName(obj)if obj_name and obj_name.startswith("Etabs"):if obj_name == "Etabs locating":locating_points.append(obj)else:etabs_objects.append(obj)

Features:

  • Collects all Rhino objects
  • Separates locating points from other Etabs objects
  • Implements smart filtering system

2.4 Story Management System

story_dict = {}
story_base_points = {}
story_locating_points = {}

Data Structure:

  • story_dict: Maps stories to their objects
  • story_base_points: Stores reference points
  • story_locating_points: Manages locating points per story

2.5 Locating Point Processing

if locating_points:for point in locating_points:if rs.ObjectType(point) == 1:  # Point object checkstory_value = rs.GetUserText(point, "Story")if story_value:point_coord = rs.PointCoordinates(point)story_base_points[story_value] = (0, 0, 0)story_locating_points[story_value] = point

Key Features:

  • Validates point objects
  • Extracts story information
  • Sets up reference coordinate system

2.6 Object Organization by Story

for obj in etabs_objects:story_value = rs.GetUserText(obj, "Story")if story_value:if story_value not in story_dict:story_dict[story_value] = []story_dict[story_value].append(obj)

Process:

  • Reads story metadata
  • Groups objects by story level
  • Creates organized data structure

2.7 Block Creation System

for story, objs in story_dict.items():if len(objs) > 0:block_name = "Story_" + str(story)layer_name = "{}::{}_{}_{}".format(parent_layer, block_name, timestamp, "block")

Features:

  • Dynamic block naming
  • Hierarchical layer structure
  • Timestamp integration

2.8 Block Assembly and Placement

copied_objs = [rs.CopyObject(obj) for obj in objs]
if story in story_locating_points:copied_objs.append(rs.CopyObject(story_locating_points[story]))base_point = story_base_points[story]
block_ref = rs.AddBlock(copied_objs, base_point, block_name, True)
instance = rs.InsertBlock(block_ref, base_point)

Process:

  • Object duplication
  • Locating point integration
  • Block creation and insertion

3. Key Technical Concepts

3.1 Data Organization

- Hierarchical data structures
- Story-based object grouping
- Reference point management

3.2 Error Handling

- Object existence verification
- Layer validation
- Story assignment checking

3.3 Automation Features

- Automatic layer creation
- Dynamic block naming
- Timestamp-based versioning

4. Best Practices Demonstrated

  1. Code Organization:
- Clear function structure
- Logical data flow
- Modular design
  1. Error Prevention:
- Input validation
- Existence checks
- Clear error messages
  1. Performance Optimization:
- Batch processing
- Efficient data structures
- Minimal object manipulation

5. Practical Applications

5.1 BIM Integration

- Etabs model organization
- Story-based structural analysis
- Reference point management

5.2 Drawing Management

- Automated block creation
- Layer organization
- Version control

6. Further Development Possibilities

  1. Enhanced Error Handling:
try:# Add more specific error checkingif not validate_story_data(story_value):raise ValueError("Invalid story data")
except Exception as e:print(f"Error processing story: {e}")
  1. Advanced Filtering:
def filter_objects_by_criteria(objects, criteria):return [obj for obj in objects if meets_criteria(obj, criteria)]
  1. Progress Reporting:
def report_progress(current, total):print(f"Processing: {current}/{total} complete")

7. Conclusion

This code represents a sophisticated approach to:

  • Building Information Modeling (BIM) automation
  • Structural engineering workflows
  • Drawing management systems
  • Version control implementation

Understanding these concepts helps in developing more advanced architectural and engineering automation tools.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/477805.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CSP/信奥赛C++语法基础刷题训练(23):洛谷P1217:[USACO1.5] 回文质数 Prime Palindromes

CSP/信奥赛C语法基础刷题训练(23):洛谷P1217:[USACO1.5] 回文质数 Prime Palindromes 题目描述 因为 151 151 151 既是一个质数又是一个回文数(从左到右和从右到左是看一样的),所以 151 151 …

【探寻密码的奥秘】-001:解开密码的神秘面纱

目录 1、密码学概述1.1、概念1.2、目的1.3、应用场景 2、密码学的历史2.1、第一时期:古代密码时代2.2、第二时期:机械密码时代2.3、第三时期:信息密码时代2.4、第四时期:现代密码时代 3、密码学的基本概念3.1、一般通信系统3.2、保…

文件操作详解(1)

1.文件,文件与流,文件指针 2.文件的打开与关闭 3.文件的读写 文件的顺序读写: (1)fgetc 和 fputc (2)fgets 和 fputs (3)fscanf 和 fprintf (4&#x…

基于YOLOv8深度学习的人体姿态摔倒检测与语音报警系统(PyQt5界面+数据集+训练代码)

随着人口老龄化进程的加速,摔倒事故逐渐成为威胁老年人健康和安全的主要问题之一。研究表明,摔倒不仅可能导致老年人骨折、头部受伤等严重的身体损伤,还可能引发心理恐惧和行动能力下降,从而降低其生活质量和独立性。如何快速、准…

jmeter5.6.3安装教程

一、官网下载 需要提前配置好jdk的环境变量 jmeter官网:https://jmeter.apache.org/download_jmeter.cgi 选择点击二进制的zip文件 下载成功后,默认解压下一步,更改安装路径就行(我安装在D盘) 实用jmeter的bin目录作为系统变量 然后把这…

差分进化算法原理与复现

目录 摘要1、算法原理1.1、种群初始化1.2、变异1.3、交叉1.4、选择 2、算法实现2.1、种群初始化2.2、变异2.3、交叉2.4、选择2.5、选取终代种群中最优秀个体 摘要 如何选取一组最佳的参数,使得代价函数值最优?这是优化算法做的事,一个直觉的…

搜索引擎中广泛使用的文档排序算法——BM25(Best Matching 25)

在搜索场景中,BM25能计算每个文档与查询的匹配度,从中找出最相关的文档,并按相关性高低排序展示。 要理解BM25,需要掌握以下几个关键概念: 1. 词频(Term Frequency, TF):某关键词在文…

C语言笔记(自定义类型:结构体、枚举、联合体 )

前言 本文对自定义类型的结构体创建、使用、结构体的存储方式和对齐方式,枚举的定义、使用方式以及联合体的定义、使用和存储方式展开叙述,如有错误,请各位指正。 目录 前言 1 结构体 1.1 结构体的声明 1.2 结构体的自引用 1.3 结构体变…

【C++】list模拟实现(详解)

本篇来详细说一下list的模拟实现,list的大体框架实现会比较简单,难的是list的iterator的实现。我们模拟实现的是带哨兵位头结点的list。 1.准备工作 为了不和C库里面的list冲突,我们在实现的时候用命名空间隔开。 //list.h #pragma once #…

数字化工厂 MES试点方案全解析(三)

目 录 三、试点实施步骤 需求分析与方案设计阶段 系统开发与测试阶段 系统部署与培训阶段 试点运行与优化阶段 总结与评估阶段 三、试点实施步骤 需求分析与方案设计阶段 1、成立由企业生产、工艺、质量、设备、IT 等多部门人员组成的项目团队,与 MES 供应商共…

ShuffleNet V2:高效卷积神经网络架构设计的实用指南

摘要 https://arxiv.org/pdf/1807.11164 当前,神经网络架构设计大多以计算复杂度的间接指标,即浮点运算数(FLOPs)为指导。然而,直接指标(例如速度)还取决于其他因素,如内存访问成本…

【Opencv学习】PART1-图像基础处理

目录 一、图像的读入、显示和保存 1、读入图像 imread函数 范例 显示控制参数 2、显示图像 imshow函数 范例 tips waitkey函数 含义 delay参数: tips destoryAllWindows函数 3、保存图像 imwrite函数 范例 实操 01-读入显示保存 代码 结果 二、图像处理入…

硬中断关闭后的堆栈抓取方法

一、背景 性能和稳定性是一个计算机工程里的一个永恒的主题。其中尤其稳定性这块的问题发现和问题分析及问题解决就依赖合适的对系统的观测的手段,帮助我们发现问题,识别问题原因最后才能解决问题。稳定性问题里尤其底层问题里,除了panic问题…

MT8768/MTK8768安卓核心板性能参数_联发科安卓智能模块开发方案

MT8768安卓核心板 是一款采用台积电12nm FinFET制程工艺的智能手机芯片。MT8768核心板不仅提供所有高级功能和出色体验,同时确保智能终端具备长电池寿命。该芯片提供了一个1600x720高清(20:9比例)分辨率显示屏,排除了清晰度和功耗之间的平衡问题。该芯片…

NVR管理平台EasyNVR多个NVR同时管理:全方位安防监控视频融合云平台方案

EasyNVR是基于端-边-云一体化架构的安防监控视频融合云平台,具有简单轻量的部署方式与多样的功能,支持多种协议(如GB28181、RTSP、Onvif、RTMP)和设备类型(IPC、NVR等),提供视频直播、录像、回放…

ETAS工具导入DBC生成Com协议栈

文章目录 前言DBC配置关键属性Cobra参数配置Cobra使用isolar工程配置总结前言 ETAS工具导入DBC主要也是生成arxml用的,ETAS推荐使用Cobra导入,本文介绍导入过程及注意事项 DBC配置关键属性 对于普通Com报文,配置为周期发送,及其周期,NmMessage配置为No,示例如下: 对…

图形化界面MySQL(MySQL)(超级详细)

1.官网地址 MySQL :: Download MySQL Workbench 1.1在Linux直接点击NO thanks..... 下载完后是这个页面 1.2任何远端登录,再把jj数据库给授权 1.3建立新用户 进行连接 点击这个就运行了 只执行show tables;要先选中 圆圈处支持自己输入 点击这个就执…

vulhub靶场与pikachu靶场

一、搭建vulhub 环境:kaildocker 1.1 提权: :::color4 sudo su #权限升级为root ::: 1.2更新软件: :::color4 apt-get update ::: (此处我已更新过) 1.3安装HTTPS协议和CA证书: :::color4 apt-get install -y apt-transpo…

计算机网络socket编程(6)_TCP实网络编程现 Command_server

个人主页:C忠实粉丝 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 C忠实粉丝 原创 计算机网络socket编程(6)_TCP实网络编程现 Command_server 收录于专栏【计算机网络】 本专栏旨在分享学习计算机网络的一点学习笔记,欢迎大家在评论…

D78【 python 接口自动化学习】- python基础之HTTP

day78 pycharm创建项目并进行接口请求 学习日期:20241124 学习目标:http定义及实战 -- pycharm创建项目并进行接口请求 学习笔记: 安装requests 安装方式:pip/pip3 install requests 官网教程:Requests: HTTP fo…