gazzalp 发表于 2022-7-6 15:19:59

VBA和dimscale

我在之前的帖子中没有得到任何答案,所以我在这里问:当我添加维度时,它只会将其放在模型空间中(这并不太糟糕,因为99%的时间这是我想要的,但希望选项能够在其中任何一个中进行),但它没有考虑dimscale-似乎它总是将dimscale放在一个位置。如何更改代码以修复尺寸比例,并将其保留,以便将尺寸放入模型或图纸空间?这是我的代码:
 
Sub AddAlignedDimension()
Dim objNewLayer As AcadLayer
Dim varFirstPoint As Variant
Dim varSecondPoint As Variant
Dim varTextLocation As Variant
Dim ObjDimAligned As AcadDimAligned
Set objNewLayer = ThisDrawing.Layers.Add("Dimensions")
objNewLayer.color = acWhite
'define the dimension
varFirstPoint = ThisDrawing.Utility.GetPoint(, "Select first point: ")
varSecondPoint = ThisDrawing.Utility.GetPoint(varFirstPoint, _
                                              "Select second point: ")
varTextLocation = ThisDrawing.Utility.GetPoint(, _
                                     "Pick Dimension Text Location: ")
'Create an Aligned Dimension
Set ObjDimAligned = ThisDrawing.ModelSpace.AddDimAligned(varFirstPoint, _
                                                      varSecondPoint, varTextLocation)
                                                      
ObjDimAligned.Layer = "Dimensions"
ObjDimAligned.Update
End Sub

The Buzzard 发表于 2022-7-6 15:30:50

嘿,加扎普,
 
我不太熟悉VBA,但是AutoCADs维度变量有一个默认设置。创建标注样式时,需要设置标注变量,并将其保存到要创建的标注样式的名称中。我刚刚发布了一个lisp程序,该程序在“维度样式管理器”下执行此操作。如果您了解autolisp,此程序可能会为您提供一些有关如何进行此操作的想法。看一看,程序中的所有内容都解释得很好。
 
祝你好运
秃鹰

The Buzzard 发表于 2022-7-6 15:34:08

加扎尔普,
 
似乎您正试图调用一种类型的dimension命令,并期望通过设置dimvar使其看起来像某种方式。这是两个不同的命令。需要首先创建dimstyle,并在创建标注之前将其设置为当前。再次在创建dimstyle时,需要将该样式保存到名称中。然后可以调用标注命令,该命令将采用当前标注样式的特性。
 
我希望你明白这一点。
秃鹰

gazzalp 发表于 2022-7-6 15:38:46

嗯,这对我来说没有什么意义。。。当我使用原始autocad标注按钮添加标注时,它以dimscale设置为的任何比例输入比例,即:在图纸空间中通常为100,或在布局空间中通常为1。这正是我想要的。然而,使用VBA时,它总是将尺寸标注为1:1。我真的不认为我必须在VBA中做任何事情才能使其正确,考虑到在VBA中,我没有将比例设置为任何值-因此我会认为,当使用VBA宏时,它会以我当时使用的任何比例添加维度。这真的应该与尺寸风格有关,我不认为。。。

The Buzzard 发表于 2022-7-6 15:46:31

如果全局运行dimscale命令,则不会在图纸空间和模型空间之间以两种不同的比例进行尺寸缩放。什么
无论何时设置为,在您更改它之前,它都将保持这种方式。
 
另外,如何插入维度?尺寸是否像块一样预先制作?或者使用dim命令创建它。创建尺寸之前设置的任何尺寸比例都将用于该尺寸,无论其放置在何处。我不知道你想做什么。我不知道它怎么能提示您使用天平。您可以在创建标注之前提前设置,也可以使用不同的设置创建标注样式,并在运行dim命令之前进行设置。我从未听说过有人提示我要一个比例尺。它们是两个不同的命令。我现在不确定目标是什么。我会把这个留给更了解情况的人。我对此并不清楚。
 
很抱歉

The Buzzard 发表于 2022-7-6 15:51:47

我没有注意到代码中有任何东西会将维度比例更改为1。您是否正在后台运行另一个可能会影响这一点的代码?这有点奇怪,你的设置会无缘无故地改变。这是到目前为止你掌握的完整代码还是还有更多?
 
是否希望代码自动知道其位于图纸空间或模型空间中,并相应地更改dimscale?
 
我并不是说要吹毛求疵,但首先我不明白任何人会从纸张空间的维度开始。这就是视口的用途。我不明白这样标注尺寸有什么好处。
我遇到过这样做的人。这并不意味着这是错误的,但有更简单的方法。
 
我不确定我能在这里帮助你,但你也用lisp编程吗?

gazzalp 发表于 2022-7-6 15:57:32

Buzzard,我开始用lisp编程,但后来我的老板说VBA是一个不错的选择。更清楚地说,忘了我说过的关于模型空间的任何事情-你是对的,我们不应该真的需要在模型空间中进行尺寸标注,而且在大多数情况下我们不需要。回到我的主要问题,我们使用几种不同的尺寸比例,即:绘制混凝土详图时为1:20,绘制平面图时为1:100/150,绘制钢结构详图时为1:5等。因此,当我们在图纸空间中时,根据我们正在处理的内容,我们将为不同的图纸设置不同的尺寸比例(如上所述)。该VBA例程始终以1:1的比例显示尺寸。我不想让它问我想要什么维度比例,我希望它能够意识到我的维度比例设置为特定的东西(在这个例子中,我们会说我正在处理具体的细节,在1:20),所以我的维度比例将是20。因此,当我执行VBA例程时,它应该将维度放在比例20,而不是像往常一样的1(正如你可以想象的那样,然后维度显示得非常小)。我们没有其他运行的程序/例程会使其默认为1,我在这里输入的代码是完整的代码。当我使用autocad按钮时,结果是正确的-将其设置为1:20或1:100或我的dimscale设置为的任何值,但当我使用此VBA例程时,它总是在1。希望这能让事情变得更清楚

The Buzzard 发表于 2022-7-6 16:01:01

加扎尔普
 
同样,我不在VBA中编程。我最近发布了一个维度样式管理器,它内置了您需要的所有比例,然后是一些。如果你愿意,试试看,也许它会帮你省去很多头疼的事。对那个节目的任何改动我都能帮你。这取决于你。
 
请告诉我,
秃鹰

borgunit 发表于 2022-7-6 16:04:30

听起来您需要根据您在中选择的视口及其比例来选择或让程序计算比例。程序的第一部分需要选择一个点,然后在可用的视口中循环(记住它们可能重叠-有问题?)。一旦你有了它,阅读它的规模和相应的调整。这听起来合理吗?

The Buzzard 发表于 2022-7-6 16:13:10

按照我的程序的工作方式,你只需选择比例,它就会告诉你推荐的视口设置。所有默认值都设置为我喜欢的,但可以更改为你的。这对你合适吗?
页: [1] 2
查看完整版本: VBA和dimscale