乐筑天下

帖子
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 85|回复: 8

2007仿2012copy

[复制链接]

14

主题

80

帖子

7

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
136
发表于 2011-12-10 12:13:00 | 显示全部楼层 |阅读模式
cad2007用的仿2012版的copy

wk3zzuoxrgh.gif

wk3zzuoxrgh.gif

还有我的先选择后执行为什么不好用呢
Dim res As PromptSelectionResult
        Dim sSet As SelectionSet
        Dim opt As New PromptSelectionOptions
        res = ed.SelectImplied()
        If res.Status = PromptStatus.OK Then
            sSet = res.Value
            ids = sSet.GetObjectIds()
        Else
            ' 选择集交互操作
            opt.MessageForAdding = "请选择对象:"
            opt.AllowDuplicates = True
            res = ed.GetSelection(opt)
            If res.Status  PromptStatus.OK Then Return
            sSet = res.Value
            ids = sSet.GetObjectIds()
        End If

本帖以下内容被隐藏保护;需要你回复后,才能看到!

游客,如果您要查看本帖隐藏内容请回复
回复

使用道具 举报

14

主题

80

帖子

7

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
136
发表于 2011-12-10 13:06:00 | 显示全部楼层

代码在这里
  1. Public Class Jig_CCopy
  2.     ' 从DrawJig类继承.
  3.     Inherits DrawJig
  4.     ' 声明全局变量.
  5.     Dim sourcePt, targetPt, curPt As Point3d
  6.     Dim keyword As String
  7.     Dim i, k, few As Integer
  8.     Dim entCopy(,), entCopy1(), oldEnt() As Entity, ids As ObjectId()
  9.     Dim db As Database = HostApplicationServices.WorkingDatabase
  10.     Dim doc As Document = Application.DocumentManager.MdiActiveDocument
  11.     Dim ed As Editor = doc.Editor
  12.      Sub testCCopy()
  13.         keyword = "C"
  14.         Dim res As PromptSelectionResult
  15.         Dim sSet As SelectionSet
  16.         Dim opt As New PromptSelectionOptions
  17.         res = ed.SelectImplied()
  18.         If res.Status = PromptStatus.OK Then
  19.             sSet = res.Value
  20.             ids = sSet.GetObjectIds()
  21.         Else
  22.             ' 选择集交互操作
  23.             opt.MessageForAdding = "请选择对象:"
  24.             opt.AllowDuplicates = True
  25.             res = ed.GetSelection(opt)
  26.             If res.Status  PromptStatus.OK Then Return
  27.             sSet = res.Value
  28.             ids = sSet.GetObjectIds()
  29.         End If
  30.         ' 得到基点
  31.         Dim optPoint As New PromptPointOptions(vbCrLf & "请输入基点:")
  32.         optPoint.AllowNone = True
  33.         Dim resPoint As PromptPointResult = ed.GetPoint(optPoint)
  34.         If resPoint.Status  PromptStatus.OK Then Return
  35.         sourcePt = resPoint.Value
  36.         ReDim entCopy1(ids.Length - 1)
  37.         ReDim oldEnt(ids.Length - 1)
  38.         '获取对象
  39.         Using trans As Transaction = db.TransactionManager.StartTransaction()
  40.             For i = 0 To ids.Length - 1
  41.                 oldEnt(i) = trans.GetObject(ids(i), OpenMode.ForWrite)
  42.             Next
  43.             trans.Commit()
  44.         End Using
  45.         Dim lop As Boolean = True
  46.         '循环
  47.         Do While lop = True
  48.             For i = 0 To ids.Length - 1
  49.                 ' 将源对象设置为高亮
  50.                 oldEnt(i).Highlight()
  51.                 ' 复制
  52.                 entCopy1(i) = oldEnt(i).Clone()
  53.             Next
  54.             ' 设置目标点和拖拽临时点
  55.             targetPt = sourcePt
  56.             curPt = targetPt
  57.             ' 开始拖拽.
  58.             Dim jigRes As PromptResult = ed.Drag(Me)
  59.             If jigRes.Status = PromptStatus.OK Then
  60.                 For i = 0 To ids.Length - 1
  61.                     AppendEntity(entCopy1(i))
  62.                 Next
  63.             ElseIf keyword = "A" Then
  64.                 targetPt = sourcePt
  65.                 curPt = targetPt
  66.                 ' 开始拖拽.
  67.                 jigRes = ed.Drag(Me)
  68.                 If jigRes.Status = PromptStatus.OK Then
  69.                     For k = 0 To few - 1
  70.                         For i = 0 To ids.Length - 1
  71.                             AppendEntity(entCopy(k, i))
  72.                         Next
  73.                     Next
  74.                     ' 取消源对象的高亮状态.
  75.                     For i = 0 To ids.Length - 1
  76.                         oldEnt(i).Unhighlight()
  77.                     Next
  78.                     '结束循环
  79.                     lop = False
  80.                 ElseIf keyword = "F" Then
  81.                     targetPt = sourcePt
  82.                     curPt = targetPt
  83.                     ' 开始拖拽.
  84.                     jigRes = ed.Drag(Me)
  85.                     If jigRes.Status = PromptStatus.OK Then
  86.                         For k = 0 To few - 1
  87.                             For i = 0 To ids.Length - 1
  88.                                 AppendEntity(entCopy(k, i))
  89.                             Next
  90.                         Next
  91.                         ' 取消源对象的高亮状态.
  92.                         For i = 0 To ids.Length - 1
  93.                             oldEnt(i).Unhighlight()
  94.                         Next
  95.                         lop = False
  96.                     Else
  97.                         lop = False
  98.                         ' 取消源对象的高亮状态.
  99.                         For i = 0 To ids.Length - 1
  100.                             oldEnt(i).Unhighlight()
  101.                         Next
  102.                     End If
  103.                 Else
  104.                     lop = False
  105.                     ' 取消源对象的高亮状态.
  106.                     For i = 0 To ids.Length - 1
  107.                         oldEnt(i).Unhighlight()
  108.                     Next
  109.                 End If
  110.             Else
  111.                 lop = False
  112.                 ' 取消源对象的高亮状态.
  113.                 For i = 0 To ids.Length - 1
  114.                     oldEnt(i).Unhighlight()
  115.                 Next
  116.             End If
  117.         Loop
  118.     End Sub
  119.     ' Sampler函数用于检测用户的输入.
  120.     Protected Overrides Function Sampler(ByVal prompts As JigPrompts) As SamplerStatus
  121.         If keyword = "C" Then
  122.             Dim optJig As New JigPromptPointOptions(vbCrLf & "请指定第二点[阵列(A)]:")
  123.             ' 设置拖拽光标类型.
  124.             optJig.Cursor = CursorType.RubberBand
  125.             ' 设置拖动光标基点.
  126.             optJig.BasePoint = sourcePt
  127.             optJig.UseBasePoint = True
  128.             '为optJig添加关键字
  129.             optJig.Keywords.Add("A", "A", "A", False, True)
  130.             'optJig.Keywords.Add("C", "C", "C", False, True)
  131.             ''默认关键字
  132.             'optJig.Keywords.Default = "C"
  133.             ' 用AcquirePoint函数得到用户输入的点.
  134.             Dim resJig As PromptPointResult = prompts.AcquirePoint(optJig)
  135.             targetPt = resJig.Value
  136.             ' 如果用户拖拽,则用矩阵变换的方法移动选择集中的全部对象.
  137.             If resJig.Status = PromptStatus.Keyword Then
  138.                 keyword = "A"
  139.                 '获取等分数量
  140.                 Dim optfew As New PromptIntegerOptions(vbCrLf & "请输入等分数量")
  141.                 Dim resfew As PromptIntegerResult = ed.GetInteger(optfew)
  142.                 If resfew.Status  PromptStatus.OK Then Return True
  143.                 few = resfew.Value
  144.                 ReDim entCopy(0 To few - 1, ids.Length - 1)
  145.                 For k = 0 To few - 1
  146.                     For i = 0 To ids.Length - 1
  147.                         ' 复制.
  148.                         entCopy(k, i) = oldEnt(i).Clone()
  149.                     Next
  150.                 Next
  151.             Else
  152.                 If curPt  targetPt Then
  153.                     Dim moveMt As Matrix3d = Matrix3d.Displacement(targetPt - curPt)
  154.                     For i = 0 To ids.Length - 1
  155.                         entCopy1(i).TransformBy(moveMt)
  156.                     Next
  157.                     ' 保存当前点.
  158.                     curPt = targetPt
  159.                     Return SamplerStatus.OK
  160.                 Else
  161.                     Return SamplerStatus.NoChange
  162.                 End If
  163.             End If
  164.         ElseIf keyword = "A" Then
  165.             ' 定义一个点拖动交互类.
  166.             Dim optJig As New JigPromptPointOptions(vbCrLf & "请指定第二点[布满(F)]:")
  167.             ' 设置拖拽光标类型.
  168.             optJig.Cursor = CursorType.RubberBand
  169.             ' 设置拖动光标基点.
  170.             optJig.BasePoint = sourcePt
  171.             optJig.UseBasePoint = True
  172.             '为optJig添加关键字
  173.             optJig.Keywords.Add("F", "F", "F", False, True)
  174.             'optJig.Keywords.Add("C", "C", "C", False, True)
  175.             ''默认关键字
  176.             'optJig.Keywords.Default = "C"
  177.             ' 用AcquirePoint函数得到用户输入的点.
  178.             Dim resJig As PromptPointResult = prompts.AcquirePoint(optJig)
  179.             targetPt = resJig.Value
  180.             If resJig.Status = PromptStatus.Keyword Then
  181.                 keyword = "F"
  182.                 For k = 0 To few - 1
  183.                     For i = 0 To ids.Length - 1
  184.                         ' 复制.
  185.                         entCopy(k, i) = oldEnt(i).Clone()
  186.                     Next
  187.                 Next
  188.             Else
  189.                 If curPt  targetPt Then
  190.                     'Dim moveMt As Matrix3d = Matrix3d.Displacement((targetPt - curPt) / few * (k + 1))
  191.                     For k = 0 To few - 1
  192.                         For i = 0 To ids.Length - 1
  193.                             entCopy(k, i).TransformBy(Matrix3d.Displacement((targetPt - curPt) * (k + 1)))
  194.                         Next
  195.                     Next
  196.                     ' 保存当前点.
  197.                     curPt = targetPt
  198.                     Return SamplerStatus.OK
  199.                 Else
  200.                     Return SamplerStatus.NoChange
  201.                 End If
  202.             End If
  203.         ElseIf keyword = "F" Then
  204.             ' 定义一个点拖动交互类.
  205.             Dim optJig As New JigPromptPointOptions(vbCrLf & "请指定第二点:")
  206.             ' 设置拖拽光标类型.
  207.             optJig.Cursor = CursorType.RubberBand
  208.             ' 设置拖动光标基点.
  209.             optJig.BasePoint = sourcePt
  210.             optJig.UseBasePoint = True
  211.             ' 用AcquirePoint函数得到用户输入的点.
  212.             Dim resJig As PromptPointResult = prompts.AcquirePoint(optJig)
  213.             targetPt = resJig.Value
  214.             ' 如果用户拖拽,则用矩阵变换的方法移动选择集中的全部对象.
  215.             If curPt  targetPt Then
  216.                 'Dim moveMt As Matrix3d = Matrix3d.Displacement((targetPt - curPt) / few * (k + 1))
  217.                 For k = 0 To few - 1
  218.                     For i = 0 To ids.Length - 1
  219.                         entCopy(k, i).TransformBy(Matrix3d.Displacement((targetPt - curPt) / few * (k + 1)))
  220.                     Next
  221.                 Next
  222.                 ' 保存当前点.
  223.                 curPt = targetPt
  224.                 Return SamplerStatus.OK
  225.             Else
  226.                 Return SamplerStatus.NoChange
  227.             End If
  228.         End If
  229.     End Function
  230. ' WorldDraw函数用于刷新屏幕上显示的图形.
  231.     Protected Overrides Function WorldDraw(ByVal draw As WorldDraw) As Boolean
  232.         If keyword = "C" Then
  233.             For i = 0 To ids.Length - 1
  234.                 ' 刷新画面.
  235.                 draw.Geometry.Draw(entCopy1(i))
  236.             Next
  237.         Else
  238.             For k = 0 To few - 1
  239.                 For i = 0 To ids.Length - 1
  240.                     ' 刷新画面.
  241.                     draw.Geometry.Draw(entCopy(k, i))
  242.                 Next
  243.             Next
  244.         End If
  245.         Return True
  246.     End Function
  247.     ' 将图形对象加入到模型空间的函数.
  248.     Public Shared Function AppendEntity(ByVal ent As Entity) As ObjectId
  249.         ' 得到当前文档图形数据库.
  250.         Dim db As Database = HostApplicationServices.WorkingDatabase
  251.         Dim entId As ObjectId
  252.         Using trans As Transaction = db.TransactionManager.StartTransaction
  253.             ' 以读方式打开块表.
  254.             Dim bt As BlockTable = trans.GetObject(db.BlockTableId, OpenMode.ForRead)
  255.             ' 以写方式打开模型空间块表记录.
  256.             Dim btr As BlockTableRecord = trans.GetObject(bt(BlockTableRecord.ModelSpace), OpenMode.ForWrite)
  257.             ' 将图形对象的信息添加到块表记录中,并返回ObjectId对象.
  258.             entId = btr.AppendEntity(ent)
  259.             ' 把图形对象添加到事务处理中.
  260.             trans.AddNewlyCreatedDBObject(ent, True)
  261.             ' 提交事务处理.
  262.             trans.Commit()
  263.         End Using
  264.         Return entId
  265.     End Function
  266. End Class
回复

举报

4

主题

30

帖子

6

银币

初来乍到

Rank: 1

铜币
46
发表于 2011-12-15 11:18:00 | 显示全部楼层

res = ed.SelectImplied() 改为
res = ed.SelectPrevious()
回复

举报

32

主题

651

帖子

8

银币

中流砥柱

Rank: 25

铜币
779
发表于 2011-12-15 11:30:00 | 显示全部楼层
设置了阅读权限,这是在请教问题呢还是在授课?
回复

举报

14

主题

80

帖子

7

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
136
发表于 2011-12-15 15:39:00 | 显示全部楼层

授课什么意思,注册了就看,没注册就不要看,请教问题只不过是顺带,大不了单开一贴再请教,不知道你回的这啥意思。
回复

举报

14

主题

80

帖子

7

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
136
发表于 2011-12-15 15:42:00 | 显示全部楼层

res = ed.SelectPrevious()这个不行地。
回复

举报

32

主题

651

帖子

8

银币

中流砥柱

Rank: 25

铜币
779
发表于 2011-12-15 16:49:00 | 显示全部楼层

不好意思!我多嘴了,我闭嘴.
回复

举报

14

主题

68

帖子

8

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
124
发表于 2013-11-4 10:36:00 | 显示全部楼层
为何不能先选择对象后输入命令进行执行呢?请大神位完善。顶起
回复

举报

14

主题

68

帖子

8

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
124
发表于 2013-11-4 10:43:00 | 显示全部楼层

且选择A阵列后,未输入选项(即阵列次数时)按ESC取消时,会跳出要求中止的界面(本人验证仅能选择跳过才能继续),这样就很不方便喽,看能否改善一下哇
回复

举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁體中文

GMT+8, 2025-3-14 05:20 , Processed in 0.776343 second(s), 75 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表