找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 948|回复: 3

[ARX程序]:请教:关于克隆问题

[复制链接]
发表于 2002-7-9 11:32:22 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
我将一些实体克隆后想把它们定到一个层上,该怎么办?

还有,如果将一张图纸设置作为另一张得背景图,它的比例在程序里怎样实现阿?也就是它的视窗,有时他会很小有时很大,怎样控制让他与当前图纸匹配
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-7-19 00:31:36 | 显示全部楼层

Re: [ARX程序]:请教:关于克隆问题

最初由 梦宁 发布
[B]我将一些实体克隆后想把它们定到一个层上,该怎么办?

还有,如果将一张图纸设置作为另一张得背景图,它的比例在程序里怎样实现阿?也就是它的视窗,有时他会很小有时很大,怎样控制让他与当前图纸匹配 [/B]


设置层到实体上,使用:
AcDbEntity::setLayer(...)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2002-7-19 08:50:34 | 显示全部楼层
用克隆时,如果被克隆的图纸没有所要的层,那如果用setLayer需要在被克隆的图纸上创建目标层。这比较麻烦

可以根据图纸的什么系统变量确定图块的插入比例么?xd
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-7-19 19:31:39 | 显示全部楼层
可以获取当前图形的范围和背景图的范围来计算比例及插入点

块(背景图)的图形范围可通过getGeomExtents()一次取得,而当前图形的图形范围好像没什么函数、系统变量可直接取得。我想可以通过遍历所有实体,然后对所有实体getGeomExtents()来求出,也许可以先"zoom e" 然后取Viewport的范围来求得. 也许还有更高效的方法

给出一段VBA代码供参考, 转ARX应不难:

  1. ' 将外部图形文件尽可能大的插入到指定的范围
  2. Private Sub InsertXrefIn(XrefName As String, XrefFile As String, left As Double, bottom As Double, right As Double, top As Double)
  3.   Dim InsertPoint(0 To 2) As Double
  4.   Dim insertedBlock As AcadExternalReference
  5.   Dim minExt As Variant
  6.   Dim maxExt As Variant
  7.   
  8.   Dim dLeft As Double
  9.   Dim dBottom As Double
  10.   Dim dRight As Double
  11.   Dim dTop As Double
  12.   
  13.   Dim dXScale As Double
  14.   Dim dYscale As Double
  15.   
  16.   ThisDrawing.MSpace = False
  17.   
  18.   InsertPoint(0) = 0: InsertPoint(1) = 0: InsertPoint(2) = 0
  19.   
  20.   ' 插入到PaperSpace
  21.   Set insertedBlock = ThisDrawing.PaperSpace.AttachExternalReference(XrefFile, XrefName, InsertPoint, 1, 1, 1, 0, False)
  22.   ' 取块范围
  23.   insertedBlock.GetBoundingBox minExt, maxExt
  24.   
  25.   dLeft = minExt(0)
  26.   dBottom = minExt(1)
  27.   dRight = maxExt(0)
  28.   dTop = maxExt(1)
  29.   
  30.   dXScale = (right - left) / (dRight - dLeft)
  31.   dYscale = (top - bottom) / (dTop - dBottom)
  32.   
  33.   If dXScale > dYscale Then
  34.     dXScale = dYscale
  35.   Else
  36.     dYscale = dXScale
  37.   End If
  38.   
  39.   InsertPoint(0) = (left + (right - left) / 2) - (dLeft + (dRight - dLeft) / 2) * dXScale
  40.   InsertPoint(1) = (bottom + (top - bottom) / 2) - (dBottom + (dTop - dBottom) / 2) * dYscale
  41.   
  42.   insertedBlock.InsertionPoint = InsertPoint
  43.   insertedBlock.XScaleFactor = dXScale
  44.   insertedBlock.YScaleFactor = dYscale
  45.   
  46.   insertedBlock.Update
  47.   
  48. End Sub
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-12-25 14:37 , Processed in 0.431775 second(s), 35 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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