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

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

Проблемы с построением полилиний по номерам точек COGO

Ответ
Поиск в этой теме
Непрочитано 10.04.2015, 15:27 #1
Проблемы с построением полилиний по номерам точек COGO
Stoner
 
Регистрация: 27.11.2012
Сообщений: 38

Здравствуйте.
Изучаю lisp два дня
Хочу создать команду для построения полилиний по номерам точек COGO (они должны задаваться пользователем вручную).
Т.е. требуется вводить номера точек COGO (даже если через - , последовательная обработка номеров, как это реализовано через прозрачную команду 'PN
Вот написал файлик
Код:
[Выделить все]
 (defun c:plineobs()
(setq curlayer (getvar "clayer"))
(setq curcolor (getvar "cecolor"))
(setq curweight (getvar "celweight"))
(setq curtypeline (getvar "celtype"))
(setq flag (tblsearch "layer" "11_Препятствия"))
(if (null flag) (command "_layer" "_n" "11_Препятствия" ""))
(command "_clayer" "11_Препятствия")
(command "_cecolor" "7")
(command "_celweight" "60")
(command "_celtype" "Continuous")
(vl-cmdf "_pline" "'PN" pause)
(command "_zoom" "_o" "_last")
(curopt)
)
(defun c:curopt()
(command "_clayer" curlayer)
(command "_cecolor" curcolor)
(command "_celweight" curweight)
(command "_celtype" curtypeline)
)
Ну от Lisp'а тут только сохранение параметров чертежа (в смысле параметров создания новых примитивов)
Проблема в том, что после выполнения (vl-cmdf "_pline" "'PN" pause) пользователь вводит номера точек и после нажатия ENTER autocad просит ещё вводить, продолжая созданную полилинию. Затем жмётся ESC и попадаем в меню команды _pline созданной полилинии. Далее опять ESC и команда прерывается. Т.е. код не продолжается, всё останавливается на (vl-cmdf "_pline" "'PN" pause).
Как сделать, чтобы после ввода интервала номеров точек моя команда заканчивал построение полилинии и начинала строить новую полилинию с новым интервалом номеров точек COGO пока не нажмётся ESC?
Помогите кто чем может, пожалуйста

Да, ещё там в конце команды plineobs желательная опция зума на созданную полилинию. Эта команда уже не выполняется по завершению создания полилинии.
Почитал про функцию entmake (), но не понял про коды списка (не смог найти нормальное их описание).
Я так понял, что реализация через только функции Lisp команды 'PN трудоёмко, да и зачем если уже есть
Или лучше этим в VBA заниматься?

Последний раз редактировалось Stoner, 14.04.2015 в 16:45.
Просмотров: 5333
 
Непрочитано 10.04.2015, 16:39
1 | #2
Do$

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


Цитата:
Сообщение от Stoner Посмотреть сообщение
Или лучше этим в VBA заниматься?
VB.NET или любой другой NET язык. Лучше C#. Но если есть знания VBA, то VB.NET полегче пойдет. Чтобы на LISP писать под Civil, нужно и то и другое очень хорошо знать.
__________________
Толковый выбор приходит с опытом, а к нему приводит выбор бестолковый. (The Mechanic)
Do$ вне форума  
 
Автор темы   Непрочитано 10.04.2015, 17:46
#3
Stoner


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


Цитата:
Сообщение от Do$ Посмотреть сообщение
VB.NET или любой другой NET язык. Лучше C#. Но если есть знания VBA, то VB.NET полегче пойдет. Чтобы на LISP писать под Civil, нужно и то и другое очень хорошо знать.
А конкретно по этому случаю есть соображения?
Как продолжить выполнение команд?
Stoner вне форума  
 
Непрочитано 13.04.2015, 10:34
#4
Do$

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


Конкретно по этому случаю - тут нужно экспериментировать, пробовать различные варианты. Возможно, нужно вынести запрос номеров точек за рамки vl-cmdf. Возможно, нужно эту конструкцию заключить в цикл по условию... В общем, думаю, что Вашу заготовку нужно еще основательно дописывать.
__________________
Толковый выбор приходит с опытом, а к нему приводит выбор бестолковый. (The Mechanic)
Do$ вне форума  
 
Автор темы   Непрочитано 14.04.2015, 08:23
#5
Stoner


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


Учиться, учиться и ещё раз учиться
Stoner вне форума  
 
Автор темы   Непрочитано 21.04.2015, 15:30
#6
Stoner


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


А может кто знает как на C# получить доступ к точкам cogo чертежа через COM.
Например, по номеру получить координаты точки.
Смотрел коды на VB и пытался их в C# написать. Не вышло.
Вот код на VB:
Код:
[Выделить все]
Public Sub CreateCOGOPoint()
 
        '' This sample Demonstrates Creation of COGO Point Civil 3D 2012
        ''
        '' Created by Partha P. Sarkar - DevTech, Autodesk
 
        Dim ed As Editor = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor
 
        Dim oAcadApp As Autodesk.AutoCAD.Interop.AcadApplication = Nothing
        Dim oAeccApp As Autodesk.AECC.Interop.UiLand.AeccApplication = Nothing
        Dim oAeccDoc As Autodesk.AECC.Interop.UiLand.AeccDocument = Nothing
        Dim oAeccDB As Autodesk.AECC.Interop.Land.AeccDatabase = Nothing
 
        Using trans As Transaction = HostApplicationServices.WorkingDatabase.TransactionManager.StartTransaction()
            Try
                If oAcadApp Is Nothing Then
                    oAcadApp = GetObject(, "AutoCAD.Application")
                End If
            Catch ex As Exception
                ed.WriteMessage(ex.Message)
            End Try
 
            Try
                oAeccApp = oAcadApp.GetInterfaceObject("AeccXUiLand.AeccApplication.9.0")
                oAeccDoc = oAeccApp.ActiveDocument
                oAeccDB = oAeccApp.ActiveDocument.Database
 
                Dim oPoint As Autodesk.AECC.Interop.Land.AeccPoint = Nothing
                Dim pointLocation As Point3d = Nothing
                Dim promptPtOp As PromptPointOptions = New PromptPointOptions(vbCrLf + "Select the Location to create the COGO Point : ")
                promptPtOp.LimitsChecked = True
                promptPtOp.AllowNone = False
 
                Dim promptPtRes As PromptPointResult = ed.GetPoint(promptPtOp)
 
                If promptPtRes.Status <> PromptStatus.OK Then
                    ed.WriteMessage("Exiting! Try Again !")
                   Exit Sub
                End If
 
                pointLocation = promptPtRes.Value
                Dim location(0 To 2) As Double
                location(0) = pointLocation.X
                location(1) = pointLocation.Y
                location(2) = pointLocation.Z
                oPoint = oAeccDoc.Points.Add(CType(location, Object))
                oPoint.RawDescription = "RAW1"
                oPoint.Name = "NAME1"
                oPoint.Number = 10              
 
                trans.Commit()
            Catch ex As Exception
                ed.WriteMessage("Error : ", ex.Message & vbCrLf)
            End Try
        End Using
    End Sub
PS: Autocad Civil 3D 2012. Как написали знающие люди, через DotNet к точкам COGO в civil 2012 не подберёшься
Stoner вне форума  
 
Непрочитано 21.04.2015, 17:29
#7
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,611


Цитата:
Сообщение от Stoner Посмотреть сообщение
PS: Autocad Civil 3D 2012. Как написали знающие люди, через DotNet к точкам COGO в civil 2012 не подберёшься
Ой ли...
http://adndevblog.typepad.com/infras...g-net-api.html
http://adn-cis.org/sozdanie-i-redakt...chek-cogo.html
http://docs.autodesk.com/CIV3D/2013/...d7e4fc0416.htm
Boxa на форуме  
 
Непрочитано 21.04.2015, 17:37
#8
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,431


Stoner, у тебя код не по получению точки, а по созданию. Не путай теплое с мягким.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 21.04.2015, 19:56
#9
Stoner


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


У вас даже в адресе ссылок указан civil 2013.
В Civil 2012 через COM

Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Stoner, у тебя код не по получению точки, а по созданию. Не путай теплое с мягким.
Простите не указал наверно суть проблемы.
У меня с транзакцией беда. Остальное не важно. Не могу понять как подключаться к объектам через транзакцию

Последний раз редактировалось Stoner, 22.04.2015 в 08:22.
Stoner вне форума  
 
Непрочитано 22.04.2015, 10:24
#10
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,611


Цитата:
Сообщение от Stoner Посмотреть сообщение
У вас даже в адресе ссылок указан civil 2013.
В Civil 2012 через COM
А если поискать?
ЗЫ.
Я под civil никогда ничего не писал, просто смотрю документацию.
Миниатюры
Нажмите на изображение для увеличения
Название: cogopoint1.png
Просмотров: 36
Размер:	218.7 Кб
ID:	148201  
Boxa на форуме  
 
Автор темы   Непрочитано 22.04.2015, 11:20
#11
Stoner


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


Цитата:
Сообщение от Boxa Посмотреть сообщение
А если поискать?
ЗЫ.
Я под civil никогда ничего не писал, просто смотрю документацию.
А я не то чтобы не пишу под Civil, я и под Autocad не пишу.
Просто появилась задачка с точками. Вот и решил через .Net API её обработать.
Недавно начал. Перечитал кучу рефёренсов, в голове каша.
PointEntity я находил.
Вот здесь переписывался с человеком по этому поводу http://adn-cis.org/forum/index.php?topic=475.0
Было странно, что с коридорами и поверхностями можно работать, а с COGO points, с которыми это всё связано и работает - нет.
Он меня отослал сюда http://forums.autodesk.com/t5/autoca.../3185062#M5888
Сейчас буду плотнее разбираться с классом PointEntity
Stoner вне форума  
 
Непрочитано 01.06.2015, 19:33
#12
P_S


 
Регистрация: 09.10.2006
Санкт-Петербург
Сообщений: 99


Зачем такие мучения? Есть же ActiveX/COM, почему не вытащить точки простеньким LISPом:
Код:
[Выделить все]
 (setq pts
  (vlax-get-property
    (vla-get-ActiveDocument
      (vla-GetInterfaceObject
	(vlax-get-acad-object)
	"AeccXUiLand.AeccApplication.9.0"));Civil 3D 2012
    'Points))
Ну да, получаем не очень удобный в работе объект - коллекцию, но для удобства можно создать список из номеров точек и нужных для работы свойств:
Код:
[Выделить все]
 (setq i 0)
(repeat(vlax-get-property pts 'Count)
(setq pt_lst(cons(list(vlax-get-property(vlax-invoke-method pts 'Item i) 'Number)
			(vlax-get-property(vlax-invoke-method pts 'Item i) 'Easting)
			(vlax-get-property(vlax-invoke-method pts 'Item i) 'Northing)
			(vlax-get-property(vlax-invoke-method pts 'Item i) 'Elevation)
			(vlax-get-property(vlax-invoke-method pts 'Item i) 'RawDescription)
			)pt_lst)
	i(1+ i)))
...и делай с ним что хошь.
P_S вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Проблемы с построением полилиний по номерам точек COGO

Реклама i


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Какой язык перспективен для инженера-конструктора с условием The_Mercy_Seat Программирование 705 17.03.2021 14:19
Изменение отметок точек COGO при переносе COGO в Civile. Purgen488 Вертикальные решения на базе AutoCAD 19 19.06.2019 12:05
Civil 2014. Как изменить точность вывода отметок после преобразования точек COGO в блоки vovkirp Вертикальные решения на базе AutoCAD 7 13.10.2014 15:23
Autocad 2014 Civil3D экспорт координат точек COGO относительно ПСК Stoner Вертикальные решения на базе AutoCAD 3 17.09.2013 13:48
Построение точек, полилиний по координатам X,Y,Z vitos_ Вертикальные решения на базе AutoCAD 10 21.11.2009 15:32