python - 如何使用 python 脚本在 Abaqus 中编辑/导入节点坐标(网格)?
问题描述
我想寻求帮助来修改/编辑零件实例的网格(在装配下)。
我已经尝试过(下面的代码),但由于元组,这是不可能的:
mdb.models[modelName].rootAssembly.instances[instanceName].nodes[i].coordinates[0] = newCoordXYZ[0] # for x mdb.models[modelName].rootAssembly.instances[instanceName].nodes[i].坐标[1] = newCoordXYZ[1] # 对于 y mdb.models[modelName].rootAssembly.instances[instanceName].nodes[i].coordinates[2] = newCoordXYZ[2] # 对于 z
TypeError:“元组”对象不支持项目分配
或者,如果可能的话,直接将网格(已存储在变量中 - newCoordXYZ)添加/分配到装配模块中的几何图形!?
任何想法/建议都非常受欢迎!
PS:我知道网格的修改可以很容易地在 Part Module(依赖于网格)中使用 editNode() 命令完成。
partName = mdb.models[modelName].parts[partName] partName.editNode(nodes=partName.nodes,coordinates=newCoordXYZ)
编辑 01:
评论
我不确定,我可能会犯如此微不足道的错误。我仍然收到以下错误:AttributeError:'PartInstance'对象没有属性'editNode',这与文档一致:
文档说:
Abaqus > 脚本参考 > Python 命令 > 装配命令 > 装配对象:
Access
import assembly
mdb.models[name].rootAssembly
Abaqus > 脚本参考 > Python 命令 > 装配命令 > PartInstance 对象:
Access
import assembly
mdb.models[name].rootAssembly.allinstances
mdb.models[name].rootAssembly.instances[name]
和
Abaqus > 脚本参考 > Python 命令 > 编辑网格命令 > 装配对象:editNode(...) 此方法更改零件实例上给定节点的坐标。
Abaqus > 脚本参考 > Python 命令 > 编辑网格命令 > 零件对象
没有 editNode(...) cmd
所以,通过使用这个 cmd:mdb.models[name].rootAssembly.instances[name] 我不能使用 editNode()...
py代码
################################## LIBRARY #############################
from datetime import date
from part import *
from material import *
from section import *
from assembly import *
from step import *
from interaction import *
from load import *
from mesh import *
from optimization import *
from job import *
from sketch import *
from visualization import *
from connectorBehavior import *
import regionToolset
import assembly
import visualization
import os
import datetime
import shutil
from odbAccess import *
import time
import numpy
import numpy as np
import re
import meshEdit
############### Add textFileName with new coord (+ imp )######################
fileNameImp = open("out_newCoordX_Imp.txt","r")
impVect = fileNameImp.readlines()
fileNameImp.close()
####################### Add modelName and instanceName #######################
modelName = 'Model-1'
instanceName = 'Part-1-1'
assemblyInstance = mdb.models[modelName].rootAssembly.instances[instanceName]
newCoordXYZ = numpy.zeros((len(assemblyInstance.nodes),3))
for i in assemblyInstance.nodes:
newCoordXYZ[i.label-1][0] = float(impVect[i.label-1])
newCoordXYZ[i.label-1][1] = i.coordinates[1]
newCoordXYZ[i.label-1][2] = i.coordinates[2]
assemblyInstance.editNode(nodes=assemblyInstance.nodes,coordinates=newCoordXYZ)
解决方案
与您对零件执行此操作的方式相同,您应该对装配实例执行此操作:
assemblyInstance = mdb.models[modelName].rootAssembly.instances[instanceName]
assemblyInstance.editNode(nodes=assemblyInstance.nodes,coordinates=newCoordXYZ)
确保使您的实例独立!
推荐阅读
- swift - SKSpriteNode 属性的 SpriteKit 奇怪行为
- vue.js - Vuex 4 createStore() 如何在内部工作
- r - 使用 R Base 将四个直方图放入表中
- firebase - Flutter Firebase 应用程序在热重载时进入等待连接状态
- javascript - 在Javascript中将日期转换为指定格式
- python - 将python项目转换为一个可执行文件
- sql - 有没有办法在 Firebird 中使用 datediff 和文字日期?
- javascript - 如何从角度应用程序执行 gulp taks?
- arrays - 动态分配的多维数组(矩阵)的乘法
- dialogflow-es - 无法将 Dialogflow 中的意图添加到 Google 助理