交互式移动文本
我已经从两个现有的文本对象中创建了一个新的文本对象,并希望让用户使用橡皮筋从原始文本位置以交互方式将新的文本对象放置在图形中。获取橡皮筋没有问题,但我希望看到光标上的文本,以便用户可以在图形中以最佳方式放置文本。我试过几种方法,但在放置过程中无法将文本显示在屏幕上。
有人能给点建议吗? 我想这是一个。NET请求。如果是这样,那么这条线索可能是信息性的。
http://www.cadtutor.net/forum/showthread.php?41649
这里的示例没有操作文本对象(实际上是圆),但过程是相同的。
这一次是VBA Sean,我在现有VBA程序中添加了一些其他函数,以及将整个程序转换为所需的时间。目前无法证明NET的合理性。
我将看一看Kean的示例,但我不认为跳汰是VBA中的一个选项。
我试图复制的只是AutoCAD的MOVE命令,其中文本粘附在光标上,并在其原始位置有一个橡皮筋。 不幸的是,VBA没有为动态视觉反馈提供许多选项(在.NET中称为“抖动”)。我认为,唯一的选择是调用此绘图。send命令。这样,可以通过AutoCAD自己的“移动”命令操作文本图元。
不过,SendCommand存在同步问题(即,只有在整个VBA代码运行后才能调用这些命令)。如果移动entily是该过程的最后一步,那么SendCommand应该可以很好地工作。 我不太确定如何一起构建命令字符串。我在变量objNewText中有文本,在变量varPoint1中移动的开始位置,我希望用户为文本选择新位置(我使用的是ThisDrawing.Utility.GetPoint(varPoint1,“为文本选择新插入点:”) VBA中的GetPoint方法可以很好地工作,但不允许视觉反馈。这条线索展示了总体思路。有关字符串分解,请参阅ASMI的帖子。
http://www.cadtutor.net/forum/showthread.php?23468 谢谢你,肖恩。
我们在没有“幽灵”文字的情况下进行了尝试,那只是用橡皮筋,大家在使用它时一点问题都没有。因此,目前我将保持原样,当我有一点时间时,我将在蛋糕上添加糖霜,并进一步发展它。我已经为你的链接添加了书签,ASMI的代码看起来很有趣,可以试一试。
我正在从VBA转移到VB。NET,但有时会有人提出问题或对现有VBA代码进行更改,然后您就可以回到那里了。
再次感谢您的帮助。 那么这个代码剪报呢:
Option Explicit
Sub dragText()
Dim oEnt As AcadEntity
Dim oText As
AcadText
Dim pickPt As Variant
Dim cmd As
String
ThisDrawing.Utility.GetEntity oEnt, pickPt, vbCrLf & "Select
text"
If Not TypeOf oEnt Is AcadText Then
Exit Sub
End If
Set oText
= oEnt
Dim basePt As Variant
basePt = oText.InsertionPoint
' you have
as well to specify base point before,
'basePt = .GetPoint(pickPt, vbCrLf
& "Specify a base point : ")
Dim hdl As String
hdl =
oEnt.handle
Dim pt As String
pt = "(list " & Replace(CStr(basePt(0)),
",", ".") & " " & Replace(CStr(basePt(1)), ",", ".") &
Replace(CStr(basePt(2)), ",", ".") & ")"
cmd = "(command " & Chr(34)
& "_move" & Chr(34) & " (handent " & Chr(34) & hdl &
Chr(34) & ") " & vbCr & Chr(34) & Chr(34) & pt & vbCr
& "PAUSE)" & vbCr
ThisDrawing.SendCommand cmd
'just a dummy message tostop command echoing:
MsgBox "pokey"
End Sub
如果您决定采用SendCommand路线,这可能会有所帮助:
(command "._move" newss "" pt "drag" pause)
这一行是从一个古老的、但很好的LISP例程(pre-VisualLisp)中提取出来的,它复制并旋转了一个选择集(恰如其分地命名为CoRo)。在LISP例程的前面几行中,使用了就地复制,其中“pt”表示用户指定的基点,从该基点复制、放置和旋转生成的选择集。
我无法为您翻译语法(从LISP到VBA),也无法翻译使用SendCommand的任何限制;希望这在概念上对你有所帮助。
如果这种交互式移动不是在当前VBA代码的末尾,那么可能存在一种简单的方法,可以将VBA拼接成两部分。。。前者位于SendCommand之前,后者可以从LISP本身调用?这(如果可行的话)至少可以缓解VBA->dotNET迁移的需要。。。只是一个想法。
干杯
页:
[1]