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:\PycharmProject\PycomCAD\PycomCAD')
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

AutoCAD中的Deep Clone的更多相关文章

  1. JavaScript 中的对象深度复制(Object Deep Clone)

    JavaScript中并没有直接提供对象复制(Object Clone)的方法. JavaScript中的赋值,其实并不是复制对象,而是类似`c/c++`中的引用(或指针),因此下面的代码中改变对象b ...

  2. Ruby中如何复制对象 (deep clone)(转载)

    Ruby中如何复制对象 (deep clone) 用Ruby复制一个对象(object)也许没有你想像的那么容易. 今天我google了半天, 做个总结吧. 先从最简单的开始, b = a 是复制吗? ...

  3. 深拷贝(deep clone)与浅拷贝(shallow clone)

    深拷贝(deep clone)与浅拷贝(shallow clone) 浅复制(浅克隆):被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象.换言之,浅复制仅仅复 ...

  4. Java:浅克隆(shallow clone)与深克隆(deep clone)

    Summary 浅克隆与深克隆对于JavaSE来说,是个难度系数比较低的概念,但不应该轻视它. 假设一个场景:对于某个list,代码里并没有任何对其的直接操作,但里面的元素的属性却被改变了,这可能就涉 ...

  5. Deep Clone 常用方式总结

    Deep Clone Example 总结 Deep Clone 一般有如下几种实现方式: 纯手工每个类实现赋值 (ps: 不做介绍,一般都不想这么玩) 序列化和反序列化 纯反射 emit 或 Exp ...

  6. OpenCV中Mat操作clone() 与copyto()的区别

    OpenCV中Mat操作clone() 与copyto()的区别 // Mat is basically a class with two data parts: the matrix header ...

  7. AutoCAD中的螺旋究竟是什么螺旋?

    AutoCad从很早的时候就开始提供了螺旋线的功能,它的用法相对简单,非常适合用来对等距螺旋的理论进行演练. 选择螺旋线工具,首先画出一个基准圆,再向内(或向外)移动鼠标,拖出一个旋转3个周期的螺旋. ...

  8. What is the most efficient way to deep clone an object in JavaScript?

    What is the most efficient way to deep clone an object in JavaScript? Reliable cloning using a libra ...

  9. MathType在AutoCAD中的应用方法

    我们都知道CAD是一款鼎鼎有名设计与绘图软件,有不少朋友可能用过或听说过CAD,相较而言,用过MathType的人可能要少一些,虽然它也是理科生与工科生的专用工具之一. 通过MathType我们能够在 ...

  10. Autocad中使用命令来调用python对Autocad二次开发打包后的exe程序

    在Autocad中直接调用Python二次开发程序是有必要的,下面介绍一种方法来实现这个功能: 其基本思路是:先将二次开发的程序打包为可执行程序exe,然后编写lsp文件,该文件写入调用exe程序的语 ...

随机推荐

  1. Shell - [01] 概述

    一.shell是什么 Shell 是一个命令解释器,接收应用程序/用户命令去调用操作系统内核. Shell 是一个功能强大的编程语言,易编写.易调试.灵活性强. 二.shell的解析器有哪些 [roo ...

  2. 【BUUCTF】easy calc

    [BUUCTF]easy calc (PHP代码审计) 题目来源 收录于:BUUCTF BUUCTF2019 题目描述 一个计算器,尝试SSTI,SQL注入都无果 对计算过程抓包,发现/clac.ph ...

  3. 数据挖掘 | 数据隐私(4) | 差分隐私 | 差分隐私概论(下)(Intro to Differential Privacy 2)

    L4-Intro to Differential Privacy 拉普拉斯机制(Laplace Mechanism) 上一节课中,我们讨论了随机响应,这是一种适合于单个位的隐私化.这种算法一般来说并不 ...

  4. 【Matlab】求解复合材料层合板刚度矩阵及柔度矩阵

    1. matlab文件结构 2. main.m代码 clc clear; warning off; %% %铺层角度数组 angles=[0 90 0]; % ° %单层厚度 ply_thicknes ...

  5. New Bing 全面开放?我看未必

    前段时间大家应该都被ChatGPT刷屏了,其实就回答来说New Bing 才是最厉害的,因为它底层使用了ChatGPT 并且可以支持联网查询数据,回答中还能支持看到出处,方便确认其真实性. New B ...

  6. Java List和Array之间的转换

    import java.util.Arrays; import java.util.List; class Test { //Object数组向List的转换 public static List&l ...

  7. 如何不购买域名在云服务器上搭建HTTPS服务

    step 1: 事前准备 step 1.1: 云服务器 购买一台云服务器(带有弹性公网IP),阿里云,腾讯云,华为云什么的都可以. 选择ubuntu系统 开放安全组策略(把你需要的协议/端口暴露出来) ...

  8. 自制一个超级简单的 php 发邮件的轮子 simpleMailTool.php

    simpleMailTool 程序链接 https://github.com/kohunglee/simpleMailTool/ 一个简单的 php 发邮件的轮子,跟其他著名大轮子相比(如 PHPMa ...

  9. protected修饰符讲解、java中继承的特点-java se进阶 day01

    1.protected权限修饰符的介绍 之前在说权限修饰符时候,没有细说protected,今天,我们就来聊聊protected 如图,protected修饰符中,"不同包的子类" ...

  10. 行为识别TSM训练ucf101数据集

    序言 最近有个行为检测的需求,打算用行为识别做,纯小白入这个方向,啃了两周的TSM原理和源码,训练好自己的数据集后,发现好像没法应用到自己的需求场景??玛德!算了,还是要记录一下.原理就没别要讲了,网 ...