找回密码
 注册
Simdroid-非首页
查看: 88|回复: 8

[二次开发] 自动在圆心出生成参考点脚本的问题,求指导一下,谢谢

[复制链接]
发表于 2020-3-16 18:09:52 | 显示全部楼层 |阅读模式 来自 陕西西安
悬赏10仿真币未解决
大家好,我现在要写一个脚本,其作用是自动在圆心处生成参考点。思路如下图,可以正常生成参考点。见图
但是如果圆孔被分割成多个圆弧的时候,使用这个命令会生成重复的参考点。见图有什么办法去除重复?或者有什么办法获取圆心的xyz坐标值,这样我就可以把圆心的坐标打包成一个集合,貌似集合自动去重,然后我根据坐标值再通过findAt()生成参考点,因为我发现只有vertices的pointOn才能返回正常的坐标值,而通过InterestingPoint找到的点是好像是临时的,无法像verctices一样使用pointOn去获得他的圆心坐标。
我最后需要的功能就是能自动搜索实例里面的所有圆孔,并在每个圆孔处自动生成参考点,参考点不得重复。










附件: 您需要 登录 才可以下载或查看,没有账号?注册
发表于 2020-3-16 21:22:28 | 显示全部楼层 来自 上海
Simdroid开发平台
r1 = a.referencePoints
cood=a.getCoordinates(r1[1])
回复

使用道具 举报

 楼主| 发表于 2020-3-16 21:39:32 | 显示全部楼层 来自 陕西西安
cartographer 发表于 2020-3-16 21:22
r1 = a.referencePoints
cood=a.getCoordinates(r1[1])

谢谢,但是我需要在生成参考点前提取坐标值,不然会生成很多重合的参考点,请问又该如何处理啊?
回复

使用道具 举报

发表于 2020-3-16 23:18:06 | 显示全部楼层 来自 上海
mikevenus 发表于 2020-3-16 21:39
谢谢,但是我需要在生成参考点前提取坐标值,不然会生成很多重合的参考点,请问又该如何处理啊? ...

我也不知道,可以坐标提取了,把所有参考点都删了。
再重新根据坐标建立一批呗。
回复

使用道具 举报

 楼主| 发表于 2020-3-17 21:15:25 | 显示全部楼层 来自 陕西西安
cartographer 发表于 2020-3-16 23:18
我也不知道,可以坐标提取了,把所有参考点都删了。
再重新根据坐标建立一批呗。 ...

我也想到这个了,不过这个办法不太好用,因为这这样的话建模流程就受到限制了,如果模型中本来已经有了很多参考点,并且这些参考点定义了其他的约束关系的话,这样的办法会破坏模型,必须在设置所有的约束或者参考点之前把这一步工作做了才行。
讨厌就讨厌在这个abaqus把InterestingPoint当成了临时对象,没有getCoordinates()方法或者pointOn属性。
谢谢你的解答,我自己再想想办法吧!
回复

使用道具 举报

发表于 2020-3-18 21:17:09 | 显示全部楼层 来自 台湾
基本上你應該先找到整圈edge array才對,透過getByBoundingSphere
或是透過getEdgesByEdgeAngle(...)等方法,找到一群後,在對其中一個edge打RP點就行啦~
回复

使用道具 举报

 楼主| 发表于 2020-3-19 19:49:46 | 显示全部楼层 来自 陕西西安
duncanusn 发表于 2020-3-18 21:17
基本上你應該先找到整圈edge array才對,透過getByBoundingSphere
或是透過getEdgesByEdgeAngle(...)等方法 ...

后面的脚本我已经写好了,和你说的方法基本一样的,就差一个提取圆心坐标了。
我现在的问题是不知道怎么才能在不破坏模型的情况下自动提取圆心
回复

使用道具 举报

发表于 2020-3-21 22:12:12 | 显示全部楼层 来自 台湾
其實透過連接的edges應該可以至少得三點,算出圓方程式求圓點?作法感覺很多~不知道我有沒有誤會你的意思?
回复

使用道具 举报

 楼主| 发表于 2020-3-29 18:18:52 | 显示全部楼层 来自 陕西西安
已经解决,代码如下:
  1. for i in range(num):
  2.         try:       
  3.                 a.ReferencePoint(point=a.instances['Part-3-1'].InterestingPoint(edge=e1[i],rule=CENTER))
  4.         except:
  5.                 print 'edge['+str(i)+']has no InterestingPoint'
  6.         else:
  7.                 coord=a.getCoordinates(r1[max(r1.keys())])
  8.                 rplists.append(coord)
  9.                 del a.features[f1.keys()[-1]]
复制代码

每次生成参考点后用getCoordinates提取坐标,每次操作完后删除参考点,最后进行坐标去重复
  1. rplists=list(set(rplists))
复制代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-4-28 23:00 , Processed in 0.036764 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表