乐筑天下

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

[编程交流] 交互式移动文本

[复制链接]

29

主题

519

帖子

477

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
163
发表于 2022-7-6 22:45:11 | 显示全部楼层 |阅读模式
我已经从两个现有的文本对象中创建了一个新的文本对象,并希望让用户使用橡皮筋从原始文本位置以交互方式将新的文本对象放置在图形中。
 
获取橡皮筋没有问题,但我希望看到光标上的文本,以便用户可以在图形中以最佳方式放置文本。我试过几种方法,但在放置过程中无法将文本显示在屏幕上。
 
有人能给点建议吗?
回复

使用道具 举报

10

主题

973

帖子

909

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 22:58:35 | 显示全部楼层
我想这是一个。NET请求。如果是这样,那么这条线索可能是信息性的。
 
 
 
http://www.cadtutor.net/forum/showthread.php?41649
 
 
 
这里的示例没有操作文本对象(实际上是圆),但过程是相同的。
回复

使用道具 举报

29

主题

519

帖子

477

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
163
发表于 2022-7-6 23:05:21 | 显示全部楼层
 
这一次是VBA Sean,我在现有VBA程序中添加了一些其他函数,以及将整个程序转换为所需的时间。目前无法证明NET的合理性。
 
我将看一看Kean的示例,但我不认为跳汰是VBA中的一个选项。
 
我试图复制的只是AutoCAD的MOVE命令,其中文本粘附在光标上,并在其原始位置有一个橡皮筋。
回复

使用道具 举报

10

主题

973

帖子

909

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 23:14:04 | 显示全部楼层
不幸的是,VBA没有为动态视觉反馈提供许多选项(在.NET中称为“抖动”)。我认为,唯一的选择是调用此绘图。send命令。这样,可以通过AutoCAD自己的“移动”命令操作文本图元。
 
不过,SendCommand存在同步问题(即,只有在整个VBA代码运行后才能调用这些命令)。如果移动entily是该过程的最后一步,那么SendCommand应该可以很好地工作。
回复

使用道具 举报

29

主题

519

帖子

477

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
163
发表于 2022-7-6 23:18:51 | 显示全部楼层
我不太确定如何一起构建命令字符串。我在变量objNewText中有文本,在变量varPoint1中移动的开始位置,我希望用户为文本选择新位置(我使用的是ThisDrawing.Utility.GetPoint(varPoint1,“为文本选择新插入点:”)
回复

使用道具 举报

10

主题

973

帖子

909

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 23:27:37 | 显示全部楼层
VBA中的GetPoint方法可以很好地工作,但不允许视觉反馈。这条线索展示了总体思路。有关字符串分解,请参阅ASMI的帖子。
 
http://www.cadtutor.net/forum/showthread.php?23468
回复

使用道具 举报

29

主题

519

帖子

477

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
163
发表于 2022-7-6 23:35:13 | 显示全部楼层
谢谢你,肖恩。
 
我们在没有“幽灵”文字的情况下进行了尝试,那只是用橡皮筋,大家在使用它时一点问题都没有。因此,目前我将保持原样,当我有一点时间时,我将在蛋糕上添加糖霜,并进一步发展它。我已经为你的链接添加了书签,ASMI的代码看起来很有趣,可以试一试。
 
我正在从VBA转移到VB。NET,但有时会有人提出问题或对现有VBA代码进行更改,然后您就可以回到那里了。
 
再次感谢您的帮助。
回复

使用道具 举报

1

主题

1069

帖子

1050

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
69
发表于 2022-7-6 23:42:29 | 显示全部楼层
那么这个代码剪报呢:
  1. Option Explicit
  2. Sub dragText()
  3. Dim oEnt As AcadEntity
  4. Dim oText As
  5. AcadText
  6. Dim pickPt As Variant
  7. Dim cmd As
  8. String
  9. ThisDrawing.Utility.GetEntity oEnt, pickPt, vbCrLf & "Select
  10. text"
  11. If Not TypeOf oEnt Is AcadText Then
  12. Exit Sub
  13. End If
  14. Set oText
  15. = oEnt
  16. Dim basePt As Variant
  17. basePt = oText.InsertionPoint
  18. ' you have
  19. as well to specify base point before,
  20. 'basePt = .GetPoint(pickPt, vbCrLf
  21. & "Specify a base point : ")
  22. Dim hdl As String
  23. hdl =
  24. oEnt.handle
  25. Dim pt As String
  26. pt = "(list " & Replace(CStr(basePt(0)),
  27. ",", ".") & " " & Replace(CStr(basePt(1)), ",", ".") &
  28. Replace(CStr(basePt(2)), ",", ".") & ")"
  29. cmd = "(command " & Chr(34)
  30. & "_move" & Chr(34) & " (handent " & Chr(34) & hdl &
  31. Chr(34) & ") " & vbCr & Chr(34) & Chr(34) & pt & vbCr
  32. & "PAUSE)" & vbCr
  33. ThisDrawing.SendCommand cmd
  34. 'just a dummy message to  stop command echoing:
  35. MsgBox "pokey"
  36. End Sub
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-6 23:51:02 | 显示全部楼层
如果您决定采用SendCommand路线,这可能会有所帮助:
 
  1. (command "._move" newss "" pt "[color=blue]drag[/color]" pause)

 
这一行是从一个古老的、但很好的LISP例程(pre-VisualLisp)中提取出来的,它复制并旋转了一个选择集(恰如其分地命名为CoRo)。在LISP例程的前面几行中,使用了就地复制,其中“pt”表示用户指定的基点,从该基点复制、放置和旋转生成的选择集。
 
我无法为您翻译语法(从LISP到VBA),也无法翻译使用SendCommand的任何限制;希望这在概念上对你有所帮助。
 
如果这种交互式移动不是在当前VBA代码的末尾,那么可能存在一种简单的方法,可以将VBA拼接成两部分。。。前者位于SendCommand之前,后者可以从LISP本身调用?这(如果可行的话)至少可以缓解VBA->dotNET迁移的需要。。。只是一个想法。
 
干杯
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-4 11:33 , Processed in 1.734341 second(s), 70 queries .

© 2020-2025 乐筑天下

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