找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1763|回复: 10

[求助]:如何通过VBA命令选中指定实体?

[复制链接]
发表于 2007-4-26 14:21:44 | 显示全部楼层 |阅读模式

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

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

×
如题。 我想在VBA程序中实现选中指定的实体的功能,就象用鼠标在屏幕上选中实体那样的效果,代码应该怎么写呢?    先按一定的筛选条件,把实体放到一个选择集SelectionSet里,然后想让这些实体在屏幕上显示为被选中状态。 自己翻了好长时间帮助文件,也没找到解决的方法。特来求助,希望能有高人给解答一下。

参见三楼图示。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2007-4-26 16:30:39 | 显示全部楼层
1.可以通过句柄
2.可通过建立选择集
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-5-21 09:33:52 | 显示全部楼层
楼上误会我的意思了。
我想实现的是在已经建立好一个选择集的情况下,怎么样通过代码让选择集中的实体的显示处于被选中状态? 就是实体上有夹点的状态,如下图:


这么长时间了,都没有人能回答一下吗?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2007-5-25 16:02:10 | 显示全部楼层
Public Function SelectObject() As AcadSelectionSet
Dim UsersSelection As AcadSelectionSet
With ThisDrawing
  On Error Resume Next
  .SelectionSets("CurrentSelection").Delete
  Set UsersSelection = .SelectionSets.Add("CurrentSelection")
  UsersSelection.SelectOnScreen
End With
If UsersSelection Then
Set SelectObject = UsersSelection
Else
Set SelectObject = Null
End If
End Function
‘调用方法
Dim ss As AcadSelectionSet
Set ss = SelectObject() '屏幕选择对象
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-5-28 08:59:46 | 显示全部楼层
感谢楼上的回复。
但是楼上的代码并不能实现我说的功能。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2007-5-28 18:13:58 | 显示全部楼层
最初由 烟雨.江南 发布
[B]感谢楼上的回复。
但是楼上的代码并不能实现我说的功能。 [/B]

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

使用道具 举报

 楼主| 发表于 2007-5-29 08:30:57 | 显示全部楼层
我想实现的功能是:把选择集中的实体通过VBA代码让它们在屏幕上处于被选中的状态,如我在三楼所叙述的那样。
并不是问怎么选择,而是已经选择好实体在选择集里面了,怎么能让这些实体处于被选中的状态?
举个例子,如果我要复制一个圆,用先选择后执行的方法,首先要在屏幕上选取那个圆,然后再输入复制的命令。现在我想通过VBA来实现选取圆的操作,然后我可以手动输入复制或者其它什么命令对其进行处理。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2007-5-30 15:12:38 | 显示全部楼层
这个问题如果直接用vba实现起来比较困难,我也查了一些资料供你参考。
http://discussion.autodesk.com/thread.jspa?messageID=421218
PickFirst Selection w/ VBA? (6 replies)
Posted by: Layton, Corey A.
Date: Oct/23/01 - 06:51 (GMT)   
How may I make a pickfirst selection w/ VBA?
I have a defined AcadSelectionSet. I wish to select the objects (pick first)
w/ VBA, without user input.


Reply From: Marshall, Paul
Date: Oct/23/01 - 09:13 (GMT)

Re: PickFirst Selection w/ VBA?
On Tue, 23 Oct 2001 07:51:23 -0700, "Corey A. Layton"
wrote:

? How may I make a pickfirst selection w/ VBA?
? I have a defined AcadSelectionSet. I wish to select the objects (pick first)
? w/ VBA, without user input.

IME, you don't.

You can clear it with:

If ThisDrawing.PickfirstSelectionSet.Count > 0 Then
ThisDrawing.SendCommand _
"(COMMAND ""SELECT"" ""R"" ""ALL"" """") "
End If

You can add to it with something like:

strHandle = Ent.Handle
ThisDrawing.SendCommand "(setq ss (nth 1 (ssgetfirst))) " & _
"(ssadd (handent """ & strHandle & """) ss) " & _
"(sssetfirst nil ss) "


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

使用道具 举报

 楼主| 发表于 2007-5-31 07:58:07 | 显示全部楼层
非常感谢!!
这样看来,单纯使用VBA的话是没法实现了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2007-5-31 21:09:48 | 显示全部楼层
vba有自己的缺陷!
         Re: Grips of a line
"dlutzow" wrote in message
news:f0a84a8.-1@WebX.maYIadrTaRb...
> How can I display the grips of a line. I am using Acad2000 and VB 6. In
VisualLISP you can use the function (sssetfirst arg1 arg2). Can anyone
please help me.

The only way to do this in VBA is by using AcadX.arx
(www.caddzone.com/acadx/acadx.htm).

You must implement your code as a command using the
AcadXEditorCommand class, and from within the command's
Execute() event handler, you can assign the selection
set containing the objects to be left gripped and
selected to the ActiveSelectionSet property of the
AcadXDrawingEditor class.

Here is a simple demo that implements a command called
VBEXPLODE, which will explode a selected LWPOLYLINE and
leave the resulting entities gripped and selected:

'---------------------------------------------------------
Public WithEvents cmdExplode As AcadXEditorCommand

Public Sub InitApplication()
Dim Editor As New AcadXDrawingEditor
Set cmdExplode = Editor.AddCommand("VBEXPLODE")
cmdExplode.Enabled = False
cmdExplode.Transparent = False
cmdExplode.NoPerspective = True
cmdExplode.RedrawPickFirst = True
cmdExplode.Enabled = True
End Sub

Private Sub cmdExplode_Execute(Context As ACADXLib.IAcadXDocumentContext)
Dim Ent As AcadEntity
Dim Pt As Variant
Dim Polyline As AcadLWPolyline
On Error GoTo Done
Context.Document.Utility.GetEntity Ent, Pt, "Select LWPolyline: "
Set Polyline = Ent
Context.Command Array("._EXPLODE", Polyline)
Dim Editor As New AcadXDrawingEditor
Editor.ActiveSelectionSet = Context.Document.ActiveSelectionSet
Done:
Err.Clear
End Sub

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

使用道具 举报

发表于 2007-6-19 23:47:14 | 显示全部楼层
我以前也在找这样的方法,后来干脆使用p命令将就着用了。可以先选择,然后输入要执行的命令,之后用p命令输入对象就可以了。这样做虽然很笨,但还有效。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-22 05:43 , Processed in 0.325732 second(s), 52 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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