查看: 7024|回复: 12
收起左侧

[Tribon] 如何解决参数化CableWay辅助建模CableWay间自动连接问题

[复制链接]
发表于 2008-3-10 14:53 | 显示全部楼层 |阅读模式 来自: 中国广东广州
如何解决参数化CableWay辅助建模CableWay间自动连接问题

问题:

为用户开发一个参数化CableWay建模程序,用户要求将根据用户填入的参数,在CableModelling环境中,自动创建CableWay,并使CableWay能自动连接。

根据用户要求立即着手编写Python脚本程序,第一的功能很容易实现,但是第二个功能不能达到用户之要求,CableWay在CableModelling环境中创建完成后,其有物理连接的两两CableWay则不能自动连接。在CableModelling环境中,用户以交互方式设绘CableWay时,CableWay能自动连接,而以程序创建的CableWay反而不能连接,究其原因,如下:

交互方式:用户使用对象捕捉来拾取连接点,系统可以得到被连接的CableWay名和连接点信息,所以其能自动连接。

程序方式:纯粹设绘CableWay,没有给出被连接的CableWay及连接点信息。

摸索:
根据此情况,再次认真阅读了TRIBON开发包的Cable开发文档,发现对于CableWay的创建尚有如下函数可以使用:
kcs_cable.default_value_set (statement)
kcs_cable.cway_cwenv_clear()
kcs_cable.cway_cwenv_incl(name)
kcs_cable.cway_cwenv_connect()

于是本人用尽以上这些函数,做各种组合测试,见测试PYTHON脚本CwayTest4.py,由于没有范例,故我反反复复,一遍又一遍地做测试,都没有达到预期效果,函数kcs_cable.cway_cwenv_connect() 好象是在交互环境中使用方可,它无参数输入,但需要两个条件,一条激活的CableWay(激活CableWay没有问题),一条被选择的CableWay(这个有问题,在runtime环境中,没有选择CableWay的函数,在交互状况下就可以),所以此函数好象没有实用价值。其实这个函数应该带参数的,参数应当这样设置kcs_cable.cway_cwenv_connect(CW1,CW2,CNPoint)
要求输入三个参数CW1:被连接电缆通道,CW2:连接电缆通道,CNPoint:连接点,这样就可以以编程的方式为CableWay建立连接点了。不知道TRIBON的开发者是怎么想的,或许此问题的解决要等到AVEVA公司打补钉,或许我没有摸透它。

先前在论坛上看到大连重工的杨光先生介绍说:“他们厂已经实现了多种模型的参数化建模,也包括CableWay的参数化建模吧”,想必这个问题,他早已解决了,所以现在特请杨光兄或其他高手指点迷津,以期解决这个问题,共同为中国的造船事业做出贡献。
多谢!

测试PYTHON脚本CwayTest4.py

#
#      NAME:
#
#          kcs_ex_CwayTest4.py
#
#      PURPOSE:
#
#          This program serve to create two new cableway
#

import re
import string
import kcs_util
import kcs_ui
import kcs_cable
import KcsColour
import KcsStringlist
import kcs_dex
import KcsPoint3D
import KcsStat_point3D_req
import KcsModel
import kcs_draft

#---------------------------------------------------------------------------------------
def RouteParts1():
    print 'Route'
    point = KcsPoint3D.Point3D()
    point.X=0.0
    point.Y=0.0
    point.Z=0.0
    try:
      point.X=19200.0
      point.Y=4600.0
      point.Z=32400.0
      kcs_cable.cway_route_start_point(point)
      point.X=18400.0
      point.Y=4600.0
      point.Z=32400.0
      kcs_cable.cway_route_point(point)
      point.X=18400.0
      point.Y=3200.0
      point.Z=32400.0
      kcs_cable.cway_route_point(point)
      point.X=18400.0
      point.Y=2500.0
      point.Z=32400.0
      kcs_cable.cway_route_point(point)
      point.X=18400.0
      point.Y=2300.0
      point.Z=32400.0
      kcs_cable.cway_route_point(point)
      point.X=18400.0
      point.Y=1214.0
      point.Z=32400.0
      kcs_cable.cway_route_end_point(point)
    except:
      kcs_ui.message_noconfirm(str(sys.exc_info()[1]))
      print kcs_ui.error

#---------------------------------------------------------------------------------------
def RouteParts2():
    print 'Route'
    point = KcsPoint3D.Point3D()
    point.X=0.0
    point.Y=0.0
    point.Z=0.0
    try:
      point.X=18159.0
      point.Y=4600.0
      point.Z=32400.0
      kcs_cable.cway_route_start_point(point)
      point.X=18400.0
      point.Y=4600.0
      point.Z=32400.0
      kcs_cable.cway_route_end_point(point)
    except:
      kcs_ui.message_noconfirm("Wrong point !")
      print kcs_ui.error
      
#---------------------------------------------------------------------------------------
def Createimaginarypenetration1(cablewayname):
    print 'Route'
    point = KcsPoint3D.Point3D()
    point.X=0.0
    point.Y=0.0
    point.Z=0.0
    try:
      point.X=19200.0
      point.Y=4600.0
      point.Z=32400.0
      name='L6/126'
      kcs_cable.cpen_imag_new(name, cablewayname, point)
      point.X=18400.0
      point.Y=4600.0
      point.Z=32400.0
      name='L6/120'
      kcs_cable.cpen_imag_new(name, cablewayname, point)
      point.X=18400.0
      point.Y=3200.0
      point.Z=32400.0
      name='L6/283'
      kcs_cable.cpen_imag_new(name, cablewayname, point)
      point.X=18400.0
      point.Y=2500.0
      point.Z=32400.0
      name='L6/001'
      kcs_cable.cpen_imag_new(name, cablewayname, point)
      point.X=18400.0
      point.Y=2300.0
      point.Z=32400.0
      name='L6/110'
      kcs_cable.cpen_imag_new(name, cablewayname, point)
      point.X=18400.0
      point.Y=1214.0
      point.Z=32400.0
      name='L6/108'
      kcs_cable.cpen_imag_new(name, cablewayname, point)
    except:
      kcs_ui.message_noconfirm(str(sys.exc_info()[1]))
      print kcs_ui.error

#---------------------------------------------------------------------------------------
def Createimaginarypenetration2(cablewayname):
    print 'Route'
    point = KcsPoint3D.Point3D()
    point.X=0.0
    point.Y=0.0
    point.Z=0.0
    try:
      point.X=18159.0
      point.Y=4600.0
      point.Z=32400.0
      name='L6/119'
      kcs_cable.cpen_imag_new(name, cablewayname, point)
    except:
      kcs_ui.message_noconfirm(str(sys.exc_info()[1]))
      print kcs_ui.error     

#---------------------------------------------------------------------------------------
def run():
  try:
    # receive name, module and colour of cableway
    strDefaultValue='CW_AUTO_CONN = 1'
    kcs_cable.default_value_set(strDefaultValue)
    kcs_cable.cway_cwenv_clear()
    try:
      Name = 'CWL6/116'
      CWName=Name
      CWName=CWName.upper()
      if kcs_cable.cway_exist(CWName)==1:
        kcs_cable.cway_delete(CWName)
      CableWay=kcs_cable.cway_new(CWName, 'L6', 'Red')         
      kcs_cable.cway_activate(CWName)
      RouteParts1()
      kcs_cable.cway_save()
      Createimaginarypenetration1(CWName)
      #kcs_cable.cway_cwenv_incl(CWName)
      model = KcsModel.Model('cable way', 'ZK-'+ CWName)
      kcs_draft.model_draw(model)
      Name = 'CWL6/118'
      CWName=Name
      CWName=CWName.upper()
      if kcs_cable.cway_exist(CWName)==1:
        kcs_cable.cway_delete(CWName)
      CableWay=kcs_cable.cway_new(CWName, 'L6', 'red')         
      kcs_cable.cway_activate(CWName)
      RouteParts2()
      kcs_cable.cway_save()
      Createimaginarypenetration2(CWName)
      #kcs_cable.cway_cwenv_incl(CWName)
      model = KcsModel.Model('cable way', 'ZK-'+ CWName)
      kcs_draft.model_draw(model)
      Name = 'CWL6/116'
      #kcs_cable.cway_activate(Name)
      #kcs_cable.cway_cwenv_connect()
      #kcs_cable.cway_save()
    except:
     kcs_ui.message_noconfirm(str(sys.exc_info()[1]))
     print kcs_ui.error
  except:
    kcs_ui.message_noconfirm(str(sys.exc_info()[1]))
    print kcs_ui.error
  
#-------------------------------------------------------------------------------------------------------------   
if __name__ == "__main__":
  run()



附图



[ 本帖最后由 SkyLineGuest 于 2008-3-10 14:55 编辑 ]
1.JPG
2.JPG
回复

使用道具 举报

龙船学院
发表于 2008-3-10 21:32 | 显示全部楼层 来自: 中国辽宁大连
Cableway的参数化我们没有做过。
你的代码我试了一下,加入后面红色的几句话可以连接两个Cableway:
      
      Name = 'CWL6/116'
      CWName=Name
      CWName=CWName.upper()
      if kcs_cable.cway_exist(CWName)==1:
        kcs_cable.cway_delete(CWName)
      CableWay=kcs_cable.cway_new(CWName, 'L6', 'Red')         
      kcs_cable.cway_activate(CWName)
      RouteParts1()
      kcs_cable.cway_save()
      Createimaginarypenetration1(CWName)
      #kcs_cable.cway_cwenv_incl(CWName)
      model = KcsModel.Model('cable way', 'ZK-'+ CWName)
      kcs_draft.model_draw(model)
      Name = 'CWL6/118'
      CWName=Name
      CWName=CWName.upper()
      if kcs_cable.cway_exist(CWName)==1:
        kcs_cable.cway_delete(CWName)
      CableWay=kcs_cable.cway_new(CWName, 'L6', 'red')         
      kcs_cable.cway_activate(CWName)
      RouteParts2()
      kcs_cable.cway_save()
      Createimaginarypenetration2(CWName)
      #kcs_cable.cway_cwenv_incl(CWName)
      model = KcsModel.Model('cable way', 'ZK-'+ CWName)
      kcs_draft.model_draw(model)
      Name = 'CWL6/116'
      #kcs_cable.cway_activate(Name)
      #kcs_cable.cway_cwenv_connect()
      #kcs_cable.cway_save()

          kcs_cable.cway_cwenv_incl('CWL6/116')
          kcs_cable.cway_cwenv_incl('CWL6/118')
          kcs_cable.cway_activate('CWL6/116')
          kcs_cable.cway_cwenv_connect()


为了避免其他kcs_cable的操作对cway_cwenv_incl造成影响,可以在程序的前部用list保存Cableway名称,例如:
table = []
table.append('CWL6/116')
table.append('CWL6/118')
连接之前再执行cway_cwenv_incl:
for name in table:
    kcs_cable.cway_cwenv_incl(name)
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2008-3-10 22:35 | 显示全部楼层 来自: 中国广东佛山

感谢

加入后面红色的几句话, 在我的测试程序中是有的,只不过是没有集中在一起而已,第一次执行kcs_cable.cway_cwenv_incl(CWName)没有错误,再执行一次就出错了,提示说连接清单中已经存在了该电缆通道,所以我就将它隐掉了.我明天试试看,谢谢你的帮助
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-3-11 10:48 | 显示全部楼层 来自: 中国广东广州

改进的CableWay自动建模范例

原来真的如杨光兄所说,其他kcs_cable的操作会对cway_cwenv_incl函数造成影响,这些函数集必须放在一起执行,不能分散编制。CableWay自动连接的基本机制应该是:
1. 设置连接缺省值:  CW_AUTO_CONN = 1
2. 清楚电缆通道连接清单
3. 将电缆通道添加入连接清单中
4. 循环激活连接清单中的某条CableWay, 让其与清单中的其他电缆通道连接

为了使TRIBON的CableWay自动布置电缆在中国能够用得起来,也为了感谢杨光兄及其他高手的帮助,现特地附上改进后的CableWay参数化自动建模测试脚本CwayTest8.py,以供有意在CableWay方面做开发的开发或设计人员参考,共同为中国的造船事业做出贡献。

#
#      NAME:
#
#          kcs_ex_CwayTest8.py
#
#      PURPOSE:
#
#          This program serve to create two new cableway
#

import re
import string
import kcs_util
import kcs_ui
import kcs_cable
import KcsColour
import KcsStringlist
import kcs_dex
import KcsPoint3D
import KcsStat_point3D_req
import KcsModel
import kcs_draft

#---------------------------------------------------------------------------------------
def RouteParts1():
    print 'Route'
    point = KcsPoint3D.Point3D()
    point.X=0.0
    point.Y=0.0
    point.Z=0.0
    try:
      point.X=19200.0
      point.Y=4600.0
      point.Z=32400.0
      kcs_cable.cway_route_start_point(point)
      point.X=18400.0
      point.Y=4600.0
      point.Z=32400.0
      kcs_cable.cway_route_point(point)
      point.X=18400.0
      point.Y=3200.0
      point.Z=32400.0
      kcs_cable.cway_route_point(point)
      point.X=18400.0
      point.Y=2500.0
      point.Z=32400.0
      kcs_cable.cway_route_point(point)
      point.X=18400.0
      point.Y=2300.0
      point.Z=32400.0
      kcs_cable.cway_route_point(point)
      point.X=18400.0
      point.Y=1214.0
      point.Z=32400.0
      kcs_cable.cway_route_end_point(point)
    except:
      kcs_ui.message_noconfirm(str(sys.exc_info()[1]))
      print kcs_ui.error

#---------------------------------------------------------------------------------------
def RouteParts2():
    print 'Route'
    point = KcsPoint3D.Point3D()
    point.X=0.0
    point.Y=0.0
    point.Z=0.0
    try:
      point.X=18159.0
      point.Y=4600.0
      point.Z=32400.0
      kcs_cable.cway_route_start_point(point)
      point.X=18400.0
      point.Y=4600.0
      point.Z=32400.0
      kcs_cable.cway_route_end_point(point)
    except:
      kcs_ui.message_noconfirm("Wrong point !")
      print kcs_ui.error
      
#---------------------------------------------------------------------------------------
def Createimaginarypenetration1(cablewayname):
    print 'Route'
    point = KcsPoint3D.Point3D()
    point.X=0.0
    point.Y=0.0
    point.Z=0.0
    try:
      point.X=19200.0
      point.Y=4600.0
      point.Z=32400.0
      name='L6/126'
      kcs_cable.cpen_imag_new(name, cablewayname, point)
      point.X=18400.0
      point.Y=4600.0
      point.Z=32400.0
      name='L6/120'
      kcs_cable.cpen_imag_new(name, cablewayname, point)
      point.X=18400.0
      point.Y=3200.0
      point.Z=32400.0
      name='L6/283'
      kcs_cable.cpen_imag_new(name, cablewayname, point)
      point.X=18400.0
      point.Y=2500.0
      point.Z=32400.0
      name='L6/001'
      kcs_cable.cpen_imag_new(name, cablewayname, point)
      point.X=18400.0
      point.Y=2300.0
      point.Z=32400.0
      name='L6/110'
      kcs_cable.cpen_imag_new(name, cablewayname, point)
      point.X=18400.0
      point.Y=1214.0
      point.Z=32400.0
      name='L6/108'
      kcs_cable.cpen_imag_new(name, cablewayname, point)
    except:
      kcs_ui.message_noconfirm(str(sys.exc_info()[1]))
      print kcs_ui.error

#---------------------------------------------------------------------------------------
def Createimaginarypenetration2(cablewayname):
    print 'Route'
    point = KcsPoint3D.Point3D()
    point.X=0.0
    point.Y=0.0
    point.Z=0.0
    try:
      point.X=18159.0
      point.Y=4600.0
      point.Z=32400.0
      name='L6/119'
      kcs_cable.cpen_imag_new(name, cablewayname, point)
    except:
      kcs_ui.message_noconfirm(str(sys.exc_info()[1]))
      print kcs_ui.error   
      
#-------------------------------------------------------------------------------------------------------------
def ConnectCableWays(modelsets):
  try:
    kcs_cable.default_value_set('CW_AUTO_CONN = 1')
    kcs_cable.cway_cwenv_clear()
    for Name in modelsets:
      if kcs_cable.cway_exist(Name)==1:
         kcs_cable.cway_cwenv_incl(Name)
    for Name in modelsets:
      if kcs_cable.cway_exist(Name)==1:
         kcs_cable.cway_activate(Name)
         kcs_cable.cway_cwenv_connect()
         kcs_cable.cway_save()   
  except:
        kcs_ui.message_noconfirm(str(sys.exc_info()[1]))  

#---------------------------------------------------------------------------------------
def run():
  try:
    # receive name, module and colour of cableway
    try:
      modelsets = []
      Name = 'CWL6/116'
      CWName=Name
      CWName=CWName.upper()
      if kcs_cable.cway_exist(CWName)==1:
        kcs_cable.cway_delete(CWName)
      CableWay=kcs_cable.cway_new(CWName, 'L6', 'Red')         
      kcs_cable.cway_activate(CWName)
      RouteParts1()
      kcs_cable.cway_save()
      Createimaginarypenetration1(CWName)
      modelsets.append(CWName)
      
      Name = 'CWL6/118'
      CWName=Name
      CWName=CWName.upper()
      if kcs_cable.cway_exist(CWName)==1:
        kcs_cable.cway_delete(CWName)
      CableWay=kcs_cable.cway_new(CWName, 'L6', 'Red')         
      kcs_cable.cway_activate(CWName)
      RouteParts2()
      kcs_cable.cway_save()
      Createimaginarypenetration2(CWName)
      modelsets.append(CWName)
      
      for CWName in modelsets:
        if kcs_cable.cway_exist(CWName)==1:
          model = KcsModel.Model('cable way', 'ZK-'+ CWName)
          kcs_draft.model_draw(model)
      ConnectCableWays(modelsets)
    except:
     kcs_ui.message_noconfirm(str(sys.exc_info()[1]))
     print kcs_ui.error
  except:
    kcs_ui.message_noconfirm(str(sys.exc_info()[1]))
    print kcs_ui.error
  
#-------------------------------------------------------------------------------------------------------------   
if __name__ == "__main__":
  run()
回复 支持 反对

使用道具 举报

发表于 2008-3-11 19:02 | 显示全部楼层 来自: 中国辽宁大连
这个程序有什么实际意义么?参数并没有被提取出来,应该叫批处理更为贴切。TB本身Route就很方便了啊,而且Cableway也是千变万化的。我想将来如果要做成参数化的话,也要有个固定的形状,像栏杆,梯子。把Cableway当作一个个部件,用程序组成形状。但是,真的能抽象出来一种形状的Cableway么?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-3-11 22:51 | 显示全部楼层 来自: 中国广东佛山
在TB里徒手用Route画Cableway效率很低的,特别是要在一个区域设绘上千条Cableway,要让它很好的连接,那决非易事,我知道贵厂设绘Cableway的任务都是由具有几年工作经验的设计人员担当,设计完Cableway后,在EXCEL表中,录入电缆清单,然后让TB去自动布线,但是我们厂就不行,新生力量太多,几乎都是新手,有的甚至连Cableway都没有画过,根本无从着手,况且设绘Cableway需要具有一定的解析几何知识,对于新手来说,似乎要求太高了,鉴于这种情况,我们不得不着手开发参数化Cableway建模程序,这可以从根本上降低了Cableway的使用门坎。

1. 这个程序是有实际意义的, 参数等布置好电缆后,再提出来,现在是要用参数去创建Cableway,参数并不是一个值或几个值才是参数,从广义上讲数据文件和数据表都可以当做参数。

2. 只要给这个程序增加数据录入界面,Cableway 的 name、 module  和拐点路径、拐点坐标用变量替代,让用户从界面录入,此程序将变成一个交互式的Cableway辅助建模程序,如果是将Cableway 的 name、 module 和拐点路径、拐点坐标存放在磁盘的数据文件中或是存储于SQL数据库的数据表中,让此程序去读文件或数据库,然后生成Cableway模型,那么该程序将变成一个具有批处理功能的Cableway自动建模程序,怎么说它没有意义呢?

3. Cableway的确是千变万化的,Cableway不象Struct,其形状不能固定,它不会像栏杆,梯子。不能把Cableway当成部件处理,Cableway的形状完全是由用户用参数来掌控,就是说用户通过修改参数,喜欢让它生成什么样就什么样。
回复 支持 反对

使用道具 举报

头像被屏蔽
发表于 2010-2-26 17:54 | 显示全部楼层 来自: 中国广东广州
参数化建模的关键在于提供参数.
现在的手工ROUTE其实只是提供节点坐标的,这个大家都清楚.
利用数据库技术,导入数据表来实现参数化的批量CABLEWAY建模,听起来是个不错的主意.
但是,数据表何来.数据表主要组成就是节点坐标.

请问如何精确的提供节点坐标?

手工ROUTE有抓点工具来保证坐标的精确性.

所以我说,参数化建模没有很大的可行性.大家或许应该另想出路.

欢迎大家批评指教.

EMAIL:bh7lki@hotmai.com
QQ:375190921
注明:龙人CABLEWAY.
回复 支持 反对

使用道具 举报

头像被屏蔽
发表于 2010-2-26 17:56 | 显示全部楼层 来自: 中国广东广州
其实,CABLEWAY连接不连接都没有什么关系的.我们要的是节点的三维坐标.用以计算电缆长度而已.
回复 支持 反对

使用道具 举报

发表于 2012-1-28 19:55 | 显示全部楼层 来自: 中国辽宁大连
此人高手
回复 支持 反对

使用道具 举报

发表于 2012-3-1 23:10 | 显示全部楼层 来自: 中国上海
cablewey使用情况太复杂
回复 支持 反对

使用道具 举报

发表于 2012-6-27 12:17 | 显示全部楼层 来自: 中国山东威海
先顶一下飒飒
回复 支持 反对

使用道具 举报

发表于 2012-7-22 15:27 | 显示全部楼层 来自: 中国上海
剧我所知,CABLE WAY 可以在DEF5 设置一个变量就可以实现自动连接
回复 支持 反对

使用道具 举报

发表于 2023-1-25 00:12 | 显示全部楼层 来自: 中国安徽芜湖
围观学习,我就看看,不说话
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|标签|免责声明|龙船社区

GMT+8, 2024-9-19 08:15

Powered by Imarine

Copyright © 2006, 龙船社区

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