Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
Avista
Зарегистрирован: 26.12.2009 Сообщения: 8
|
Добавлено: Сб Дек 26, 2009 2:29 pm Заголовок сообщения: Необходима помощь в MapBasic |
|
|
Здравствуйте! Я столкнулся с проблемой, которую самостоятельно не преодолеть.
На существующие точечные объекты надо "навесить" или заменить эти точечные объекты конкретными областями и коллекциями.
Как поменять точки на другие точки можно, а вот, например, вручную поставить 1500 областей в виде "бублика" (высокоствольный лес, столбы) - трудно. Проблема родилась из-за требований заказчика. При переводе Autocad-MapInfo точечные объекты нужно отображать масштабируемыми условными знаками. Поэтому приходится объединять примитивы в MI руками, чтобы получить ""луг", "заросли кустов" и т.д.
Существует хорошая утилита на http://www.glab2007.narod.ru/d/mu.html.
"КОПИЯ С ТОЧКОЙ" Дмитрия Мазурова. Принцип работы ее основан на копировании любого объекта с базовой точкой в буфер обмена (как в Autocad) и вставка этого объекта в любое место карты. Пока она и спасает. Но, например, после работы с слоем "13_Растительность"уже ничего в этой жизни не хочется...
Если кто-нибудь может помочь или утилитой, или указать операторы, или хотя бы направить ход мыслей в нужном направлении - Дай Бог Вам Здоровья и долгих лет!!!
Можно писать на Avista02@rambler.ru |
|
Вернуться к началу |
|
|
Андрей Могильный
Зарегистрирован: 21.03.2006 Сообщения: 864
|
Добавлено: Сб Дек 26, 2009 5:51 pm Заголовок сообщения: |
|
|
Вам не заливки площадных объектов точечными условными знаками нужны? |
|
Вернуться к началу |
|
|
Avista
Зарегистрирован: 26.12.2009 Сообщения: 8
|
Добавлено: Сб Дек 26, 2009 7:55 pm Заголовок сообщения: Необходима помощь в MapBasic |
|
|
Нет, нет. У меня составлены графические таблицы в MI где я, после "универсального транслятора" из Autocad'а, создал все точечные условные знаки с семантикой (например 5g_001) путем объединения элементов УЗ. Результатом является либо полилиния, либо коллекция (линия и площадь) если какую-то часть УЗ надо залить. |
|
Вернуться к началу |
|
|
Alex_Y
Зарегистрирован: 28.11.2008 Сообщения: 122
|
Добавлено: Вс Дек 27, 2009 11:52 am Заголовок сообщения: |
|
|
Пишите программу на Mapbasic-е, которая это делает. Программа тривиальная.
Fetch First From selection
do While not EOT(Selection)
RID = Selection.RowID
R = Selection.obj
X = CentroidX(R)
Y = CentroidY(R)
do Case Selection.Ваша_семантика
Case "5g_001" Create Rect Into Variable R (X-10, Y-10)(X+10, Y+10)
end Case
Update Selection Set obj = R Where RowID = RID
Fetch Next From Selection
loop
Для каждой вашей семантики создаете нужный объект. Однако нужно учитывать то, для какого масштаба это создается.
Не проще ли заlать точкам оформление условного знака из шрифта, как это все обычно делают? |
|
Вернуться к началу |
|
|
Avista
Зарегистрирован: 26.12.2009 Сообщения: 8
|
Добавлено: Вс Дек 27, 2009 5:08 pm Заголовок сообщения: Необходима помощь в MapBasic |
|
|
Большое Спасибо за помощь!
Про УЗ из шрифтов я писал. Требование заказчика. Причем 1:10 000 - пожалуйста делайте UZdorogi.ttf, UZrelief.ttf и т.д., а вот в 1:500 - 1:5 000
планах необходимы масштабируемые точечные УЗ. |
|
Вернуться к началу |
|
|
Avista
Зарегистрирован: 26.12.2009 Сообщения: 8
|
Добавлено: Чт Фев 11, 2010 9:56 pm Заголовок сообщения: Необходима помощь в MapBasic |
|
|
К сожалению - не получилось!
Пишу так:
"""""Sub Add01sub
Dim RID, X, Y, R, i, msg As Integer
i = "5g_002"
Fetch First From selection
do While not EOT(Selection)
RID = Selection.RowID
R = Selection.obj
X = CentroidX(R)
Y = CentroidY(R)
Do Case Selection.COL(i)
Case "5g_003"
create rect into variable R (X-10, Y-10)(X+10, Y+10)
End Case
Update Selection Set obj = R Where RowID = RID
Fetch Next From Selection
loop
End sub"""""
Ругается на create rect into variable R (X-10, Y-10)(X+10, Y+10) |
|
Вернуться к началу |
|
|
reasonat
Зарегистрирован: 01.07.2009 Сообщения: 224 Откуда: Екатеринбург
|
Добавлено: Пт Фев 12, 2010 11:11 am Заголовок сообщения: |
|
|
R должна быть переменной типа Object, а не Integer |
|
Вернуться к началу |
|
|
Avista
Зарегистрирован: 26.12.2009 Сообщения: 8
|
Добавлено: Вс Фев 14, 2010 12:00 am Заголовок сообщения: Необходима помощь в MapBasic |
|
|
НЕ ПОЛУЧАЕТСЯ!!!
Рисуется вместо точек огромный прямоугольник.
Конечно, может быть я плохо объяснил мою проблему
Вот ссылка на рисунок из MapInfo:
http://s11.radikal.ru/i183/1002/32/05e74dfbacd3.jpg
точки-звездочки имеют семантику (например 5g_003)
Коллекция-куст имеет свою семантику (например 0042)
Мне необходимо, чтобы вместо точек-звездочек появились кусты.
Спасибо! |
|
Вернуться к началу |
|
|
reasonat
Зарегистрирован: 01.07.2009 Сообщения: 224 Откуда: Екатеринбург
|
Добавлено: Пн Фев 15, 2010 10:21 am Заголовок сообщения: |
|
|
Вам для примера дали код, в котором на месте точки формируется другой объект. Вместо создания прямоугольника (Rect)
create rect into variable R (X-10, Y-10)(X+10, Y+10)
подставляйте создание объекта из нескольких кругов, хоть из Region, хоть из Circle. Посмотрите как в MapBasic создаются различные объекты - Create... |
|
Вернуться к началу |
|
|
Avista
Зарегистрирован: 26.12.2009 Сообщения: 8
|
Добавлено: Чт Мар 11, 2010 9:35 pm Заголовок сообщения: |
|
|
Здравствуйте! Подскажи, пожалуйста, почему не работает "Create Collection". Пишу так:
Include "mapbasic.def"
Declare Sub Main
Declare Sub Add03sub
Global on_bstyle As Brush
'***************************************************************************************************************************************************
Sub main
Create Menu "Точки" As
"&здания" Calling Add03sub,
"В&ыход",
"&О программе..."
Alter Menu Bar Add "Точки"
End sub
Sub Add03sub
Dim i as Integer
Dim X,Y as Float
Dim my_obj,my_reg, as Object
Dim myfont, myfont1, myfont2 As Font
Dim next_one As SmallInt
Dim mypen, mypen1, mypen2 As Pen
mypen = MakePen(2, 2, BLACK)
on_bstyle = MakeBrush(2, BLACK, WHITE)
myfont = MakeFont ("D431", 0, 12, BLack, -1)
'Работаем с tyu
select * from _здания where "recto" = "tyu" into Q001 Noselect
Insert Into _13_Building ( COL20) Select COL4 From Q001
select * from _здания where "recto" = "tyu" into Selection
If SelectionInfo(SEL_INFO_NROWS) > 0 then
Set CoordSys Table Selection
Set Distance Units "m"
For i = 1 To SelectionInfo(SEL_INFO_NROWS)
Fetch Rec i From Selection
my_obj = Selection.Obj
If ObjectInfo( my_obj , OBJ_INFO_TYPE ) = 5 then
X = CentroidX(my_obj)
Y = CentroidY(my_obj)
Create Collection Into Variable my_reg
Pline
3
(X-15, Y)(X , Y)(X+15, Y)
Pen (1,2,0)
Region 1
4
(X+1.256, Y)
(X+1.321, Y+0.115)
(X+1.376, Y+0.23)
(X+1.426, Y+0.355)
Pen (1,2,0)
Brush on_bstyle
Update Selection Set Obj = my_reg,"recto" = "tyu" where RowId = i
end if
next
end if
End Sub
Пишет, что неправильное предложение в Collection |
|
Вернуться к началу |
|
|
reasonat
Зарегистрирован: 01.07.2009 Сообщения: 224 Откуда: Екатеринбург
|
Добавлено: Пн Мар 15, 2010 2:03 pm Заголовок сообщения: |
|
|
Предложение Create Collection правильное. А вот что у вас с выборками - непонятно. Возможно в цикле For теряется выборка. Используйте вместо Selection уже готовую Q001, и количество строк считайте в этой выборке. Может и ругаться не будет. |
|
Вернуться к началу |
|
|
|