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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Можно ли модифицировать функцию _align?

Можно ли модифицировать функцию _align?

Ответ
Поиск в этой теме
Непрочитано 04.01.2014, 11:14 #1
Можно ли модифицировать функцию _align?
Barti
 
Регистрация: 04.01.2014
Сообщений: 13

Здравствуйте! Есть несколько полилиний (результаты геод. съемок), которые подгружались в Автокад и как правило с помощью функции align разворачивались друг относительно друга по двум контрольным точкам, чтобы потом по ним вычерчивать домики, участки и прочее. Можно ли сделать такую модификацию функции align, чтобы процесс выглядел так: выделяем обе полилинии (исходную и целевую) и указываем не координаты точек, по которым они должны выравниваться, а номера вершин полилиний (просто вводим с клавы)? В моем случае это удобнее просто по той причине, что проще указать номера отмеченные на абрисе, чем что-то искать на чертеже. Знаю, блажь конечно, но если кто знает, как это сделать тем или иным способом то буду очень благодарен
Просмотров: 3839
 
Непрочитано 04.01.2014, 11:35
#2
sertor

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


Цитата:
Сообщение от Barti Посмотреть сообщение
Знаю, блажь конечно, но если
Это точно...
Но если уж такой большой чертеж со множеством точек и выискивать нужные проблематично, то можно воспользоваться командой НАЙТИ (_find). Она работает и с текстами и с атрибутами блоков (если конечно под понятием "номера вершин полилиний" подразумеваются точки съемки).
__________________
Как-то так.
sertor вне форума  
 
Непрочитано 04.01.2014, 12:04
#3
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,680


А есть ли полная стопроцентная уверенность в том, что
Цитата:
Сообщение от Barti Посмотреть сообщение
номера отмеченные на абрисе
будут теми же самыми, что и
Цитата:
Сообщение от Barti Посмотреть сообщение
номера вершин полилиний
???
В любом случае, скорее всего, это уже не модификация функции команды _align, а написание новой функци (команды), возможно, на основе команды _align. И в любом случае это недостижимо штатными средствами Автокада и даже макрокомандами, поэтому теме этой место либо в разделе "Программирование", где по мере желания и возможности форумчане могут помочь и что-то подсказать в написании кода (иногда указать или дать готовое решение), либо в разделе "Поиск исполнителей", где можно на коммерческой основе найти программиста, готового взяться за решение задачи. Первый вариант дешевле, второй - быстрее и надежней. И в любом варианте придется дать более развернутое тех.задание, с пояснениями, с приложенным файлом "как есть" и "как надо".
skkkk вне форума  
 
Автор темы   Непрочитано 04.01.2014, 12:20
#4
Barti


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


Уверен, что номера будут теми же самыми. Пока с этим проблем ни разу не возникало.
Насчет того, что тема не в тот раздел... Окей, просто хотел уточнить нету ли, собственно, какого-нибудь готового решения. Спасибо всем за ответы)
Barti вне форума  
 
Непрочитано 04.01.2014, 13:35
1 | #5
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,680


Цитата:
Сообщение от Barti Посмотреть сообщение
просто хотел уточнить нету ли, собственно, какого-нибудь готового решения
Решение не сложное, поэтому теперь есть. Но не совсем готовое, поскольку нет проверок, обработки ошибок и проч. Для пробы и выявления соответствия понятого требуемому:
Код:
[Выделить все]
 (defun C:ALIGN-VX ( / en0 en1 crv0 crv1 vxnmbr11 vxnmbr12 vxnmbr21 vxnmbr22 pt11 pt12 pt21 pt22)
	(setq en0 (car (entsel "\nУкажите исходную полилинию: ")))
	(initget 7)
	(setq vxnmbr11  (getint "\nВведите номер первой вершины: ")
		  vxnmbr12  (getint "\nВведите номер второй вершины: ")
	)
	(setq en1 (car (entsel "\nУкажите целевую полилинию: ")))
	(initget 7)
	(setq vxnmbr21  (getint "\nВведите номер первой вершины: ")
		  vxnmbr22  (getint "\nВведите номер второй вершины: ")
	)
	(setq crv0 (vlax-ename->vla-object en0)
		  crv1 (vlax-ename->vla-object en1)
		  pt11 (trans (vlax-curve-getPointAtParam crv0 (1- vxnmbr11)) 1 0)
		  pt12 (trans (vlax-curve-getPointAtParam crv0 (1- vxnmbr12)) 1 0)
		  pt21 (trans (vlax-curve-getPointAtParam crv1 (1- vxnmbr21)) 1 0)
		  pt22 (trans (vlax-curve-getPointAtParam crv1 (1- vxnmbr22)) 1 0)
	)
	(command "_ALIGN" en0 "" "_non" pt11 "_non" pt21 "_non" pt12 "_non" pt22 "" "_N")
)
Offtop: P.S.: Попросим модераторов перенести тему в "Программирование"

Последний раз редактировалось skkkk, 13.03.2014 в 15:31.
skkkk вне форума  
 
Автор темы   Непрочитано 04.01.2014, 14:01
#6
Barti


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


Это именно то, что требовалось! Спасибо)
Barti вне форума  
 
Непрочитано 04.01.2014, 14:47
#7
sertor

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


Цитата:
Сообщение от Barti Посмотреть сообщение
В моем случае это удобнее просто по той причине, что проще указать номера отмеченные на абрисе, чем что-то искать на чертеже
Интересно, как Вы в абрисе выполняете нумерацию и потом находите вершины полилиний? Программа написана для выравнивания по этим вершинам (см. скрин)
Миниатюры
Нажмите на изображение для увеличения
Название: Image 2.png
Просмотров: 63
Размер:	25.2 Кб
ID:	119804  
__________________
Как-то так.
sertor вне форума  
 
Автор темы   Непрочитано 04.01.2014, 15:12
#8
Barti


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


Цитата:
Сообщение от sertor Посмотреть сообщение
Интересно, как Вы в абрисе выполняете нумерацию и потом находите вершины полилиний? Программа написана для выравнивания по этим вершинам
Все что снимается с одной точки стояния тахеометра нумеруется как А1, А2 и т.д. Со следующей В1, В2 и т.д. То есть в таком виде координаты хранятся в памяти прибора и так же я их нумерую на абрисе. Если загружать таким образом список координат А1, А2, ... в Автокад в виде полилинии, то нумерация сохраняется: А1 (точка стояния) соответствует 1 вершине полилинии и так далее.
Barti вне форума  
 
Непрочитано 04.01.2014, 15:29
#9
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,680


Цитата:
Сообщение от Barti Посмотреть сообщение
Это именно то, что требовалось! Спасибо)
Barti, думаю, что появятся вопросы/замечания/предложения. Вдруг захочется выравнивать не только полилинии, но и блоки? Можно при запросе номеров вершин назначить действие, если нажать Enter. Может оказаться более удобным не вводить номера вершин, а взять вершины указанных сегментов полилиний. И так далее... В общем, предлагаю потестировать, высказать мысли, а там я уж и допилить постараюсь по возможности. Удачи!
skkkk вне форума  
 
Непрочитано 04.01.2014, 15:44
#10
trir


 
Регистрация: 18.12.2010
Сообщений: 5,115


Civil 3d Survey
trir вне форума  
 
Автор темы   Непрочитано 04.01.2014, 16:24
#11
Barti


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


trir, я немного погуглил, но не понял в чем преимущество Civil (раньше никогда не пользовался). Расскажите, если не сложно. Я пользуюсь для импорта вот этим: http://geodesist.ru/forum/resources/...B2-autocad.14/
Barti вне форума  
 
Непрочитано 04.01.2014, 16:32
1 | #12
trir


 
Регистрация: 18.12.2010
Сообщений: 5,115


По идее в Civil 3D, рабочее пространство Survey - содержится все нужные инструменты для обработки геодезических данных, от импорта с прибора, до выдачи готового результата... но с этим не работал, к сожалению
trir вне форума  
 
Автор темы   Непрочитано 04.01.2014, 16:34
#13
Barti


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


skkkk, ну замечаний никаких нет - все чудесно). Предложение есть одно. Можно сделать так чтобы выравнивались несколько полилиний. То есть, все то же самое, но исходных полилиний несколько (точки выбираются только, к примеру в первой выбранной).
Barti вне форума  
 
Непрочитано 04.01.2014, 17:00
#14
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,680


Так?
Код:
[Выделить все]
 (defun C:ALIGN-VX ( / en0 en1 ss crv0 crv1 vxnmbr11 vxnmbr12 vxnmbr21 vxnmbr22 pt11 pt12 pt21 pt22)
	(vl-load-com)
	(setq en0 (car (entsel "\nУкажите исходную полилинию: "))
		  crv0 (vlax-ename->vla-object en0)
	)
	(initget 7)
	(setq vxnmbr11  (getint "\nВведите номер первой вершины: ")
		  vxnmbr12  (getint "\nВведите номер второй вершины: ")
	)
	(vla-Highlight crv0 :vlax-true)
	(princ "\nУкажите остальные объекты, которые нужно выровнять")
	(setq ss (ssget))
	(if (null ss) (setq ss (ssadd)))
	(ssadd en0 ss)
	(setq en1 (car (entsel "\nУкажите целевую полилинию: ")))
	(initget 7)
	(setq vxnmbr21  (getint "\nВведите номер первой вершины: ")
		  vxnmbr22  (getint "\nВведите номер второй вершины: ")
	)
	(setq crv1 (vlax-ename->vla-object en1)
		  pt11 (trans (vlax-curve-getPointAtParam crv0 (1- vxnmbr11)) 1 0)
		  pt12 (trans (vlax-curve-getPointAtParam crv0 (1- vxnmbr12)) 1 0)
		  pt21 (trans (vlax-curve-getPointAtParam crv1 (1- vxnmbr21)) 1 0)
		  pt22 (trans (vlax-curve-getPointAtParam crv1 (1- vxnmbr22)) 1 0)
	)
	(command "_ALIGN" ss "" "_non" pt11 "_non" pt21 "_non" pt12 "_non" pt22 "" "_N")
)

Последний раз редактировалось skkkk, 13.03.2014 в 15:30.
skkkk вне форума  
 
Автор темы   Непрочитано 04.01.2014, 18:47
#15
Barti


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


выдает ошибку. Укажите исходную полилинию: ; ошибка: no function definition:
VLAX-ENAME->VLA-OBJECT
Barti вне форума  
 
Непрочитано 04.01.2014, 18:56
#16
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,680


Странно, почему раньше работало... Видимо были подгружены другие какие-то лиспы.
Постоянно забываю про (vl-load-com).
Исправил в #14.
skkkk вне форума  
 
Автор темы   Непрочитано 04.01.2014, 19:12
#17
Barti


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


одна проблема - теперь обязательно чтобы были еще и другие объекты, которые нужно выравнивать. Без них выдает ошибку
Barti вне форума  
 
Непрочитано 04.01.2014, 19:22
#18
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,680


Исправил в #14. Думаю проблема там еще не одна всплывет, я ж говорил:
Цитата:
Сообщение от skkkk Посмотреть сообщение
нет проверок, обработки ошибок и проч.
Так что, тестируем хорошенько.
skkkk вне форума  
 
Автор темы   Непрочитано 04.01.2014, 19:50
#19
Barti


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


Попробовал на нескольких полилиниях - вроде все в порядке. Конечно, время покажет, что там дальше будет, но еще раз спасибо skkkk)
Barti вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Можно ли модифицировать функцию _align?

Опции темы Поиск в этой теме
Поиск в этой теме:

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Решился освоить подшивку….. Red Nova AutoCAD 440 05.05.2025 13:50
Мониторы LCD CRT Разное 94 17.06.2008 10:51
как можно (если можно) все обнулить Michael-- AutoCAD 1 03.10.2007 10:31
ЮМОР 2006 =) Perezz!! Разное 1122 04.01.2007 00:46
Можно прорисовать объект по движению мыши в реальн. времени Варгин Программирование 5 17.08.2006 08:23