乐筑天下

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

总新手到沼泽…VB块插入

[复制链接]

6

主题

20

帖子

2

银币

初来乍到

Rank: 1

铜币
44
发表于 2005-12-15 14:25:43 | 显示全部楼层 |阅读模式
大家好,
简而言之.我想创建一个VB应用程序,它将根据要插入的块在图层上插入一个块,缩放到当前的暗度,但如果在pspace dimscale中设置为1。我不是要求完整的应用程序,但入门会有所帮助....或提示....或示例....或等等...
我对VB完全陌生。似乎无法让$$peeps打开钱包进行正式培训,并试图在公司时间解决问题会产生一些时髦的眉毛动作。
提前致谢。
阿克德鲁特

本帖以下内容被隐藏保护;需要你回复后,才能看到!

游客,如果您要查看本帖隐藏内容请回复
回复

使用道具 举报

26

主题

275

帖子

6

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
379
发表于 2005-12-15 15:25:04 | 显示全部楼层
我感觉到你的痛苦。只是想让你知道有人在这里帮忙。我现在非常忙,所以如果没有其他人来,我会尽可能地帮你。无论如何,这会让这条线有点颠簸。
回复

使用道具 举报

6

主题

20

帖子

2

银币

初来乍到

Rank: 1

铜币
44
发表于 2005-12-15 15:52:53 | 显示全部楼层
Deegeecees
,感谢您的回复我一直在探索VB编辑器,并试图列出应用程序的外观和感觉。还写下不同的场景和可能的问题,等等...
前CadVault中的Kerry Brown在创建lisp例程方面帮助了我很多,该例程从图像图块菜单中的编码中设置了图层,比例等参数,并使用这些参数进行块插入。我担心图像磁贴菜单很快就会消失,我不喜欢设计中心或工具调色板。对于我们所做的,他们似乎创造了比必要的更多的工作。也就是说,我对用于图像磁贴菜单类型和其他公司自定义的自定义lisp和VB应用程序更感兴趣。
提前致谢,我不着急。
阿克德鲁特
回复

使用道具 举报

26

主题

275

帖子

6

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
379
发表于 2005-12-15 16:01:48 | 显示全部楼层
是的,设计中心更像是一个多方面问题的通用解决方案。拥有一个完全符合您需求的工具而不仅仅是一些工具会更有效率。但是,我面前有大约250个dwg,所以如果你还在觅食,试试沼泽地的链接页面。AfraLisp可能对你有一个良好的开端。好的教程,伟大的所有者/创造者。
回复

使用道具 举报

6

主题

20

帖子

2

银币

初来乍到

Rank: 1

铜币
44
发表于 2005-12-15 16:52:46 | 显示全部楼层
您是在寻找代码还是只是对方法的浏览?
我有很多这样的例程。不过,其中一些非常古老,并且有许多冗余。
  1. Sub BlockIns()
  2. Dim inspnt As Variant
  3. Dim blkref As AcadBlockReference
  4. Dim LayerCurrent As String
  5. LayerCurrent = ThisDrawing.ActiveLayer.Name
  6. Dim layer As AcadLayer
  7. Dim layername As String
  8. On Error GoTo err_han
  9. layername = "layername"
  10.     For Each layer In ThisDrawing.layers
  11.         If 0 = StrComp(layer.Name, layername, vbTextCompare) Then
  12.         ThisDrawing.ActiveLayer = ThisDrawing.layers("layername")
  13.         Else: ThisDrawing.layers.Add ("layername")
  14.         ThisDrawing.ActiveLayer = ThisDrawing.layers("layername")
  15.         End If
  16.     Next layer
  17.     For Each layer In ThisDrawing.layers
  18.         If layer.Name = "layername" Then
  19.         layer.color = [i]choose your color, here[/i[
  20.         layer.Linetype = "[i]put your linetype here[/i]"
  21.         End If
  22.     Next layer
  23.     If ThisDrawing.ActiveSpace = acModelSpace Then
  24.     inspnt = ThisDrawing.Utility.GetPoint(, vbCr & "Pick Insertion Point: ")
  25.     Set blkref = ThisDrawing.ModelSpace.InsertBlock(inspnt, "path to dwg", 1, 1, 1, 0)
  26.     End If
  27.     If ThisDrawing.ActiveSpace = acPaperSpace Then
  28.     inspnt = ThisDrawing.Utility.GetPoint(, vbCr & "Pick Insertion Point: ")
  29.     Set blkref = ThisDrawing.PaperSpace.InsertBlock(inspnt, "path to dwg", 1, 1, 1, 0)
  30.     End If
  31. ThisDrawing.ActiveLayer = ThisDrawing.layers(LayerCurrent)
  32. ThisDrawing.Application.Update
  33. Exit Sub
  34. err_han:
  35. Debug.Print Err.Number & Err.Description
  36.    Exit Sub
  37. End Sub

可能有更好的方法,或者至少更干净的方法,但这对我有用。
我删除了非常具体地针对我正在做的事情的项目,并用描述性的东西替换了它们,说明在那个位置要做什么。抱歉,如果我在那里留下了一些混乱的东西。
回复

使用道具 举报

16

主题

168

帖子

39

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
197
发表于 2005-12-15 18:38:42 | 显示全部楼层
这是我的思考过程......冗长,我道歉。我只是想解释我的思考过程。我不想让应用程序为我完成......帮助我编译整个事情的想法和代码片段。再次,我正在破解我的方式,我真诚地向代码大师道歉。
一步一步...所以我们开始了。
我们在图纸上使用了符号(块)。当这些块插入绘图时,会发生各种事情。即
插入点
图层
插入比例尺:(如果空间=模型设置插入比例尺为dimsize的当前值,如果空间=纸张设置插入比例尺为1.0)
旋转
镜像
属性(显示对话框以输入属性信息)
爆炸
当然有错误检查和恢复功能。
所以......
如果:
Block1: do 1 2 3 4 5
Block2: do 2 5 4
Block3: do 1 4 5
...
Block88: do 1 2 3 5
等等...
我附上了VB应用程序布局的基本想法的图像。
很高兴看到幻灯片要插入的块的类型视图。我还计划在“块描述”区域中使用块的“描述”,而不是实际的块名称。
我可能必须创建某种“INI”样式文件来对不同类型的描述进行分组。对此不确定。这个想法是,如果您单击“木材列”,只有木材列块会出现在“块描述”区域中。
“现有项目?”复选框将使块插入我们的“EXST”图层。“当前尺寸”只是一个温暖的模糊“我的当前设置是什么”类型的quck参考。
我附上了应用程序布局的图像(半成品)。
这是Kerry Brown基本上编写的代码,用于设置插入参数和使用该例程的示例菜单行。
菜单行:
[BLOCK1]^C^C^P(BLKINS"LAYER1""1""CONTINUOUS""BLOCK1"1.0 0 nil nil nil)
图像瓷砖菜单行:
[SLIDE-IMAGES(BLOCK1, BLOCK1 DESCRIPTION)]^C^C^P^P(BLKINS"LAYER1""1""CONTINUOUS""BLOCK1"1.0 0 nil nil)
谢谢
回复

使用道具 举报

18

主题

222

帖子

51

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
260
发表于 2005-12-16 06:17:48 | 显示全部楼层
Akdrafter,
对于第一次使用的应用程序来说,这是非常雄心勃勃的。Barry发布的代码包含了您实际需要的基本功能的大部分内容。我建议(因为您正在边走边学)您将代码分解为小块(任务)。换句话说,Barry提供的代码向您展示了如何获取和存储当前层,哪个空间,插入点等......让这一部分为您工作,然后添加一些额外的设置/变量。从内到外工作(可以这么说),在您处理容器之前,让更容易的内部工作。我建议您使用流程图来确定您要去的地方。
此外,您是否正在尝试为AutoCAD编写VBA或VB应用程序?区别在于您是使用Acad内部的VBA编辑器编写应用程序还是使用独立的VB编辑器。
您引用的是哪个版本的Acad?
回复

使用道具 举报

116

主题

996

帖子

9

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1466
发表于 2005-12-16 06:33:45 | 显示全部楼层
还要注意:如果您使用的是任何形式的VB,您将无法查看任何幻灯片文件,尽管您可以预览绘图位图
我同意亚利桑那州〜流程图以及一些伪代码将是一个良好的开端。我看到Kerry的代码是Lisp,你已经提到使用VB〜如果我是你,我会尽量避免使用这两种语言,特别是在第一个应用程序中。它可能会变得凌乱。
您可以通过使用(读取)文本文件列表或使用不同块样式的单独目录来分离块。
回复

使用道具 举报

71

主题

928

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1230
发表于 2005-12-16 06:48:30 | 显示全部楼层
是艾伦吗
我可能在比特方面有所帮助,但你非常慷慨地说“基本上是我写的” "" 'this will stop it once it encounters a blank line
    arrType1(I) = Replace(strTmp, "*", "")
    Line Input #fFile, strTmp
    arrName1(I) = strTmp
    I = 1 + I
    Line Input #fFile, strTmp
Wend
Close #fFile
ReDim Preserve arrType1(0 To I - 1)
ReDim Preserve arrName1(0 To I - 1)
ListBox1.List = arrType1
''Stop the repeat here
End Sub
[/code]
现在,由于两个数组都是索引对索引的匹配数组,所以当选择Insert按钮时,可以访问第二个数组“arrName1”,如下所示:
  1. blkName = arrName1(ListBox1.ListIndex)

您可以对每种类型的块做同样的事情.....对于每个X,只需在公共声明中添加一个arrNameX(),在局部声明中添加一个arrTypeX(),然后添加适当的代码。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-7-4 23:57 , Processed in 0.714758 second(s), 71 queries .

© 2020-2025 乐筑天下

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