乐筑天下

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

[求助]help!!

[复制链接]

21

主题

33

帖子

1

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
117
发表于 2003-2-3 16:21:00 | 显示全部楼层 |阅读模式
我在尝试做一个二维的元件系统,此系统会重复用到很多宏(如插入块宏)
我的问题是:当我插入一个块 并且 画了一条直线(直线的一端在块上) 实现块移动时直线随动
我知道vba有modify event可以触发代码(先删除所连直线,再根据在块上的point 重画一条直线 再update一下。但问题是:当我移动块的时候我如何知道是那条直线
连着了,我甚至无法在move block时让直线的点也跟着动,vba有触发事件 但如何触发直线的
重置(并且使系统知道该触发谁)
-----------------------------请您多指教---------------------------------------
-----------------------------谢谢!!-----------------------------------------

epg0clyahb3.jpg

epg0clyahb3.jpg

回复

使用道具 举报

158

主题

2315

帖子

10

银币

顶梁支柱

Rank: 50Rank: 50

铜币
2951
发表于 2003-2-3 21:30:00 | 显示全部楼层
1.在利用程序画完直线后,应该将直线的ObjectID保存在图块的XData中。下面的例子看看怎样将直线的ID保存下来,你自己把内容写到你的程序中:
'将Entity1对象的ObjectID保存到Entity2对象的XData中的函数
Function SetObjectIDtoNextEntXData (Entity1 As AcadEntity, Entity2 As AcadEntity)
    Dim Entity1 As AcadEntity
    Dim BlkXType(0 To 1) As Integer
    Dim BlkXValue(0 To 1) As Variant
    BlkXType(0) = 1001: BlkXValue(0) = "BlkAttLine"
    BlkXType(1) = 1071: BlkXValue(1) = Entity1.ObjectID
    Entity2.SetXData BlkXType, BlkXValue
End Function
2.下面的程序可以实现你的功能了:
Private Sub AcadDocument_ObjectModified(ByVal Object As Object)
Dim Entity As AcadObject
Set Entity = Object
Dim BlkXValue As Variant
Dim BlkXType As Variant
Dim LineID As Long
Dim LineEntity As AcadEntity
If Entity.ObjectName = "AcDbBlockReference" Then
     Entity.GetXData "BlkAttLine", BlkXType, BlkXValue
     If IsArray(BlkXType) Then
        LineID = BlkXValue(1)
        Set LineEntity = ThisDrawing.ObjectIdToObject(LineID)
        LineEntity.Move LineEntity.StartPoint, Entity.InsertionPoint
    End If
        
End If
End Sub
另外,你可以设置更多的条件限制,如图块名称的限制。
回复

使用道具 举报

21

主题

33

帖子

1

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
117
发表于 2003-2-3 23:22:00 | 显示全部楼层
另外,想请教 vba 的书我已有不少 可就是买不到更深层次的书(住天津,能买的都买了,都是像字典一样的简单程序介绍,启发不大)
===================================================================
是不是我的购买方式不对(在书店购买是只找带vba 三个字的书)
难道是找有 activeX之类字样的
-------------------------------------------------------------------
帮忙推荐几本吧?
========================非常感谢!!===============================
回复

使用道具 举报

21

主题

33

帖子

1

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
117
发表于 2003-2-4 02:26:00 | 显示全部楼层
您好:
    请问,当一直线连上一个块时触发事件
应如何做(用vba),这个问题我已想了很
久。如果vba里没有,vlisp有没有呢(我对
vlisp不太熟)
---------------请多指教---------------
===============谢谢!!===============

ihtfrjqbo1u.jpg

ihtfrjqbo1u.jpg

回复

使用道具 举报

21

主题

33

帖子

1

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
117
发表于 2003-2-4 02:40:00 | 显示全部楼层
请看贴子 “前一个触发事件”(带图片jpg的那个)
-------------谢谢!--------------------------
回复

使用道具 举报

158

主题

2315

帖子

10

银币

顶梁支柱

Rank: 50Rank: 50

铜币
2951
发表于 2003-2-4 10:20:00 | 显示全部楼层
其实对于一些专业的程序来说,用触发的方式只是辅助用,有些具有特殊意义的实体还是用自己的程序来完成,这样做起来方便,而且也不会产生在画图过程中无意识地触发其它不必要的动作。
对于你这个方式,你可以自定义一个画线的命令,选择起点,选择图块,这样通过图块属性中的插入点可以取得直线的终点来画线,而画完线后就可以直接取得直线的ID并保存在刚才选择图块的XData中。
回复

使用道具 举报

4

主题

15

帖子

4

银币

初来乍到

Rank: 1

铜币
31
发表于 2003-2-7 20:14:00 | 显示全部楼层
呵,
我也找到方法了。
关于尺寸驱动的问题。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-13 07:57 , Processed in 0.820034 second(s), 70 queries .

© 2020-2025 乐筑天下

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