zoukankan      html  css  js  c++  java
  • AutoCAD中的Deep Clone

    AutoCAD中的Deep Clone

    所谓Deep clone是指将实体从一个dwg文件拷贝至另一个dwg文件,类似于Ctr+C,CtrV,而普通的实体的Copy()方法,是在单个dwg文件中输入命令'copy',

    在Pycomcad中,实现deep colone是通过Document的CopyObjects方法实现的,语法如下:

    Retval=obj.CopyObjects(objects[,Owner][,IDPairs])

    Retval:新创建的复制的对象组,在pycomcad中,返回的是包含复制后的对象的元组。
    obj:Document,Database
    objects:需要被deep clone的对象组(变体),该对象组必须在同一个owner1中,这个owner1就是调用CopyObjects的obj(Document或者Database),在pyccomcad中,可通过VtObject()函数转换。
    Owner:可选参数,单个对象(变体),其他文件的ModeSpace。
    IDPairs:可选参数。Input:an empty variant,在pycomcad中,为idp=win32com.client.VARIANT(pythoncom.VT_VARIANT, ()) .
    Output:IDPair objects组.

    需要说明的有2点:(1)当不输入owner,IDParis时,仅在当前文件内复制(2)该方法在读-写模式下进行,所以在迭代完成后,再调用该方法,否则迭代进行中,文件是仅读模型,该操作将失败。

    import sys 
    
    sys.path.append(r'G:PycharmProjectPycomCADPycomCAD')
    
    from pycomcad import *
    
    acad=Autocad()
    
    acad.CurrentFilename
    
    'Drawing1.dwg'
    
    obj=acad.AddCircle(Apoint(0,0,0),10)
    
    acad.CreateNewFile()
    
    acad.ActivateFile('Drawing1.dwg')
    
    acad.OpenedFilenames
    
    ['Drawing1.dwg', 'Drawing2.dwg']
    
    acad.CurrentFilename
    
    'Drawing1.dwg'
    
    objs=VtObject(obj)
    
    owner=acad.GetOpenedFile('Drawing2.dwg').ModelSpace  #新文档的ModelSpace
    
    type(owner)
    
    win32com.gen_py.4E3F492A-FB57-4439-9BF0-1567ED84A3A9x0x1x0.IAcadModelSpace
    
    import win32com,pythoncom
    
    acad.IsEarlyBind
    
    True
    
    idp=win32com.client.VARIANT(pythoncom.VT_VARIANT, ()) # IDPairs:Empty Variant 
    
    test2=acad.acad.ActiveDocument.CopyObjects(objs,owner,idp)
    
    test2[0][0].Move(Apoint(0,0,0),Apoint(10,10,0))
    

    Try Deep clone mutiple objects using GetSelectionSets

    slt=acad.GetSelectionSets('slt')
    
    slt.SelectOnScreen()
    
    objss=VtObject(slt.Item(0),slt.Item(1),slt.Item(2))
    
    test3=acad.acad.ActiveDocument.CopyObjects(objss,owner,idp)
    
    len(test3[0])
    
    1
    
    len(test3[1])
    
    35
    
    test3[0][0].Move(Apoint(0,0,0),Apoint(10,10,0))  # Move the  cloned circle in the new file.
    
    len(test3[0])
    
    3
    ##### 愿你一寸一寸地攻城略地,一点一点地焕然一新 #####
  • 相关阅读:
    IndexedDB demo showcase
    javascript for
    IndexedDB
    web sql Database
    webSql
    哈哈 代表月亮
    网易
    Android 百度地图 SDK v3.0.0 (一)
    iOS使用Instrument的Leaks查找代码内存泄露
    换主页轮播的主题图片(4、删除)---轻开电子商务系统(企业入门级B2C站点)
  • 原文地址:https://www.cnblogs.com/johnyang/p/12631432.html
Copyright © 2011-2022 走看看