乐筑天下

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

[综合讨论] 填充t的非lisp方法

[复制链接]
YZ

27

主题

232

帖子

205

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
135
发表于 2022-7-6 23:31:50 | 显示全部楼层 |阅读模式
我正在设计一种在测量图上将窗口高度制成表格的快速方法。我们测量窗户的顶部和底部,然后在平面图中显示。
 
 
我们的绘图工具目前将高度输入表格。我突然想到,可能有一种方法可以一次拾取一个文本对象(包含高度),然后将每个值粘贴到表的下一行。
 
 
有人给了我灵感让我从这里开始吗?我正在寻找非lisp解决方案。
回复

使用道具 举报

10

主题

598

帖子

594

银币

初来乍到

Rank: 1

铜币
48
发表于 2022-7-6 23:45:57 | 显示全部楼层
你能举一个例子,一个有文字和填充表的窗口绘图,它总是有助于看到一个问题,例如它是文字,多行文字或属性。
回复

使用道具 举报

YZ

27

主题

232

帖子

205

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
135
发表于 2022-7-6 23:53:07 | 显示全部楼层
谢谢你的回复,史蒂文。我知道这很难。这里有更多信息。
 
 

                               
登录/注册后可看大图

 
橙色文字都是单行文字对象。较小的数字表示窗台的标高,而较大的数字表示窗头的标高。
 
我必须把它们输入这样的表格中:

                               
登录/注册后可看大图

 
我已经有了一个宏,当我穿过并拾取每个窗口时,它会用递增的数字标记每个窗口。
 
随附样品图纸。WindowTables。图纸
003158bo54mddwtx31j4cm.png
003204fpejxvoj2xzgxjpn.png
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-7 00:07:40 | 显示全部楼层
我知道Steven是LT的天才,但根据你的PM,如果你说Briscad,你可以很容易地使用一个块而不是一个表拾取窗口编号拾取文本来完成这项工作。“时间表”已更新,我们对排水坑时间表执行此操作。它将第一个id与第一个属性匹配,以便它知道填充时间表的块可以位于图形中的任何位置。根据图像,信息来自dwg的大约4个不同部分。
 
003206olmozod11152hlec.jpg
回复

使用道具 举报

YZ

27

主题

232

帖子

205

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
135
发表于 2022-7-7 00:17:47 | 显示全部楼层
有趣的它如何知道块中有多少行?例如,如果你的凹坑比正常的多怎么办?进程可以添加行吗?
 
你用lisp激活它吗?
 
谢谢你的想法。
回复

使用道具 举报

10

主题

598

帖子

594

银币

初来乍到

Rank: 1

铜币
48
发表于 2022-7-7 00:27:41 | 显示全部楼层
我的第一反应是,像比加尔所说的那样建议一个区块(不确定与布里斯卡德的联系?)。应该可以创建一个块,在插入数字时自动增加数字,然后填充属性值,而不是使用文本,这样它就不会读取现有文本,这是一种替代的工作方法。块信息很容易更改,可以读取到csv文件并导入excel,从那里可以将其作为表格读回Autocad。
 
 
如果没有LISP或类似的编程选项,我们这些使用LT的人只能找到不同的工作方法,因此很难将其作为一个单键解决方案。
我的下一个问题是,看到您的图形,有两个门槛标高值(您为表格选择哪个值)
您需要多久创建一次这样的图形?如果是全天、每天,那么肯定有其他选项可以节省时间(但它们需要一段时间才能设置,因此不适合偶尔使用)
如果这是一个经常使用的过程,那么了解您现在使用的实际过程会很有帮助。如何收集测量数据,谁将其输入图形,如何输入等。
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-7 00:37:22 | 显示全部楼层
YZ没有那么难,你有一个块,但在一个普通的线型网格中插入了多次,使其看起来像一个表格,可以有多少行,你有一个属性,具有唯一的值,在示例中是点号,这是在代码中首先选择的,它是块或文本,是的,有一点手动复制或编辑坑号,但如果你看一下明细表,大约有15列输入,而这些信息并不都在一个地方。添加下一行是我需要做的事情之一。代码支持文本,因此在您的情况下“Window-23”是可以的。
 
发布一个简单的dwg,我很感谢你只有LT,但正如你提到的,可能是升级,所以为什么不到一个支持lisp的Autocad替代品。再做一次20分钟的任务,现在大约10秒,你算出你节省的钱。
 
  1. Public Sub ModifyPitSchedule2()
  2. ' puts in 1 pt x and y's plus length and width
  3. Dim SS As AcadSelectionSet
  4. Dim objENT As AcadEntity
  5. Dim Count, Cntr As Integer
  6. Dim Newpitname As String
  7. Dim pitname As String
  8. Dim FilterDXFCode(0) As Integer
  9. Dim FilterDXFVal(0) As Variant
  10. Dim PitNameSelect As AcadObject
  11. Dim basepnt, pt1, pt2, pt3 As Variant
  12. Dim attribs As Variant
  13. On Error Resume Next
  14. Newpitname = "1"   'dummy to pass then return changed
  15. pitname = Getpitname(Newpitname)
  16. MsgBox "pitname selected is " & pitname
  17. basepnt = ThisDrawing.Utility.GetPoint(, " Pick PIT center ")
  18. ptxtx1 = CStr(FormatNumber(basepnt(0), 3))
  19. ptxty1 = CStr(FormatNumber(basepnt(1), 3))
  20. pt1 = ThisDrawing.Utility.GetPoint(, " Pick 1st point ")
  21. pt2 = ThisDrawing.Utility.GetPoint(, " pick 2nd point L ")
  22. pt3 = ThisDrawing.Utility.GetPoint(, " pick 3rd point W ")
  23. lx = Abs((pt1(0) - pt2(0)))
  24. ly = Abs((pt1(1) - pt2(1)))
  25. lz = Int((lx ^ 2 + ly ^ 2) ^ 0.5 * 10000) / 10
  26. lengthpit = CStr(FormatNumber(lz, 0))
  27. lx = Abs((pt2(0) - pt3(0)))
  28. ly = Abs((pt2(1) - pt3(1)))
  29. lz = Int((lx ^ 2 + ly ^ 2) ^ 0.5 * 10000) / 10
  30. widthpit = CStr(FormatNumber(lz, 0))
  31. 'This will clear out old selectionsets, and prevent the "selection set already exists" error
  32. If ThisDrawing.SelectionSets.Count > 1 Then
  33. For Cntr = 0 To ThisDrawing.SelectionSets.Count - 1
  34. ThisDrawing.SelectionSets.Item(Cntr).Delete
  35. Next Cntr
  36. End If
  37. FilterDXFCode(0) = 0
  38. FilterDXFVal(0) = "INSERT"
  39. Set SS = ThisDrawing.SelectionSets.Add("pit2sel")
  40. SS.Select acSelectionSetAll, , , FilterDXFCode, FilterDXFVal
  41. BLOCK_NAME = "SCHEDTEXT"
  42. For Cntr = 0 To SS.Count - 1
  43. If SS.Item(Cntr).Name = BLOCK_NAME Then
  44.   attribs = SS.Item(Cntr).GetAttributes
  45.     If attribs(0).TextString = pitname Then
  46.    
  47.        attribs(1).TextString = ptxtx1
  48.        attribs(2).TextString = ptxty1
  49.        attribs(5).TextString = lengthpit
  50.        attribs(6).TextString = widthpit
  51.       
  52.        attribs(1).Update
  53.        attribs(2).Update
  54.        attribs(5).Update
  55.        attribs(6).Update
  56.        Cntr = SS.Count
  57.                
  58.       End If
  59.       
  60. End If
  61. Next Cntr
  62. ThisDrawing.SelectionSets.Item("pit2sel").Delete
  63. End Sub
  64. Function Getpitname(Newpitname As String) As String
  65. Dim PitNameSelect As AcadObject
  66. Dim pitattribs As Variant
  67. ThisDrawing.Utility.GetEntity PitNameSelect, basepnt, "pick pit name : "
  68. If PitNameSelect.ObjectName = "AcDbText" Then
  69. Getpitname = PitNameSelect.TextString
  70. End If
  71. If PitNameSelect.ObjectName = "AcDbBlockReference" Then
  72. pitblname = PitNameSelect.Name   ' RETURNS BLOCK NAME
  73. pitattribs = PitNameSelect.GetAttributes
  74. Getpitname = pitattribs(0).TextString
  75. End If
  76. End Function
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-10 04:26 , Processed in 0.380074 second(s), 68 queries .

© 2020-2025 乐筑天下

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