Civil 3D добавить точки в группу

Автор Тема: Civil 3D добавить точки в группу  (Прочитано 8625 раз)

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

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

  • ADN Club
  • ****
  • Сообщений: 270
  • Карма: 24
  • Геодезист
Как создать точку и группу нашёл\разобрался
Код - Auto/Visual Lisp [Выбрать]
  1. (if (wcmatch (vla-get-Name (vlax-get-acad-object)) "*Civil 3D*")
  2.   (progn
  3.     (setq C3D (strcat "HKEY_LOCAL_MACHINE\\"
  4.                       (if vlax-user-product-key
  5.                         (vlax-user-product-key)
  6.                         (vlax-product-key)
  7.                       )
  8.               )
  9.           C3D (vl-registry-read C3D "Release")
  10.           C3D (substr
  11.                 C3D
  12.                 1
  13.                 (vl-string-search "." C3D (+ (vl-string-search "." C3D) 1))
  14.               )
  15.           C3D (vla-getinterfaceobject
  16.                 (vlax-get-acad-object)
  17.                 (strcat "AeccXUiLand.AeccApplication." C3D)
  18.               )
  19.     )
  20.     (setq c3ddoc (vlax-get C3D 'activedocument)
  21.           points (vlax-get c3ddoc 'points)
  22.           groups (vlax-get c3ddoc 'pointGroups)
  23.     )
  24.     (vlax-for item groups
  25.       (setq groups_list (cons item groups_list))
  26.     )
  27.     (setq point
  28.            (vlax-invoke-method
  29.              points
  30.              'Add
  31.              (vlax-3D-point (getpoint))
  32.            )
  33.     )
  34.     (setq new_group
  35.            (vlax-invoke-method
  36.              groups
  37.              'Add
  38.              "My test group"
  39.            )
  40.     )
  41.   )
  42. )
Но вот как теперь эту точку добавить в группу ни как не найду  :'(
Дамп точки
Цитировать
; IAeccPoint: Интерфейс IAeccPoint
; Значения свойств:
;   Application (RO) = #<VLA-OBJECT IAeccApplication 00000248ea28e5b0>
;   Convergence (RO) = Civil 3D API: Данная операция не поддерживается, так как не задана геодезическая система координат.
;   Description = Civil 3D API: Параметр задан неверно.
;   DescriptionFormat = ""
;   DisplayName (RO) = Civil 3D API: Параметр задан неверно.
;   Document (RO) = #<VLA-OBJECT IAeccDocument 00000248ea28ec70>
;   Easting = 4319.75
;   Elevation = 0.0
;   EntityTransparency = "ПоСлою"
;   FullDescription (RO) = ""
;   GridEasting = Civil 3D API: Данная операция не поддерживается, так как не задана геодезическая система координат.
;   GridNorthing = Civil 3D API: Данная операция не поддерживается, так как не задана геодезическая система координат.
;   Handle (RO) = "6904"
;   HasExtensionDictionary (RO) = 0
;   Hyperlinks (RO) = #<VLA-OBJECT IAcadHyperlinks 00000240df2db9c8>
;   LabelRotation = 0.0
;   LabelStyle = nil
;   Latitude = Civil 3D API: Данная операция не поддерживается, так как не задана геодезическая система координат.
;   Layer = "V-NODE"
;   Linetype = "ByLayer"
;   LinetypeScale = 1.0
;   Lineweight = -1
;   Location = (4319.75 5204.48 0.0)
;   Longitude = Civil 3D API: Данная операция не поддерживается, так как не задана геодезическая система координат.
;   Material = "ByLayer"
;   Name = ""
;   Northing = 5204.48
;   Number = 9
;   ObjectID (RO) = 49
;   ObjectName (RO) = "AeccDbCogoPoint"
;   OwnerID (RO) = 46
;   PlotStyleName = "ByLayer"
;   ProjectVersion (RO) = Civil 3D API: Параметр задан неверно.
;   RawDescription = ""
;   Rotation = 0.0
;   Scale (RO) = Civil 3D API: Данная операция не поддерживается, так как не задана геодезическая система координат.
;   ShowToolTip = -1
;   Style = nil
;   StyleName (RO) = "<нет>"
;   SurveyPoint (RO) = 0
;   TrueColor = #<VLA-OBJECT IAcadAcCmColor 00000240df2daa60>
;   Visible = -1
;   XYScale = 1.0
;   ZScale = 1.0
; Поддерживаемые методы:
;   ArrayPolar (3)
;   ArrayRectangular (6)
;   Copy ()
;   Delete ()
;   GetBoundingBox (2)
;   GetExtensionDictionary ()
;   GetUserDefinedPropertyValue (1)
;   GetXData (3)
;   Highlight (1)
;   IntersectWith (2)
;   IsReferenceObject ()
;   IsReferenceStale ()
;   IsReferenceSubObject ()
;   IsReferenceValid ()
;   Mirror (2)
;   Mirror3D (3)
;   Move (2)
;   Rotate (2)
;   Rotate3D (3)
;   ScaleEntity (2)
;   SetUserDefinedPropertyValue (2)
;   SetXData (2)
;   TransformBy (1)
;   Update ()
ни слова о группе, ну оно и логично, одна точка может состоять в разных группах

Дамп группы
Цитировать
; IAeccPointGroup: Интерфейс IAeccPointGroup
; Значения свойств:
;   Application (RO) = #<VLA-OBJECT IAeccApplication 00000248e9a3fd10>
;   Description = ""
;   Document (RO) = #<VLA-OBJECT IAeccDocument 00000248e9a3faa0>
;   DrawPriority (RO) = 9
;   Elevation = 0.0
;   Handle (RO) = "6913"
;   HasExtensionDictionary (RO) = 0
;   IsUpToDate (RO) = -1
;   Name = "My test group"
;   ObjectID (RO) = 52
;   ObjectName (RO) = "AeccDbPG"
;   OverrideElevation = 0
;   OverridePointLabelStyle = 0
;   OverridePointStyle = 0
;   OverrideRawDescription = 0
;   OwnerID (RO) = 44
;   PointCount (RO) = 0
;   PointLabelStyle = #<VLA-OBJECT IAeccLabelStyle 00000240e36d0e90>
;   Points (RO) = nil
;   PointStyle = #<VLA-OBJECT IAeccPointStyle 00000240e95c84d0>
;   QueryBuilder (RO) = #<VLA-OBJECT IAeccPointGroupQueryBuilder 00000248e9a3f9b0>
;   RawDescription = ""
; Поддерживаемые методы:
;   ContainsPoint (1)
;   Delete ()
;   GetExtensionDictionary ()
;   GetUserDefinedPropertyClassification (1)
;   GetXData (3)
;   SetUserDefinedPropertyClassification (2)
;   SetXData (2)
;   Update ()

Если в группе есть точки, то их номера в виде списка появляются в свойстве "Points" , но это свойство только для чтения :-( Метод "ContainsPoint" проверяет опять же по номеру(или id точки) входит ли она в группу. А вот как добавить в группу точку ни чего нет...


Вот что-то есть но на каком-то совсем мне неизвестном языке http://help.autodesk.com/view/CIV3D/2017/ENU/?guid=GUID-55A8758C-41DF-47F6-A762-F9B87FAA1A54 или вот http://docs.autodesk.com/CIV3D/2014/ENU/Developers_Guide/index.html?url=files/GUID-2CE0EBB7-9539-44D6-A9D0-167D78414D44.htm,topicNumber=d30e14477

Походу опять из Lisp того не сделать?

Отмечено как Решение BearDyugin 16-11-2016, 10:05:59

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 738
Re: Civil 3D добавить точки в группу
« Ответ #1 : 14-11-2016, 22:18:35 »
В самом простом варианте (новая группа и надо добавить одну точку) это можно сделать так:
Код - Auto/Visual Lisp [Выбрать]
  1. (setq query_builder (vlax-get-property new_group 'QueryBuilder))
  2. (vlax-put-property query_builder 'IncludeNumbers (vlax-get-property point 'Number))
Соответственно, если в группе уже будут заданы точки по номерам, то надо будет проверить, не входит ли уже эта точка в группу и добавить ее номер через запятую. Также, этот QueryBuilder позволяет добавлять точки по другим критериям, не только по номерам. То есть, все полностью по аналогии с пользовательским интерфейсом.