| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как повернуть метки точек COGO в CIVIL автоматически вдоль изогнутой полилинии

Как повернуть метки точек COGO в CIVIL автоматически вдоль изогнутой полилинии

Ответ
Поиск в этой теме
Непрочитано 22.07.2013, 20:15 #1
Как повернуть метки точек COGO в CIVIL автоматически вдоль изогнутой полилинии
Петров Евгений
 
Регистрация: 15.07.2013
Сообщений: 7

Метки точек COGO в CIVIL поумолчанию повернуты на север как и должно быть. Но мы снимаем и проектируем железную дорогу и некоторые группы точек необходимо разворачивать вдоль нее. Вручную разворачивать метки на многокилометровом участке - очень трудоемкий процесс. Может кто-нибудь знает как это сделать автоматически? На форуме тут нашел в разделе Программирование одну прогу-Alite(gomer), но как я понял она разворачивает только текст и блоки.
Просмотров: 8194
 
Непрочитано 22.07.2013, 20:40
#2
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


С Цивилом совсем не дружу, но думаю что сделать рельно, только надо отдампить метку, на предмет нужного свойства. Правда команда получится спецфическая - ALCOGO...
gomer вне форума  
 
Непрочитано 22.07.2013, 21:51
#3
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,702
Отправить сообщение для Do$ с помощью Skype™


О! Процесс пошел - железнодорожники стали работать в Сивиле
УГР, отметки бровки и прочие отметки поперечников жд полотна хотите вдоль трассы развернуть?
Ж.д. пути трассами рисуете?
Вполне возможно, что это как-то решается стандартными методами... С точками COGO не разбирался особо, меня больше трубопроводы интересуют
Если стандартно никак -то программно это легко сделать. Программировать проще всего на NET, там все для этого есть. Имеющиеся на форуме лиспы вряд ли помогут.
Если пример чертежа будет, можно будет более предметно поговорить.
gomer, дамп метки тебе мало чем поможет. Как вариант, можно лиспом через COM к ним подобраться.
Хотя, свойство "Rotation" в нем есть:
Код:
[Выделить все]
Выберите объект: ; IAeccPoint: Интерфейс IAeccPoint
; Значения свойств:
;   Application (RO) = #<VLA-OBJECT IAeccApplication 0000000033ff45e0>
;   Convergence (RO) = Civil 3D API: Данная операция не поддерживается, так как не задана геодезическая система координат.
;   Description = Civil 3D API: Параметр задан неверно.
;   DescriptionFormat = ""
;   DisplayName (RO) = Civil 3D API: Параметр задан неверно.
;   Document (RO) = #<VLA-OBJECT IAeccDocument 0000000033fedce0>
;   Easting = 553.075
;   Elevation = 50.0
;   EntityTransparency = "ПоСлою"
;   FullDescription (RO) = ""
;   GridEasting = Civil 3D API: Данная операция не поддерживается, так как не задана геодезическая система координат.
;   GridNorthing = Civil 3D API: Данная операция не поддерживается, так как не задана геодезическая система координат.
;   Handle (RO) = "20145"
;   HasExtensionDictionary (RO) = 0
;   Hyperlinks (RO) = #<VLA-OBJECT IAcadHyperlinks 000000003da20708>
;   LabelRotation = 0.0
;   LabelStyle = nil
;   Latitude = Civil 3D API: Данная операция не поддерживается, так как не задана геодезическая система координат.
;   Layer = "0"
;   Linetype = "ByLayer"
;   LinetypeScale = 1.0
;   Lineweight = -1
;   Location = (553.075 3435.75 50.0)
;   Longitude = Civil 3D API: Данная операция не поддерживается, так как не задана геодезическая система координат.
;   Material = "ByLayer"
;   Name = ""
;   Northing = 3435.75
;   Number = 1
;   ObjectID (RO) = 51
;   ObjectID32 (RO) = 51
;   ObjectName (RO) = "AeccDbCogoPoint"
;   OwnerID (RO) = 50
;   OwnerID32 (RO) = 50
;   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 000000003da22260>
;   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 ()
T

Последний раз редактировалось Do$, 22.07.2013 в 22:07.
Do$ вне форума  
 
Непрочитано 23.07.2013, 00:00
#4
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Цитата:
Сообщение от Do$ Посмотреть сообщение
Хотя, свойство "Rotation" в нем есть:
Если это то, что я думаю, то осталось только подобрать фильтр, для этих точек или я не прав?
gomer вне форума  
 
Непрочитано 23.07.2013, 07:56
1 | #5
TararykovDG

Программист-энтузиаст
 
Регистрация: 17.07.2009
Воронеж
Сообщений: 571


У нас вдоль пути поворачивают не только метки точек, но сами точки. Петров Евгений, попробуй так
Код:
[Выделить все]
 
; ----------------------------------------------------------------------------------------------------------------------------------------------
(defun c:Align-Point-by-Way( / )
  ((lambda(main_put)
     (if (= (type main_put) 'ENAME)
       ((lambda(lst_points)
	  (if lst_points
	    (foreach point lst_points
	      ((lambda(point_on_curve)
		 (if point_on_curve
		   ((lambda(ang)
		      (if (and ang
			       (not (vl-catch-all-error-p ang))
			       )
			(progn
			  (vlax-put-property point 'Rotation ang)
			  (vlax-put-property point 'LabelRotation ang)
			  )
			)
		      )
		     (_tdg-get-reanim_ang_rad main_put point_on_curve 0)
		     )
		   )
		 )
		(vlax-curve-getClosestPointTo main_put (vlax-safearray->list (vlax-variant-value (vlax-get-property point 'Location))))
		)
	      )
	    )
	  )
	 (get-list-point)
	 )
       )
     )
    (_tdg-get-object-byselect "\nУкажите путь: " '("LWPOLYLINE" "POLYLINE" "AECC_ALIGNMENT") nil)
    )
); end c:Align-Point-by-Way
; ----------------------------------------------------------------------------------------------------------------------------------------------

; ----------------------------------------------------------------------------------------------------------------------------------------------
(defun _tdg-get-object-byselect(message filter lock_enter / return)
  ((lambda(errnovar)
     (setvar "errno" 0)
     (while (not (setq return ((lambda(obj)
                                 (if (not (vl-catch-all-error-p obj))
                                   (if obj
                                     (if filter
                                       (if (member (strcase (cdr (assoc 0 (entget (car obj))))) (mapcar 'strcase filter))
                                         (car obj)
                                         )
                                       (car obj)
                                       )
                                     (if (and (not lock_enter) (= (getvar "errno") 52))
                                       0
                                       )
                                     )
                                   1
                                   )
                                 )
                                (vl-catch-all-apply 'entsel
                                                    (list (strcat "\n" message))
                                                    )
                                )
                       )
                 )
       )
     (setvar "errno" errnovar)
     return
     )
    (getvar 'errno)
    )
  ); end _tdg-get-object-byselect
; ----------------------------------------------------------------------------------------------------------------------------------------------

; ----------------------------------------------------------------------------------------------------------------------------------------------
(defun _tdg-get-reanim_ang_rad(obj point ang / )
  (vl-catch-all-apply
    (function
      (lambda()
        (+ (angle '(0.0 0.0 0.0)
                  (vlax-curve-getFirstDeriv obj
                                            (vlax-curve-getParamAtPoint obj
                                                                        (vlax-curve-getClosestPointTo obj point)
                                                                        )
                                            )
                  )
           ang
           )
        )
      )
    )
  ); end _tdg-get-reanim_ang_rad
; ----------------------------------------------------------------------------------------------------------------------------------------------

; ----------------------------------------------------------------------------------------------------------------------------------------------
(defun get-list-point( / nomutt)
  ((lambda(nbr_select_point)
     (setvar 'nomutt nomutt)
     ((lambda(nbr)
	(if nbr
	  (mapcar 'vlax-ename->vla-object (vl-remove-if 'listp (mapcar 'cadr (ssnamex nbr))))
	  )
	)
       (if nbr_select_point
	 nbr_select_point
	 (ssget "_X" '((0 . "AECC_COGO_POINT")))
	 )
       )
     )
    (progn
      (prompt "\nВыберете точки <Все>: ")
      (setq nomutt (getvar 'nomutt))
      (setvar 'nomutt 1)
      (vl-catch-all-apply 'ssget
	(list '((0 . "AECC_COGO_POINT")))
	)
      )
    )
  ); end get-list-point
; ----------------------------------------------------------------------------------------------------------------------------------------------

__________________
cadtools
TararykovDG вне форума  
 
Автор темы   Непрочитано 23.07.2013, 10:43
#6
Петров Евгений


 
Регистрация: 15.07.2013
Сообщений: 7


TararykovDG спасибо, вроде все работает. Если бы была возможность выделять точки по группам - было-бы сказочно.

Последний раз редактировалось Петров Евгений, 23.07.2013 в 11:54.
Петров Евгений вне форума  
 
Непрочитано 23.07.2013, 15:34
#7
TararykovDG

Программист-энтузиаст
 
Регистрация: 17.07.2009
Воронеж
Сообщений: 571


Цитата:
Сообщение от Петров Евгений Посмотреть сообщение
Если бы была возможность выделять точки по группам - было-бы сказочно.
Переделывать лисп нет времени, можно сделать, так. Перед запуском команды Align-Point-by-Way, выбрать нужные точки по группе. На имени нужной группы точек нажать правой кнопкой мыши и в контекстном меню нажать пункт "Выбрать" (см. прикрепленный рисунок). Потом запустить лисп, выбрать примитив, задающий путь, а точки выберутся автоматически.
Изображения
Тип файла: jpg Безымянный.jpg (118.2 Кб, 421 просмотров)
__________________
cadtools
TararykovDG вне форума  
 
Автор темы   Непрочитано 23.07.2013, 19:04
#8
Петров Евгений


 
Регистрация: 15.07.2013
Сообщений: 7


Отлично. Что-то сам не допер. Спасибо.
Петров Евгений вне форума  
 
Непрочитано 09.04.2015, 14:57
#9
sertor

Геодезист
 
Регистрация: 23.05.2012
Ухта
Сообщений: 1,374


Возникла проблема с указанным выше лиспом. На AutoCAD Civil 3D 2010x32, при указании на выбранные метки точек для поворота, в ответ на запрос программы, появляется такое сообщение:
Цитата:
; ошибка: ActiveX Server возвратил ошибку: Библиотека не зарегистрирована
Подскажите, кто в курсе, в чем может быть причина?
__________________
Как-то так.
sertor вне форума  
 
Непрочитано 11.02.2016, 15:13
#10
Малёха

Инженер-геодезист
 
Регистрация: 16.09.2009
Архангельск
Сообщений: 49


Здравствуйте! Подскажите, пожалуйста, может у кого-нибудь есть приложение для поворота метки точки COGO по примеру команды Rotate text в Express Tools?
Малёха вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как повернуть метки точек COGO в CIVIL автоматически вдоль изогнутой полилинии

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Линии электрических соединений Shoorup Программирование 23 07.02.2015 15:13
Как повернуть текст с отметками высоты вдоль длинной и изогнутой полилинии? reddiska Программирование 16 17.07.2013 06:58
Как кучей повернуть текст с отметками высоты вдоль длинной и изогнутой дороги? reddiska AutoCAD 14 19.08.2012 19:37
обработка точек cogo в 3d , civil 3d 2012 slesh Вертикальные решения на базе AutoCAD 1 22.07.2012 19:24
Civil 3D. В изометрии не видны метки точек COGO survey_andry Вертикальные решения на базе AutoCAD 2 07.09.2011 12:04