乐筑天下

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

[编程交流] VBA限制

[复制链接]

12

主题

175

帖子

77

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
149
发表于 2022-7-6 22:44:07 | 显示全部楼层
无论如何,如果你决定继续你的“轮子”,我很乐意尝试并帮助你的VBA代码(并获得相应的负面论坛数字!)
回复

使用道具 举报

29

主题

519

帖子

477

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
163
发表于 2022-7-6 22:47:45 | 显示全部楼层
 
对不起,我不明白你的意思。你想详细说明一下吗?
 
BigAl所说的是正确的,你没有重新发明已经存在的东西,但如果你没有访问它的权限,其他工具不能满足你的需要,那么编写自己的模块是唯一的出路。在这方面,我认为如果可以的话,这里有足够多的人愿意提供帮助。
回复

使用道具 举报

12

主题

175

帖子

77

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
149
发表于 2022-7-6 22:52:11 | 显示全部楼层
很高兴见到你,泰克
 
我认为你可以做任何你感兴趣的事情。
这只是严格选择更有价值的东西的另一个角度。
但两者都有资格,这取决于你自己的需要。和倾向。
 
因此,比格尔的建议当然是公平的,如果绿蜂有兴趣以最少的努力(时间和金钱)获得特定的结果,他会遵循它。
如果GreenBee有兴趣开发一段VBA代码,以加深他在该特定方向上的对象/方法管理知识,并将其用于进一步的需要,他会选择自己开发一些代码。
在我明确支持的后一种情况下,这个论坛的人肯定会提供很大帮助。
 
最后,与比格尔和你的观点(我相信这里也有许多其他人的观点)相比,我的“(并因此获得负面论坛数字)”既是对我先验非实用主义观点的自我讽刺评论,也是一种确认我最初立场的方式,尽管随后出现了“嘘声”。
 
希望这样做
 
再见
回复

使用道具 举报

2

主题

16

帖子

14

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-6 22:52:56 | 显示全部楼层
我必须承认RICVBA有道理。我的目的是看看在写一段代码时我能把我的知识(不是那么广博)推到多大程度,同时也要加快我的工作过程。
这是代码。我承认这可能会让人困惑,但这只是一个过程中的版本。用户输入两个变量,即道路宽度和横截面之间的距离,然后在屏幕上依次选择道路的第一个点、最后一个点和它们之间的所有路段。
 
  1. Private Sub CommandButton1_Click()
  2. Dim SOS As AcadSelectionSet
  3. Dim objSS As AcadSelectionSet
  4. Dim PopLin As AcadLine
  5. Dim Kruzic As AcadCircle
  6. Dim objent As AcadEntity
  7. Dim Pravac As AcadLine
  8. Dim PrKrivina As AcadLWPolyline
  9. Dim Luk As AcadArc
  10. Dim Rluk, Alfa As Double
  11. Dim L, Lpravac, Lprkriv, Lluk, Lostatak As Double
  12. Dim PocToc As Variant
  13. Dim ZadToc As Variant
  14. Dim PrvaTocka(0 To 2) As Double
  15. Dim DrugaTocka(0 To 2) As Double
  16. Dim RazProf, SirCest As Double
  17. Dim Krug As AcadCircle
  18. Dim sjeciste As Variant
  19. Dim sjeciste2 As Variant
  20. Dim BrProfila, i, n As Integer
  21. Dim PlusMinus As Boolean
  22. Dim Rpoplin As Double
  23. Dim pi As Double
  24. Dim linija, linija1, linija2 As AcadLine
  25. Dim BrojacProfila As Integer
  26. Dim SredisnjaTockaLuka As Variant
  27. Dim BrPomaka, brojX As Integer
  28. Dim kolicnik As Double
  29. Dim PomocnaTocka1(0 To 2) As Double
  30. Dim PomocnaTocka2(0 To 2) As Double
  31. Dim BrTocakaPlinea, Kocnica, LostatakPrKr As Integer
  32. Dim Lpomocni As Double
  33. Dim KoorNaopakePrKr() As Double
  34.       
  35. UserForm1.hide
  36. pi = 3.14159265358979
  37. RazProf = txtRazProf.Value
  38. SirCest = txtSirCest.Value
  39. Rpoplin = SirCest * 2
  40. PocToc = ThisDrawing.Utility.GetPoint(, "Odaberite pocetnu tocku trase")
  41. ZadToc = ThisDrawing.Utility.GetPoint(, "Odaberite zadnju tocku trase")  
  42.    For Each SOS In ThisDrawing.SelectionSets
  43.        If SOS.Name = "MySS" Then
  44.        ThisDrawing.SelectionSets("MySS").Delete
  45.        Exit For
  46.        End If
  47.    Next
  48.    
  49.    ThisDrawing.SelectionSets.Add ("MySS")
  50.    Set objSS = ThisDrawing.SelectionSets("MySS")
  51.    objSS.SelectOnScreen
  52.    
  53.    If objSS.Count < 1 Then Exit Sub
  54.    
  55.    i = 0
  56.    L = 0
  57.    Lostatak = 0
  58.    PlusMinus = False
  59.    
  60.    
  61. '********GLAVNI DIO PROGRAMA********
  62.    For Each objent In objSS
  63.        Select Case objent.ObjectName
  64.       
  65. '<<<<<PRAVAC>>>>>
  66.        Case "AcDbLine"
  67.            Set Pravac = objent
  68.            PlusMinus = False
  69.            L = L + Pravac.Length
  70. 'Ako pravac nije prvi element trase
  71.            If Abs(DrugaTocka(0) - Pravac.StartPoint(0)) < 0.000001 And Abs(DrugaTocka(1) - Pravac.StartPoint(1)) < 0.000001 _
  72.                And PrvaTocka(0) <> Pravac.EndPoint(0) And PrvaTocka(1) <> Pravac.EndPoint(1) Then
  73.                    PrvaTocka(0) = DrugaTocka(0)
  74.                    PrvaTocka(1) = DrugaTocka(1)
  75.                    PrvaTocka(2) = DrugaTocka(2)
  76.                    DrugaTocka(0) = Pravac.EndPoint(0)
  77.                    DrugaTocka(1) = Pravac.EndPoint(1)
  78.                    DrugaTocka(2) = Pravac.EndPoint(2)
  79.                    PlusMinus = True
  80.            End If
  81.            If Abs(DrugaTocka(0) - Pravac.EndPoint(0)) < 0.000001 And Abs(DrugaTocka(1) - Pravac.EndPoint(1)) < 0.000001 _
  82.                And PrvaTocka(0) <> Pravac.StartPoint(0) And PrvaTocka(1) <> Pravac.StartPoint(1) Then
  83.                    PrvaTocka(0) = DrugaTocka(0)
  84.                    PrvaTocka(1) = DrugaTocka(1)
  85.                    PrvaTocka(2) = DrugaTocka(2)
  86.                    DrugaTocka(0) = Pravac.StartPoint(0)
  87.                    DrugaTocka(1) = Pravac.StartPoint(1)
  88.                    DrugaTocka(2) = Pravac.StartPoint(2)
  89.                    PlusMinus = True
  90.            End If
  91.            If PlusMinus = True Then
  92.                If Pravac.Length > Lostatak Then
  93.                        BrProfila = (Pravac.Length - Lostatak) \ RazProf
  94.                        kolicnik = (Pravac.Length - Lostatak) / RazProf
  95.                        If BrProfila > kolicnik Then
  96.                            BrProfila = BrProfila - 1
  97.                        End If
  98.                        For i = 1 To BrProfila
  99.                            'Za sve ostale profile
  100.                            Set Krug = ThisDrawing.ModelSpace.AddCircle _
  101.                            (PrvaTocka, (RazProf * (i - 1) + Lostatak))
  102.                            sjeciste = Pravac.IntersectWith(Krug, acExtendNone)
  103.                            Set Kruzic = ThisDrawing.ModelSpace.AddCircle(sjeciste, SirCest / 3.5)
  104.                            Krug.Delete
  105.                            Set Krug = ThisDrawing.ModelSpace.AddCircle _
  106.                            (PrvaTocka, (RazProf * (i - 1) + Lostatak + Rpoplin))
  107.                            sjeciste = Pravac.IntersectWith(Krug, acExtendNone)
  108.                            Set linija = ThisDrawing.ModelSpace.AddLine(Kruzic.Center, sjeciste)
  109.                            linija.Rotate Kruzic.Center, pi / 2
  110.                            Set PopLin = ThisDrawing.ModelSpace.AddLine(linija.EndPoint, Kruzic.Center)
  111.                            linija.Delete
  112.                            PopLin.Mirror DrugaTocka, PrvaTocka
  113.                            Krug.Delete
  114.                        Next
  115.                        'Za predzadnji profil na pravcu
  116.                        Set Krug = ThisDrawing.ModelSpace.AddCircle _
  117.                        (DrugaTocka, (Pravac.Length - RazProf * BrProfila - Lostatak))
  118.                        sjeciste = Pravac.IntersectWith(Krug, acExtendNone)
  119.                        Set Kruzic = ThisDrawing.ModelSpace.AddCircle(sjeciste, SirCest / 3.5)
  120.                        Krug.Delete
  121.                        Set linija = ThisDrawing.ModelSpace.AddLine(DrugaTocka, sjeciste)
  122.                        If Pravac.Length > (linija.Length + Rpoplin) Then
  123.                            Set Krug = ThisDrawing.ModelSpace.AddCircle(DrugaTocka, (linija.Length + Rpoplin))
  124.                            linija.Delete
  125.                            sjeciste2 = Pravac.IntersectWith(Krug, acExtendNone)
  126.                            Krug.Delete
  127.                            Set PopLin = ThisDrawing.ModelSpace.AddLine(sjeciste2, sjeciste)
  128.                            PopLin.Rotate sjeciste, pi / 2
  129.                            PopLin.Mirror PrvaTocka, DrugaTocka
  130.                        Else
  131.                            linija.Delete
  132.                            Set linija = ThisDrawing.ModelSpace.AddLine(PrvaTocka, DrugaTocka)
  133.                            linija.Rotate sjeciste, pi / 2
  134.                            linija.Move linija.StartPoint, sjeciste
  135.                            BrPomaka = (Rpoplin) \ Pravac.Length
  136.                            kolicnik = (Rpoplin) / Pravac.Length
  137.                            If BrPomaka < kolicnik Then
  138.                                For i = 1 To BrPomaka
  139.                                    linija.Move linija.StartPoint, linija.EndPoint
  140.                                Next
  141.                            Else
  142.                                For i = 1 To (BrPomaka - 1)
  143.                                    linija.Move linija.StartPoint, linija.EndPoint
  144.                                Next
  145.                            End If
  146.                        Set Krug = ThisDrawing.ModelSpace.AddCircle(sjeciste, Rpoplin)
  147.                        sjeciste2 = linija.IntersectWith(Krug, acExtendNone)
  148.                        Krug.Delete
  149.                        linija.Delete
  150.                        Set PopLin = ThisDrawing.ModelSpace.AddLine(sjeciste2, sjeciste)
  151.                        PopLin.Mirror PrvaTocka, DrugaTocka
  152.                        End If
  153.                        Lostatak = RazProf - (Pravac.Length - (BrProfila * RazProf) - Lostatak)
  154.            'Ako je pravac zadnji element trase
  155.                    If DrugaTocka(0) = ZadToc(0) And DrugaTocka(1) = ZadToc(1) Then
  156.                        Set Krug = ThisDrawing.ModelSpace.AddCircle(DrugaTocka, Rpoplin)
  157.                        sjeciste = Pravac.IntersectWith(Krug, acExtendNone)
  158.                        Set Kruzic = ThisDrawing.ModelSpace.AddCircle(DrugaTocka, SirCest / 3.5)
  159.                        Krug.Delete
  160.                        Set linija = ThisDrawing.ModelSpace.AddLine(sjeciste, DrugaTocka)
  161.                        linija.Rotate DrugaTocka, pi / 2
  162.                        Set PopLin = ThisDrawing.ModelSpace.AddLine(linija.StartPoint, DrugaTocka)
  163.                        linija.Delete
  164.                        PopLin.Mirror DrugaTocka, PrvaTocka
  165.                    End If
  166.                'Ako je duljina pravca manja od Lostatak
  167.                Else
  168.                Lostatak = Lostatak - Pravac.Length
  169.                    'Ako je pravac zadnji element trase
  170.                    If DrugaTocka(0) = ZadToc(0) And DrugaTocka(1) = ZadToc(1) Then
  171.                        Set Krug = ThisDrawing.ModelSpace.AddCircle(DrugaTocka, Rpoplin)
  172.                        sjeciste = Pravac.IntersectWith(Krug, acExtendNone)
  173.                        Set Kruzic = ThisDrawing.ModelSpace.AddCircle(DrugaTocka, SirCest / 3.5)
  174.                        Krug.Delete
  175.                        Set linija = ThisDrawing.ModelSpace.AddLine(sjeciste, DrugaTocka)
  176.                        linija.Rotate DrugaTocka, pi / 2
  177.                        Set PopLin = ThisDrawing.ModelSpace.AddLine(linija.StartPoint, DrugaTocka)
  178.                        linija.Delete
  179.                        PopLin.Mirror DrugaTocka, PrvaTocka
  180.                    End If
  181.                End If
  182.                PlusMinus = False
  183.            End If
  184.                  
  185. 'Ako je pravac prvi element trase
  186.                If (Pravac.StartPoint(0) = PocToc(0)) And (Pravac.StartPoint(1) = PocToc(1)) Then
  187.                PrvaTocka(0) = PocToc(0)
  188.                PrvaTocka(1) = PocToc(1)
  189.                PrvaTocka(2) = PocToc(2)
  190.                DrugaTocka(0) = Pravac.EndPoint(0)
  191.                DrugaTocka(1) = Pravac.EndPoint(1)
  192.                DrugaTocka(2) = Pravac.EndPoint(2)
  193.                PlusMinus = True
  194.                End If
  195.                If (Pravac.EndPoint(0) = PocToc(0)) And (Pravac.EndPoint(1) = PocToc(1)) Then
  196.                PrvaTocka(0) = PocToc(0)
  197.                PrvaTocka(1) = PocToc(1)
  198.                PrvaTocka(2) = PocToc(2)
  199.                DrugaTocka(0) = Pravac.StartPoint(0)
  200.                DrugaTocka(1) = Pravac.StartPoint(1)
  201.                DrugaTocka(2) = Pravac.StartPoint(2)
  202.                PlusMinus = True
  203.                End If
  204.                If PlusMinus = True Then
  205.                        'Za prvi profil na pravcu
  206.                        Set Krug = ThisDrawing.ModelSpace.AddCircle(PrvaTocka, Rpoplin)
  207.                        sjeciste = Pravac.IntersectWith(Krug, acExtendNone)
  208.                        Set Kruzic = ThisDrawing.ModelSpace.AddCircle(PrvaTocka, SirCest / 3.5)
  209.                        Krug.Delete
  210.                        Set linija = ThisDrawing.ModelSpace.AddLine(sjeciste, PrvaTocka)
  211.                        linija.Rotate PrvaTocka, pi / 2
  212.                        Set PopLin = ThisDrawing.ModelSpace.AddLine(linija.StartPoint, PrvaTocka)
  213.                        linija.Delete
  214.                        PopLin.Mirror DrugaTocka, PrvaTocka
  215.                'Provjeriti je li razmak profila manji od duljine pravca
  216.                    If Pravac.Length > RazProf Then
  217.                        Set Krug = ThisDrawing.ModelSpace.AddCircle(PrvaTocka, Rpoplin)
  218.                        sjeciste = Pravac.IntersectWith(Krug, acExtendNone)
  219.                        Set Kruzic = ThisDrawing.ModelSpace.AddCircle(PrvaTocka, SirCest / 3.5)
  220.                        Krug.Delete
  221.                        Set linija = ThisDrawing.ModelSpace.AddLine(sjeciste, PrvaTocka)
  222.                        linija.Rotate PrvaTocka, pi / 2
  223.                        Set PopLin = ThisDrawing.ModelSpace.AddLine(linija.StartPoint, PrvaTocka)
  224.                        linija.Delete
  225.                        PopLin.Mirror DrugaTocka, PrvaTocka
  226.                        BrProfila = Pravac.Length \ RazProf
  227.                        kolicnik = Pravac.Length / RazProf
  228.                        If BrProfila > kolicnik Then
  229.                            BrProfila = BrProfila - 1
  230.                        End If
  231.                        For i = 1 To BrProfila
  232.                            Set Krug = ThisDrawing.ModelSpace.AddCircle(PrvaTocka, RazProf * i)
  233.                            sjeciste = Pravac.IntersectWith(Krug, acExtendNone)
  234.                            Set Kruzic = ThisDrawing.ModelSpace.AddCircle(sjeciste, SirCest / 3.5)
  235.                            Krug.Delete
  236.                            Set Krug = ThisDrawing.ModelSpace.AddCircle(PrvaTocka, RazProf * i - Rpoplin)
  237.                            sjeciste = Pravac.IntersectWith(Krug, acExtendNone)
  238.                            Set linija = ThisDrawing.ModelSpace.AddLine(Kruzic.Center, sjeciste)
  239.                            linija.Rotate Kruzic.Center, pi / 2
  240.                            Set PopLin = ThisDrawing.ModelSpace.AddLine(linija.EndPoint, Kruzic.Center)
  241.                            linija.Delete
  242.                            PopLin.Mirror DrugaTocka, PrvaTocka
  243.                            Krug.Delete
  244.                        Next
  245.                    Lostatak = RazProf - (Pravac.Length - ((i - 1) * RazProf))
  246.                    'Ako je pravac zadnji element trase
  247.                    If DrugaTocka(0) = ZadToc(0) And DrugaTocka(1) = ZadToc(1) Then
  248.                        Set Krug = ThisDrawing.ModelSpace.AddCircle(DrugaTocka, Rpoplin)
  249.                        sjeciste = Pravac.IntersectWith(Krug, acExtendNone)
  250.                        Set Kruzic = ThisDrawing.ModelSpace.AddCircle(DrugaTocka, SirCest / 3.5)
  251.                        Krug.Delete
  252.                        Set linija = ThisDrawing.ModelSpace.AddLine(sjeciste, DrugaTocka)
  253.                        linija.Rotate DrugaTocka, pi / 2
  254.                        Set PopLin = ThisDrawing.ModelSpace.AddLine(linija.StartPoint, DrugaTocka)
  255.                        linija.Delete
  256.                        PopLin.Mirror DrugaTocka, PrvaTocka
  257.                    End If
  258.                    'Ako je duljina pravca manja od razmaka profila
  259.                    Else
  260.                    'Ako je pravac zadnji element trase
  261.                    If DrugaTocka(0) = ZadToc(0) And DrugaTocka(1) = ZadToc(1) Then
  262.                        Set Krug = ThisDrawing.ModelSpace.AddCircle(DrugaTocka, Rpoplin)
  263.                        sjeciste = Pravac.IntersectWith(Krug, acExtendNone)
  264.                        Set Kruzic = ThisDrawing.ModelSpace.AddCircle(DrugaTocka, SirCest / 3.5)
  265.                        Krug.Delete
  266.                        Set linija = ThisDrawing.ModelSpace.AddLine(sjeciste, DrugaTocka)
  267.                        linija.Rotate DrugaTocka, pi / 2
  268.                        Set PopLin = ThisDrawing.ModelSpace.AddLine(linija.StartPoint, DrugaTocka)
  269.                        linija.Delete
  270.                        PopLin.Mirror DrugaTocka, PrvaTocka
  271.                    End If
  272.                    Lostatak = RazProf - Pravac.Length
  273.                    End If
  274.                End If
回复

使用道具 举报

2

主题

16

帖子

14

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-6 22:58:41 | 显示全部楼层
  1. '<<<<<PRIJELAZNA KRIVINA>>>>>
  2.        Case "AcDbPolyline"
  3.            Set PrKrivina = objent
  4.            BrTocakaPlinea = UBound(PrKrivina.Coordinates)
  5.            ReDim KoorNaopakePrKr(BrTocakaPlinea)
  6.            L = L + PrKrivina.Length
  7.            LostatakPrKr = Lostatak
  8. 'Ako prijelazna krivina nije prvi element trase
  9.            If Abs(DrugaTocka(0) - PrKrivina.Coordinates(0)) < 0.00001 And _
  10.            Abs(DrugaTocka(1) - PrKrivina.Coordinates(1)) < 0.00001 And _
  11.            PrKrivina.Coordinates(BrTocakaPlinea - 1) <> PrvaTocka(0) And _
  12.            PrKrivina.Coordinates(BrTocakaPlinea) <> PrvaTocka(1) Then
  13.            PrvaTocka(0) = PrKrivina.Coordinates(0)
  14.            PrvaTocka(1) = PrKrivina.Coordinates(1)
  15.            PrvaTocka(2) = 0
  16.            DrugaTocka(0) = PrKrivina.Coordinates(BrTocakaPlinea - 1)
  17.            DrugaTocka(1) = PrKrivina.Coordinates(BrTocakaPlinea)
  18.            DrugaTocka(2) = 0
  19.            PlusMinus = True
  20.            End If
  21.            If Abs(DrugaTocka(0) - PrKrivina.Coordinates(BrTocakaPlinea - 1)) < 0.00001 And _
  22.            Abs(DrugaTocka(1) - PrKrivina.Coordinates(BrTocakaPlinea)) < 0.00001 And _
  23.            PrKrivina.Coordinates(0) <> PrvaTocka(0) And _
  24.            PrKrivina.Coordinates(1) <> PrvaTocka(1) Then
  25.            For i = 0 To BrTocakaPlinea Step 2
  26.                KoorNaopakePrKr(i) = PrKrivina.Coordinates(BrTocakaPlinea - i - 1)
  27.                KoorNaopakePrKr(i + 1) = PrKrivina.Coordinates(BrTocakaPlinea - i)
  28.            Next
  29.            PrKrivina.Delete
  30.            Set PrKrivina = ThisDrawing.ModelSpace.AddLightWeightPolyline(KoorNaopakePrKr)
  31.            PrvaTocka(0) = PrKrivina.Coordinates(0)
  32.            PrvaTocka(1) = PrKrivina.Coordinates(1)
  33.            PrvaTocka(2) = 0
  34.            DrugaTocka(0) = PrKrivina.Coordinates(BrTocakaPlinea - 1)
  35.            DrugaTocka(1) = PrKrivina.Coordinates(BrTocakaPlinea)
  36.            DrugaTocka(2) = 0
  37.            PlusMinus = True
  38.            End If
  39.            
  40.        If PlusMinus = True Then
  41.    'Prva tocka prijelazne krivine
  42.            PomocnaTocka1(0) = PrKrivina.Coordinates(2)
  43.            PomocnaTocka1(1) = PrKrivina.Coordinates(3)
  44.            PomocnaTocka1(2) = 0
  45.            Set linija1 = ThisDrawing.ModelSpace.AddLine(PrvaTocka, PomocnaTocka1)
  46.            Set linija2 = ThisDrawing.ModelSpace.AddLine(PrvaTocka, PomocnaTocka1)
  47.            linija1.Rotate PrvaTocka, pi / 2
  48.            linija2.Rotate PrvaTocka, 3 * pi / 2
  49.                BrPomaka = (Rpoplin) \ linija1.Length
  50.                kolicnik = (Rpoplin) / linija1.Length
  51.                If BrPomaka < kolicnik Then
  52.                    For i = 1 To BrPomaka
  53.                        linija1.Move linija1.StartPoint, linija1.EndPoint
  54.                        linija2.Move linija2.StartPoint, linija2.EndPoint
  55.                    Next
  56.                Else
  57.                    For i = 1 To (BrPomaka - 1)
  58.                        linija1.Move linija1.StartPoint, linija1.EndPoint
  59.                        linija2.Move linija2.StartPoint, linija2.EndPoint
  60.                    Next
  61.                End If
  62.            Set Krug = ThisDrawing.ModelSpace.AddCircle(PrvaTocka, Rpoplin)
  63.            sjeciste = linija1.IntersectWith(Krug, acExtendNone)
  64.            sjeciste2 = linija2.IntersectWith(Krug, acExtendNone)
  65.            Krug.Delete
  66.            linija1.Delete
  67.            linija2.Delete
  68.            Set PopLin = ThisDrawing.ModelSpace.AddLine(sjeciste, sjeciste2)
  69.            Set Kruzic = ThisDrawing.ModelSpace.AddCircle(PrvaTocka, SirCest / 3.5)
  70.    'Ostali profili na prijelaznoj krivini
  71.            brojX = 0
  72.            Lpomocni = 0
  73.            If PrKrivina.Length > LostatakPrKr Then
  74.                BrProfila = (PrKrivina.Length - LostatakPrKr) \ RazProf
  75.                kolicnik = (PrKrivina.Length - LostatakPrKr) / RazProf
  76.                If BrProfila > kolicnik Then
  77.                    BrProfila = BrProfila - 1
  78.                End If
  79.                For i = 1 To BrProfila + 1
  80.                If i < 2 Or i = 2 Then
  81.                    Kocnica = i - 1
  82.                Else
  83.                    Kocnica = Kocnica
  84.                End If
  85.                LostatakPrKr = LostatakPrKr + RazProf * Kocnica
  86.                    Do
  87.                        PomocnaTocka1(0) = PrKrivina.Coordinates(brojX)
  88.                        PomocnaTocka1(1) = PrKrivina.Coordinates(brojX + 1)
  89.                        PomocnaTocka1(2) = 0
  90.                        PomocnaTocka2(0) = PrKrivina.Coordinates(brojX + 2)
  91.                        PomocnaTocka2(1) = PrKrivina.Coordinates(brojX + 3)
  92.                        PomocnaTocka2(2) = 0
  93.                        brojX = brojX + 2
  94.                        Set linija1 = ThisDrawing.ModelSpace.AddLine(PomocnaTocka1, PomocnaTocka2)
  95.                        Lpomocni = Lpomocni + linija1.Length
  96.                        If Lpomocni < LostatakPrKr Then
  97.                            linija1.Delete
  98.                        End If
  99.                    Loop While Lpomocni < LostatakPrKr
  100.                Set Krug = ThisDrawing.ModelSpace.AddCircle(PomocnaTocka2, (Lpomocni - LostatakPrKr))
  101.                sjeciste = linija1.IntersectWith(Krug, acExtendNone)
  102.                Set Kruzic = ThisDrawing.ModelSpace.AddCircle(sjeciste, SirCest / 3.5)
  103.                linija1.Delete
  104.                Krug.Delete
  105.                Set linija1 = ThisDrawing.ModelSpace.AddLine(PomocnaTocka1, sjeciste)
  106.                Set linija2 = ThisDrawing.ModelSpace.AddLine(PomocnaTocka1, sjeciste)
  107.                linija1.Rotate sjeciste, pi / 2
  108.                linija2.Rotate sjeciste, 3 * pi / 2
  109.                BrPomaka = (Rpoplin) \ linija1.Length
  110.                kolicnik = (Rpoplin) / linija1.Length
  111.                If BrPomaka < kolicnik Then
  112.                    For n = 1 To BrPomaka
  113.                        linija1.Move linija1.EndPoint, linija1.StartPoint
  114.                        linija2.Move linija2.EndPoint, linija2.StartPoint
  115.                    Next
  116.                Else
  117.                    For n = 1 To (BrPomaka - 1)
  118.                        linija1.Move linija1.EndPoint, linija1.StartPoint
  119.                        linija2.Move linija2.EndPoint, linija2.StartPoint
  120.                    Next
  121.                End If
  122.                Set Krug = ThisDrawing.ModelSpace.AddCircle(sjeciste, Rpoplin)
  123.                sjeciste = linija1.IntersectWith(Krug, acExtendNone)
  124.                sjeciste2 = linija2.IntersectWith(Krug, acExtendNone)
  125.                Krug.Delete
  126.                linija1.Delete
  127.                linija2.Delete
  128.                Set PopLin = ThisDrawing.ModelSpace.AddLine(sjeciste, sjeciste2)
  129.                Next
  130.                Lostatak = RazProf - (PrKrivina.Length - Lostatak - BrProfila * RazProf)
  131.            Else
  132.                Lostatak = Lostatak - PrKrivina.Length
  133.            End If
  134.        'Ako je prijelazna krivina zadnji element trase
  135.            If DrugaTocka(0) = ZadToc(0) And DrugaTocka(1) = ZadToc(1) Then
  136.            PomocnaTocka1(0) = PrKrivina.Coordinates(BrTocakaPlinea - 3)
  137.            PomocnaTocka1(1) = PrKrivina.Coordinates(BrTocakaPlinea - 2)
  138.            PomocnaTocka1(2) = 0
  139.                Set linija1 = ThisDrawing.ModelSpace.AddLine(PomocnaTocka1, DrugaTocka)
  140.                Set linija2 = ThisDrawing.ModelSpace.AddLine(PomocnaTocka1, DrugaTocka)
  141.                linija1.Rotate DrugaTocka, pi / 2
  142.                linija2.Rotate DrugaTocka, 3 * pi / 2
  143.                BrPomaka = (Rpoplin) \ linija1.Length
  144.                kolicnik = (Rpoplin) / linija1.Length
  145.                If BrPomaka < kolicnik Then
  146.                    For n = 1 To BrPomaka
  147.                        linija1.Move linija1.EndPoint, linija1.StartPoint
  148.                        linija2.Move linija2.EndPoint, linija2.StartPoint
  149.                    Next
  150.                Else
  151.                    For n = 1 To (BrPomaka - 1)
  152.                        linija1.Move linija1.EndPoint, linija1.StartPoint
  153.                        linija2.Move linija2.EndPoint, linija2.StartPoint
  154.                    Next
  155.                End If
  156.                Set Krug = ThisDrawing.ModelSpace.AddCircle(DrugaTocka, Rpoplin)
  157.                sjeciste = linija1.IntersectWith(Krug, acExtendNone)
  158.                sjeciste2 = linija2.IntersectWith(Krug, acExtendNone)
  159.                Krug.Delete
  160.                linija1.Delete
  161.                linija2.Delete
  162.                Set PopLin = ThisDrawing.ModelSpace.AddLine(sjeciste, sjeciste2)
  163.                Set Kruzic = ThisDrawing.ModelSpace.AddCircle(DrugaTocka, SirCest / 3.5)
  164.            End If
  165.        End If
回复

使用道具 举报

2

主题

16

帖子

14

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-6 23:01:51 | 显示全部楼层
  1.         
  2. '<<<<<KRUZNI LUK>>>>>
  3.        Case "AcDbArc"
  4.            Set Luk = objent
  5.            L = L + Luk.ArcLength
  6.            Lluk = Luk.ArcLength
  7.            Rluk = Luk.Radius
  8.            PlusMinus = False
  9. 'Ako luk nije prvi element trase
  10.    'Ako je startpoint luka jednak drugoj tocki
  11.            If Abs(Luk.StartPoint(0) - DrugaTocka(0)) < 0.000001 And Abs(Luk.StartPoint(1) - DrugaTocka(1)) < 0.000001 _
  12.            And Luk.EndPoint(0) <> PrvaTocka(0) And Luk.EndPoint(1) <> PrvaTocka(1) Then
  13.            PrvaTocka(0) = Luk.StartPoint(0)
  14.            PrvaTocka(1) = Luk.StartPoint(1)
  15.            PrvaTocka(2) = Luk.StartPoint(2)
  16.            DrugaTocka(0) = Luk.EndPoint(0)
  17.            DrugaTocka(1) = Luk.EndPoint(1)
  18.            DrugaTocka(2) = Luk.EndPoint(2)
  19.            PlusMinus = True
  20.            End If
  21.    'Ako je endpoint luka jednak drugoj tocki
  22.            If Abs(Luk.EndPoint(0) - DrugaTocka(0)) < 0.000001 And Abs(Luk.EndPoint(1) - DrugaTocka(1)) < 0.000001 _
  23.            And Luk.StartPoint(0) <> PrvaTocka(0) And Luk.StartPoint(1) <> PrvaTocka(1) Then
  24.            PrvaTocka(0) = Luk.EndPoint(0)
  25.            PrvaTocka(1) = Luk.EndPoint(1)
  26.            PrvaTocka(2) = Luk.EndPoint(2)
  27.            DrugaTocka(0) = Luk.StartPoint(0)
  28.            DrugaTocka(1) = Luk.StartPoint(1)
  29.            DrugaTocka(2) = Luk.StartPoint(2)
  30.            PlusMinus = True
  31.            End If
  32.            
  33.            If PlusMinus = True Then
  34.        'pocetna tocka luka
  35.            Set linija1 = ThisDrawing.ModelSpace.AddLine(PrvaTocka, Luk.Center)
  36.            Set Krug = ThisDrawing.ModelSpace.AddCircle(PrvaTocka, Rpoplin)
  37.            sjeciste = linija1.IntersectWith(Krug, acExtendNone)
  38.            Krug.Delete
  39.            linija1.Delete
  40.            Set linija1 = ThisDrawing.ModelSpace.AddLine(PrvaTocka, sjeciste)
  41.            Set linija2 = ThisDrawing.ModelSpace.AddLine(linija1.EndPoint, PrvaTocka)
  42.            linija2.Move linija2.StartPoint, PrvaTocka
  43.            Set PopLin = ThisDrawing.ModelSpace.AddLine(linija1.EndPoint, linija2.EndPoint)
  44.            Set Kruzic = ThisDrawing.ModelSpace.AddCircle(PrvaTocka, SirCest / 3.5)
  45.            linija1.Delete
  46.            linija2.Delete
  47.        'sredisnja tocka luka
  48.            Set linija1 = ThisDrawing.ModelSpace.AddLine(PrvaTocka, DrugaTocka)
  49.            Set Krug = ThisDrawing.ModelSpace.AddCircle(PrvaTocka, (linija1.Length / 2))
  50.            sjeciste = linija1.IntersectWith(Krug, acExtendNone)
  51.            Krug.Delete
  52.            linija1.Rotate sjeciste, pi / 2
  53.            SredisnjaTockaLuka = linija1.IntersectWith(Luk, acExtendNone)
  54.            linija1.Delete
  55.            Set Krug = ThisDrawing.ModelSpace.AddCircle(SredisnjaTockaLuka, Rpoplin)
  56.            Set linija1 = ThisDrawing.ModelSpace.AddLine(SredisnjaTockaLuka, Luk.Center)
  57.            sjeciste = linija1.IntersectWith(Krug, acExtendNone)
  58.            If UBound(sjeciste) = -1 Then
  59.                linija1.Move SredisnjaTockaLuka, Luk.Center
  60.                sjeciste = linija1.IntersectWith(Luk, acExtendNone)
  61.            End If
  62.            Krug.Delete
  63.            linija1.Delete
  64.            Set linija2 = ThisDrawing.ModelSpace.AddLine(SredisnjaTockaLuka, sjeciste)
  65.            linija2.Copy
  66.            linija2.Move sjeciste, SredisnjaTockaLuka
  67.            Set PopLin = ThisDrawing.ModelSpace.AddLine(linija2.StartPoint, sjeciste)
  68.            linija2.Delete
  69.            Set Kruzic = ThisDrawing.ModelSpace.AddCircle(SredisnjaTockaLuka, SirCest / 3.5)
  70. '------>Ostali profili na luku
  71.    'Ako je luk duzi od razmaka profila
  72.            n = 0
  73.            If Lluk > Lostatak Then
  74.                BrProfila = (Lluk - Lostatak) \ RazProf
  75.                kolicnik = (Lluk - Lostatak) / RazProf
  76.                If BrProfila > kolicnik Then
  77.                    BrProfila = BrProfila - 1
  78.                End If
  79.                For i = 1 To (BrProfila + 1)
  80.                Alfa = (Lostatak + n) / Rluk
  81.                Set linija1 = ThisDrawing.ModelSpace.AddLine(Luk.Center, PrvaTocka)
  82.                linija1.Rotate Luk.Center, Alfa
  83.                sjeciste2 = linija1.IntersectWith(Luk, acExtendNone)
  84.                        If UBound(sjeciste2) = -1 Then
  85.                        Alfa = -1 * Alfa
  86.                        linija1.Rotate Luk.Center, (2 * Alfa)
  87.                        sjeciste2 = linija1.IntersectWith(Luk, acExtendNone)
  88.                        End If
  89.                Set Krug = ThisDrawing.ModelSpace.AddCircle(sjeciste2, Rpoplin)
  90.                sjeciste = Krug.IntersectWith(linija1, acExtendNone)
  91.                linija1.Delete
  92.                Krug.Delete
  93.                Set linija2 = ThisDrawing.ModelSpace.AddLine(sjeciste2, sjeciste)
  94.                linija2.Copy
  95.                linija2.Move sjeciste, sjeciste2
  96.                Set linija1 = ThisDrawing.ModelSpace.AddLine(sjeciste2, sjeciste)
  97.                Set PopLin = ThisDrawing.ModelSpace.AddLine(linija2.StartPoint, linija1.EndPoint)
  98.                linija1.Delete
  99.                linija2.Delete
  100.                Set Kruzic = ThisDrawing.ModelSpace.AddCircle(sjeciste2, SirCest / 3.5)
  101.                n = n + RazProf
  102.                Next
  103.            Lostatak = RazProf - (Luk.ArcLength - Lostatak - BrProfila * RazProf)
  104.            Else
  105.            Lostatak = Lostatak - Luk.ArcLength
  106.            End If
  107.        'Provjeriti da li je luk zadnji element trase
  108.            If Abs(DrugaTocka(0) - ZadToc(0)) < 0.00001 And Abs(DrugaTocka(1) - ZadToc(1)) < 0.00001 Then
  109.                Set linija1 = ThisDrawing.ModelSpace.AddLine(DrugaTocka, Luk.Center)
  110.                Set Krug = ThisDrawing.ModelSpace.AddCircle(DrugaTocka, Rpoplin)
  111.                sjeciste = linija1.IntersectWith(Krug, acExtendNone)
  112.                Krug.Delete
  113.                linija1.Delete
  114.                Set PopLin = ThisDrawing.ModelSpace.AddLine(DrugaTocka, sjeciste)
  115.                PopLin.Copy
  116.                PopLin.Move sjeciste, DrugaTocka
  117.                Set Kruzic = ThisDrawing.ModelSpace.AddCircle(DrugaTocka, SirCest / 3.5)
  118.            End If
  119.            PlusMinus = False
  120.            End If
  121.            
  122. 'Provjeriti da li je luk prvi element trase
  123.        'Ako je prva tocka trase jednaka startpointu luka
  124.            If Luk.StartPoint(0) = PocToc(0) And Luk.StartPoint(1) = PocToc(1) Then
  125.            PrvaTocka(0) = Luk.StartPoint(0)
  126.            PrvaTocka(1) = Luk.StartPoint(1)
  127.            PrvaTocka(2) = Luk.StartPoint(2)
  128.            DrugaTocka(0) = Luk.EndPoint(0)
  129.            DrugaTocka(1) = Luk.EndPoint(1)
  130.            DrugaTocka(2) = Luk.EndPoint(2)
  131.            PlusMinus = True
  132.            End If
  133.        'Ako je prva tocka trase jednaka endpointu luka
  134.            If Luk.EndPoint(0) = PocToc(0) And Luk.EndPoint(1) = PocToc(1) Then
  135.            PrvaTocka(0) = Luk.EndPoint(0)
  136.            PrvaTocka(1) = Luk.EndPoint(1)
  137.            PrvaTocka(2) = Luk.EndPoint(2)
  138.            DrugaTocka(0) = Luk.StartPoint(0)
  139.            DrugaTocka(1) = Luk.StartPoint(1)
  140.            DrugaTocka(2) = Luk.StartPoint(2)
  141.            PlusMinus = True
  142.            End If
  143.       
  144.        If PlusMinus = True Then
  145.        'pocetna tocka luka
  146.            Set linija1 = ThisDrawing.ModelSpace.AddLine(PrvaTocka, Luk.Center)
  147.            Set Krug = ThisDrawing.ModelSpace.AddCircle(PrvaTocka, Rpoplin)
  148.            sjeciste = linija1.IntersectWith(Krug, acExtendNone)
  149.            Krug.Delete
  150.            linija1.Delete
  151.            Set linija1 = ThisDrawing.ModelSpace.AddLine(PrvaTocka, sjeciste)
  152.            Set linija2 = ThisDrawing.ModelSpace.AddLine(linija1.EndPoint, PrvaTocka)
  153.            linija2.Move linija2.StartPoint, PrvaTocka
  154.            Set PopLin = ThisDrawing.ModelSpace.AddLine(linija1.EndPoint, linija2.EndPoint)
  155.            Set Kruzic = ThisDrawing.ModelSpace.AddCircle(PrvaTocka, SirCest / 3.5)
  156.            linija1.Delete
  157.            linija2.Delete
  158.        'sredisnja tocka luka
  159.            Set linija1 = ThisDrawing.ModelSpace.AddLine(PrvaTocka, DrugaTocka)
  160.            Set Krug = ThisDrawing.ModelSpace.AddCircle(PrvaTocka, (linija1.Length / 2))
  161.            sjeciste = linija1.IntersectWith(Krug, acExtendNone)
  162.            Krug.Delete
  163.            linija1.Rotate sjeciste, pi / 2
  164.            SredisnjaTockaLuka = linija1.IntersectWith(Luk, acExtendNone)
  165.            linija1.Delete
  166.            Set Krug = ThisDrawing.ModelSpace.AddCircle(SredisnjaTockaLuka, Rpoplin)
  167.            Set linija1 = ThisDrawing.ModelSpace.AddLine(SredisnjaTockaLuka, Luk.Center)
  168.            sjeciste = linija1.IntersectWith(Krug, acExtendNone)
  169.            If UBound(sjeciste) = -1 Then
  170.                linija1.Move SredisnjaTockaLuka, Luk.Center
  171.                sjeciste = linija1.IntersectWith(Luk, acExtendNone)
  172.            End If
  173.            Krug.Delete
  174.            linija1.Delete
  175.            Set linija2 = ThisDrawing.ModelSpace.AddLine(SredisnjaTockaLuka, sjeciste)
  176.            linija2.Copy
  177.            linija2.Move sjeciste, SredisnjaTockaLuka
  178.            Set PopLin = ThisDrawing.ModelSpace.AddLine(linija2.StartPoint, sjeciste)
  179.            linija2.Delete
  180.            Set Kruzic = ThisDrawing.ModelSpace.AddCircle(SredisnjaTockaLuka, SirCest / 3.5)
  181. '------>Ostali profili na luku
  182.    'Ako je luk duzi od razmaka profila
  183.            n = 0
  184.            If Lluk > Lostatak Then
  185.                BrProfila = (Lluk - Lostatak) \ RazProf
  186.                kolicnik = (Lluk - Lostatak) / RazProf
  187.                If BrProfila > kolicnik Then
  188.                    BrProfila = BrProfila - 1
  189.                End If
  190.                For i = 1 To (BrProfila + 1)
  191.                Alfa = (Lostatak + n) / Rluk
  192.                Set linija1 = ThisDrawing.ModelSpace.AddLine(Luk.Center, PrvaTocka)
  193.                linija1.Rotate Luk.Center, Alfa
  194.                sjeciste2 = linija1.IntersectWith(Luk, acExtendNone)
  195.                        If UBound(sjeciste2) = -1 Then
  196.                        Alfa = -1 * Alfa
  197.                        linija1.Rotate Luk.Center, (2 * Alfa)
  198.                        sjeciste2 = linija1.IntersectWith(Luk, acExtendNone)
  199.                        End If
  200.                Set Krug = ThisDrawing.ModelSpace.AddCircle(sjeciste2, Rpoplin)
  201.                sjeciste = Krug.IntersectWith(linija1, acExtendNone)
  202.                linija1.Delete
  203.                Krug.Delete
  204.                Set linija2 = ThisDrawing.ModelSpace.AddLine(sjeciste2, sjeciste)
  205.                linija2.Copy
  206.                linija2.Move sjeciste, sjeciste2
  207.                Set linija1 = ThisDrawing.ModelSpace.AddLine(sjeciste2, sjeciste)
  208.                Set PopLin = ThisDrawing.ModelSpace.AddLine(linija2.StartPoint, linija1.EndPoint)
  209.                linija1.Delete
  210.                linija2.Delete
  211.                Set Kruzic = ThisDrawing.ModelSpace.AddCircle(sjeciste2, SirCest / 3.5)
  212.                n = n + RazProf
  213.                Next
  214.            Lostatak = RazProf - (Luk.ArcLength - Lostatak - BrProfila * RazProf)
  215.            Else
  216.            Lostatak = Lostatak - Luk.ArcLength
  217.            End If
  218. 'Provjeriti da li je luk zadnji element trase
  219.            If Abs(DrugaTocka(0) - ZadToc(0)) < 0.00001 And Abs(DrugaTocka(1) - ZadToc(1)) < 0.00001 Then
  220.                Set linija1 = ThisDrawing.ModelSpace.AddLine(DrugaTocka, Luk.Center)
  221.                Set Krug = ThisDrawing.ModelSpace.AddCircle(DrugaTocka, Rpoplin)
  222.                sjeciste = linija1.IntersectWith(Krug, acExtendNone)
  223.                Krug.Delete
  224.                linija1.Delete
  225.                Set PopLin = ThisDrawing.ModelSpace.AddLine(DrugaTocka, sjeciste)
  226.                PopLin.Copy
  227.                PopLin.Move sjeciste, DrugaTocka
  228.                Set Kruzic = ThisDrawing.ModelSpace.AddCircle(DrugaTocka, SirCest / 3.5)
  229.            End If
  230.        End If
  231.        End Select
  232.    Next
  233.    
  234. End Sub
回复

使用道具 举报

2

主题

16

帖子

14

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-6 23:02:09 | 显示全部楼层
我知道它又长又乱,所以如果你们没有时间玩的话,我会理解的。
 
再见
回复

使用道具 举报

12

主题

175

帖子

77

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
149
发表于 2022-7-6 23:05:34 | 显示全部楼层
我自找的!这段代码非常简洁,因为它是用您的母语术语编写的,但如果您附加一个示例dwg(可能是您遇到问题的dwg),我会尝试一下。
再见
回复

使用道具 举报

2

主题

16

帖子

14

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-6 23:09:03 | 显示全部楼层
我完全理解。这需要付出很大的努力才能让它变得有意义,我真的非常感谢你的帮助。
 
道路由直线、多段线和圆弧段组成。
 
这些评论是用克罗地亚语写的,如果你想翻译其中一些术语的话,这会有所帮助。然而,变量名没有多大意义,因为它们大多数是缩写。
 
再次感谢。
路图纸
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-6 23:12:53 | 显示全部楼层
大声思考。。。VBA是否具有Visual LISP的vlax曲线*函数的等效项?
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-4 09:02 , Processed in 0.591588 second(s), 70 queries .

© 2020-2025 乐筑天下

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