Штриховка ?

Автор Тема: Штриховка ?  (Прочитано 5349 раз)

0 Пользователей и 2 Гостей просматривают эту тему.

Тема содержит сообщение с Решением. Нажмите здесь чтобы посмотреть его.

Оффлайн izhgtumekhanikАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 54
  • Карма: 0
  • Skype: izhgtumekhanik@gmail.com
Штриховка ?
« : 24-08-2023, 13:03:52 »
Добрый день.
Обнаружил что нельзя создать штриховку на пересечениях линий..



 >:( :( :o ??? :-[ :-\ :'(

Оффлайн mikazakov

  • ADN
  • *
  • Сообщений: 751
  • Карма: 195
  • Skype: mikazakov@mail.ru
Re: Штриховка ?
« Ответ #1 : 24-08-2023, 14:10:52 »
поставте точки на пересечениях линий тогда инвентор увидит замкнутый контур

Оффлайн izhgtumekhanikАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 54
  • Карма: 0
  • Skype: izhgtumekhanik@gmail.com
Re: Штриховка ?
« Ответ #2 : 24-08-2023, 17:46:41 »
Как указать эти линии с точками ? Я могу в рамках эскиза:

Код - Visual Basic [Выбрать]
  1. Sub DrawingSketchHatchRegionSample()
  2.  
  3.     Dim oDrawDoc As DrawingDocument
  4.     Set oDrawDoc = ThisApplication.ActiveDocument
  5.    
  6.     Dim oActiveSheet As Sheet
  7.     Set oActiveSheet = oDrawDoc.ActiveSheet
  8.    
  9.     Dim oSketch As Sketch
  10.     Set oSketch = ThisApplication.ActiveEditObject
  11.    
  12.     Dim oProfile As Profile
  13.     Set oProfile = oSketch.Profiles.AddForSolid
  14.    
  15.     Dim oHatchPattern As DrawingHatchPattern
  16.     Set oHatchPattern = oDrawDoc.DrawingHatchPatternsManager.Item("ANSI 31")
  17.    
  18.     Dim oHatchRegion As SketchHatchRegion
  19.     Set oHatchRegion = oSketch.SketchHatchRegions.Add(oProfile, oHatchPattern)
  20.  
  21.     Debug.Print "end"
  22.  
  23. End Sub

Но не в рамках объекта..
« Последнее редактирование: 25-08-2023, 16:57:00 от izhgtumekhanik »

Оффлайн izhgtumekhanikАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 54
  • Карма: 0
  • Skype: izhgtumekhanik@gmail.com
Re: Штриховка ?
« Ответ #3 : 24-08-2023, 22:35:31 »
mikazakov, что я не так делаю??

Код - Visual Basic [Выбрать]
  1. Sub DrawingSketchHatchRegionSample()
  2.  
  3.     Dim oDrawDoc As DrawingDocument
  4.     Set oDrawDoc = ThisApplication.ActiveDocument
  5.    
  6.     Dim oActiveSheet As Sheet
  7.     Set oActiveSheet = oDrawDoc.ActiveSheet
  8.    
  9.     'подключаемся к активному эскизу
  10.    Dim oSketch As Sketch
  11.     Set oSketch = ThisApplication.ActiveEditObject
  12.    
  13.     Dim oCheckSet As ObjectCollection
  14.     Set oCheckSet = ThisApplication.TransientObjects.CreateObjectCollection
  15.        
  16.     Dim oTG As TransientGeometry
  17.     Set oTG = ThisApplication.TransientGeometry
  18.    
  19.     'создаем линии -------------------------------------------------------------------------
  20.    Dim start_point As Point2d
  21.     Set start_point = oTG.CreatePoint2d(4.105572809, 8.211145618)
  22.    
  23.     Dim end_point As Point2d
  24.     Set end_point = oTG.CreatePoint2d(10.894427190999, 21.788854381999)
  25.    
  26.     Dim obj1 As SketchLine
  27.     Set obj1 = oSketch.SketchLines.AddByTwoPoints(start_point, end_point)
  28.     oCheckSet.Add obj1
  29.    
  30.     Dim obj2 As SketchLine
  31.     Set obj2 = oSketch.SketchLines.AddByTwoPoints(oTG.CreatePoint2d(9.105572809, 21.788854381999), oTG.CreatePoint2d(15.894427190999, 8.211145618))
  32.     oCheckSet.Add obj2
  33.    
  34.     Dim obj3 As SketchLine
  35.     Set obj3 = oSketch.SketchLines.AddByTwoPoints(oTG.CreatePoint2d(17, 10), oTG.CreatePoint2d(3, 10))
  36.     oCheckSet.Add obj3
  37.     'создаем точки но тут могут и не попасть на пересечении -------------------------------------------------------------------------
  38.    Dim oPoint1 As SketchPoint
  39.     Set oPoint1 = oSketch.SketchPoints.Add(oTG.CreatePoint2d(5, 10), True)
  40.     oCheckSet.Add oPoint1
  41.    
  42.     Dim oPoint2 As SketchPoint
  43.     Set oPoint2 = oSketch.SketchPoints.Add(oTG.CreatePoint2d(10, 20), True)
  44.     oCheckSet.Add oPoint2
  45.    
  46.     Dim oPoint3 As SketchPoint
  47.     Set oPoint3 = oSketch.SketchPoints.Add(oTG.CreatePoint2d(15, 10), True)
  48.     oCheckSet.Add oPoint3
  49.    
  50.     ' вот тут ошибка Run-time error '-2147467259 (80004005)': Method 'AddForSolid' of object 'Profiles' failed
  51.    Dim oProfile As Profile
  52.     Set oProfile = oSketch.Profiles.AddForSolid(False, oCheckSet, Null)
  53.    
  54.     Dim oHatchPattern As DrawingHatchPattern
  55.     Set oHatchPattern = oDrawDoc.DrawingHatchPatternsManager.Item("ANSI 31")
  56.    
  57.     Dim oHatchRegion As SketchHatchRegion
  58.     Set oHatchRegion = oSketch.SketchHatchRegions.Add(oProfile, oHatchPattern)
  59.  
  60.     Debug.Print "done"
  61.  
  62. End Sub
« Последнее редактирование: 25-08-2023, 16:57:35 от izhgtumekhanik »

Оффлайн izhgtumekhanikАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 54
  • Карма: 0
  • Skype: izhgtumekhanik@gmail.com
Re: Штриховка ?
« Ответ #4 : 24-08-2023, 23:42:37 »
вот пример из хелпа: Run-time error '5': Invalid procedure call or argument

Код - Visual Basic [Выбрать]
  1. Sub DrawingSketchHatchRegionSample()
  2.  
  3.     Dim oDrawDoc As DrawingDocument
  4.     Set oDrawDoc = ThisApplication.ActiveDocument
  5.    
  6.     Dim oActiveSheet As Sheet
  7.     Set oActiveSheet = oDrawDoc.ActiveSheet
  8.    
  9.     Dim oSketch As Sketch
  10.     Set oSketch = ThisApplication.ActiveEditObject
  11.    
  12.     Dim oCheckSet As ObjectCollection
  13.     Set oCheckSet = ThisApplication.TransientObjects.CreateObjectCollection
  14.        
  15.     Dim oTG As TransientGeometry
  16.     Set oTG = ThisApplication.TransientGeometry
  17.    
  18.     Dim results As SketchEntitiesEnumerator
  19.     Set results = oSketch.SketchLines.AddAsTwoPointRectangle(oTG.CreatePoint2d(10, 10), oTG.CreatePoint2d(15, 12))
  20.    
  21.     Call oCheckSet.Add(results)
  22.  
  23.     Dim oProfile As Profile
  24.     Set oProfile = oSketch.Profiles.AddForSolid(Fale, oCheckSet, Null)
  25.    
  26.     Dim oHatchPattern As DrawingHatchPattern
  27.     Set oHatchPattern = oDrawDoc.DrawingHatchPatternsManager.Item("ANSI 31")
  28.    
  29.     Dim oHatchRegion As SketchHatchRegion
  30.     Set oHatchRegion = oSketch.SketchHatchRegions.Add(oProfile, oHatchPattern)
  31.  
  32.     Debug.Print "done"
  33.  
  34. End Sub

уже все перебрал...

 :o :P :-[ :-\ :-* :'( :(  >:( :'( :P :-[ :-[ :-[ :-[ :-X :-X :o :( :o :o :o :o
« Последнее редактирование: 25-08-2023, 16:58:00 от izhgtumekhanik »

Оффлайн mikazakov

  • ADN
  • *
  • Сообщений: 751
  • Карма: 195
  • Skype: mikazakov@mail.ru
Re: Штриховка ?
« Ответ #5 : 25-08-2023, 06:09:35 »
Ну потому что точки мало создать в определенных координатах, их надо еще привязать к линиям
вот пример для одной точки:
Код - Visual Basic [Выбрать]
  1.  Call oSketch.GeometricConstraints.AddCoincident(obj1, oPoint1)
  2.  Call oSketch.GeometricConstraints.AddCoincident(obj2, oPoint1)
  3.  
Есть такая пользовательская команда как на картинке:

Вот когда линии будут соединены через точки тогда они образуют замкнутый контур, а без этого это просто набор примитивов в эскизе

Оффлайн izhgtumekhanikАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 54
  • Карма: 0
  • Skype: izhgtumekhanik@gmail.com
Re: Штриховка ?
« Ответ #6 : 25-08-2023, 09:30:47 »
mikazakov так конечный пример он создает прямоугольник со связями.. и все равно ошибка.

ошибка в строке
Set oProfile = oSketch.Profiles.AddForSolid(Fale, oCheckSet, Null)

AddForSolid будто не принимает коллекцию объектов.

Оффлайн mikazakov

  • ADN
  • *
  • Сообщений: 751
  • Карма: 195
  • Skype: mikazakov@mail.ru
Re: Штриховка ?
« Ответ #7 : 25-08-2023, 09:55:27 »
Хэлповский пример работает прекрасно, у меня стоит Инвентор 2024.1
Код - Visual Basic [Выбрать]
  1. Sub DrawingSketchHatchRegionSample()
  2.     Dim oDoc As DrawingDocument
  3.     Set oDoc = ThisApplication.ActiveDocument
  4.    
  5.     Dim oSketch As DrawingSketch
  6.     Set oSketch = ThisApplication.ActiveEditObject
  7.    
  8.     Dim oTG As TransientGeometry
  9.     Set oTG = ThisApplication.TransientGeometry
  10.    
  11.     Dim results As SketchEntitiesEnumerator
  12.     Set results = oSketch.SketchLines.AddAsTwoPointRectangle(oTG.CreatePoint2d(10, 10), oTG.CreatePoint2d(15, 12))
  13.                                                
  14.                  
  15.     Dim oProfile As Profile
  16.     Set oProfile = oSketch.Profiles.AddForSolid
  17.    
  18.     Dim oHatchPattern As DrawingHatchPattern
  19.     Set oHatchPattern = oDoc.DrawingHatchPatternsManager.Item("ANSI 31")
  20.    
  21.     Dim oHatchRegion As SketchHatchRegion
  22.     Set oHatchRegion = oSketch.SketchHatchRegions.Add(oProfile, oHatchPattern)
  23.    
  24.  
  25. End Sub
  26.  



Оффлайн izhgtumekhanikАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 54
  • Карма: 0
  • Skype: izhgtumekhanik@gmail.com
Re: Штриховка ?
« Ответ #8 : 25-08-2023, 09:57:40 »
mikazakov, мне нужно именно через ObjectCollection сделать, а так да работает пример без ObjectCollection.

Мне нужно заштриховать определенную область из общего эскиза. Например прямоугольников больше одного в эскизе и заштриховать нужно только один.

Оффлайн izhgtumekhanikАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 54
  • Карма: 0
  • Skype: izhgtumekhanik@gmail.com
Re: Штриховка ?
« Ответ #9 : 25-08-2023, 10:38:49 »
Самое странное что примеров на форумах много и они помеченные как решенные а у меня они ошибку выбивают..

Оффлайн izhgtumekhanikАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 54
  • Карма: 0
  • Skype: izhgtumekhanik@gmail.com
Re: Штриховка ?
« Ответ #10 : 25-08-2023, 10:56:32 »
С окружностью заработало  8)  :)

А с прямоугольником нет - видимо AddForSolid не работает с прямоугольниками(SketchEntitiesEnumerator)..

Если прямоугольник собирать то заработало:

Код - Visual Basic [Выбрать]
  1. Sub DrawingSketchHatchRegionSample()
  2.    
  3.     Dim objCollect As ObjectCollection
  4.     Set objCollect = ThisApplication.TransientObjects.CreateObjectCollection
  5.  
  6.     Dim oDrawDoc As DrawingDocument
  7.     Set oDrawDoc = ThisApplication.ActiveDocument
  8.    
  9.     Dim oActiveSheet As Sheet
  10.     Set oActiveSheet = oDrawDoc.ActiveSheet
  11.    
  12.     Dim oSketch As Sketch
  13.     Set oSketch = ThisApplication.ActiveEditObject
  14.  
  15.     Dim oTG As TransientGeometry
  16.     Set oTG = ThisApplication.TransientGeometry
  17.    
  18.     '-------------------------------------------------------------------------
  19.    Dim StartLine As SketchLine
  20.     Dim nextLine As SketchLine
  21.    
  22.     Set StartLine = oSketch.SketchLines.AddByTwoPoints(oTG.CreatePoint2d(0, 0), oTG.CreatePoint2d(0, 10))
  23.     Call objCollect.Add(StartLine)
  24.    
  25.     Set nextLine = oSketch.SketchLines.AddByTwoPoints(StartLine.EndSketchPoint, oTG.CreatePoint2d(10, 10))
  26.     Call objCollect.Add(nextLine)
  27.    
  28.     Set nextLine = oSketch.SketchLines.AddByTwoPoints(nextLine.EndSketchPoint, oTG.CreatePoint2d(10, 0))
  29.     Call objCollect.Add(nextLine)
  30.    
  31.     Set nextLine = oSketch.SketchLines.AddByTwoPoints(nextLine.EndSketchPoint, StartLine.StartSketchPoint)
  32.     Call objCollect.Add(nextLine)
  33.    
  34.     '-------------------------------------------------------------------------
  35.    Dim oProfile As Profile
  36.     Set oProfile = oSketch.Profiles.AddForSolid(Fale, objCollect)
  37.    
  38.     Dim oHatchPattern As DrawingHatchPattern
  39.     Set oHatchPattern = oDrawDoc.DrawingHatchPatternsManager.Item("ANSI 31")
  40.    
  41.     Dim oHatchRegion As SketchHatchRegion
  42.     Set oHatchRegion = oSketch.SketchHatchRegions.Add(oProfile, oHatchPattern)
  43.  
  44.     Debug.Print "end"
  45.  
  46. End Sub
  47.  
« Последнее редактирование: 25-08-2023, 16:49:48 от izhgtumekhanik »

Оффлайн izhgtumekhanikАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 54
  • Карма: 0
  • Skype: izhgtumekhanik@gmail.com
Re: Штриховка ?
« Ответ #11 : 25-08-2023, 15:32:01 »
вот пример для одной точки:
Код - Visual Basic [Выбрать]
 Call oSketch.GeometricConstraints.AddCoincident(obj1, oPoint1)
 Call oSketch.GeometricConstraints.AddCoincident(obj2, oPoint1)
 

Тут при наложении связей точки с линиями - линии начинают смещаться - получается их нужно фиксировать.

А я хотел найти координаты пересечения линий и поставить на них точку и затем только наложить связь. Но не могу найти имя метода или функции для подобных операций.

Оффлайн mikazakov

  • ADN
  • *
  • Сообщений: 751
  • Карма: 195
  • Skype: mikazakov@mail.ru
Re: Штриховка ?
« Ответ #12 : 25-08-2023, 15:50:17 »

Там у объектов из TransientGeometry есть метод:

Line2d.IntersectWithCurve

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13868
  • Карма: 1785
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Штриховка ?
« Ответ #13 : 25-08-2023, 15:56:53 »
izhgtumekhanik,
Прочитай у меня в подписи как форматировать код у нас на форуме и исправь свои сообщения!
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Отмечено как Решение izhgtumekhanik 25-08-2023, 18:24:47

Оффлайн izhgtumekhanikАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 54
  • Карма: 0
  • Skype: izhgtumekhanik@gmail.com
Re: Штриховка ?
« Ответ #14 : 25-08-2023, 18:24:33 »
Финал:

Код - Python [Выбрать]
  1. from win32com.client import Dispatch, gencache
  2. # -----------------------------------------------------------------------------
  3. # inventor v2021
  4. # -----------------------------------------------------------------------------
  5.  
  6. import inventorApiV21
  7. from inventorApiV21 import constants as in_const_
  8.  
  9. ThisApplication = Dispatch('Inventor.Application')
  10. AppInvType = inventorApiV21.Application(ThisApplication)
  11.  
  12.  
  13. objCollect = ThisApplication.TransientObjects.CreateObjectCollection()
  14. # objCollect = inventorApiV21.ObjectCollection(objCollect)
  15.  
  16.  
  17. oDrawDoc = ThisApplication.ActiveDocument
  18. oDrawDoc = inventorApiV21.DrawingDocument(oDrawDoc)
  19. oActiveSheet = oDrawDoc.ActiveSheet
  20. oSketch = ThisApplication.ActiveEditObject
  21. oTG = ThisApplication.TransientGeometry
  22.  
  23. # геометрия -----------------------------------------------------------------------------
  24.  
  25.  
  26. line1 = oSketch.SketchLines.AddByTwoPoints(oTG.CreatePoint2d(4.1, 8.2), oTG.CreatePoint2d(10.9, 21.8))
  27. objCollect.Add(line1)
  28.  
  29.  
  30. line2 = oSketch.SketchLines.AddByTwoPoints(oTG.CreatePoint2d(9.1, 21.8), oTG.CreatePoint2d(15.9, 8.2))
  31. objCollect.Add(line2)
  32.  
  33.  
  34. line3 = oSketch.SketchLines.AddByTwoPoints(oTG.CreatePoint2d(17, 10), oTG.CreatePoint2d(3, 10))
  35. objCollect.Add(line3)
  36.  
  37.  
  38. addcg1 = oSketch.GeometricConstraints.AddGround(line1)
  39. addcg2 = oSketch.GeometricConstraints.AddGround(line2)
  40. addcg3 = oSketch.GeometricConstraints.AddGround(line3)
  41.  
  42.  
  43. oPoint1 = oSketch.SketchPoints.Add(oTG.CreatePoint2d(0, 10), True)
  44. oSketch.GeometricConstraints.AddCoincident(line1, oPoint1)
  45. oSketch.GeometricConstraints.AddCoincident(line2, oPoint1)
  46. objCollect.Add(oPoint1)
  47.  
  48.  
  49. oPoint2 = oSketch.SketchPoints.Add(oTG.CreatePoint2d(0, 10), True)
  50. oSketch.GeometricConstraints.AddCoincident(line2, oPoint2)
  51. oSketch.GeometricConstraints.AddCoincident(line3, oPoint2)
  52. objCollect.Add(oPoint2)
  53.  
  54.  
  55. oPoint3 = oSketch.SketchPoints.Add(oTG.CreatePoint2d(0, 10), True)
  56. oSketch.GeometricConstraints.AddCoincident(line1, oPoint3)
  57. oSketch.GeometricConstraints.AddCoincident(line3, oPoint3)
  58. objCollect.Add(oPoint3)
  59.  
  60.  
  61. addcg1.Delete()
  62. addcg2.Delete()
  63. addcg3.Delete()
  64. # -----------------------------------------------------------------------------
  65.  
  66. oProfile = oSketch.Profiles.AddForSolid(False, objCollect)
  67.  
  68. oHatchPattern = oDrawDoc.DrawingHatchPatternsManager.Item("ANSI 31")
  69.  
  70. oHatchRegion = oSketch.SketchHatchRegions.Add(oProfile, oHatchPattern)
  71.  
  72. print("done")