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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > ЛИСП-автоматическое перемещение высотных отметок при редактировании

ЛИСП-автоматическое перемещение высотных отметок при редактировании

Ответ
Поиск в этой теме
Непрочитано 29.01.2010, 08:26 #1
ЛИСП-автоматическое перемещение высотных отметок при редактировании
Малявка
 
Егорьевск Моск.обл.
Регистрация: 28.02.2007
Сообщений: 206

Здравствуйте!
Давно пользуюсь лиспиком, который позволяет автоматически проставлять высотные отметки, "тыкая" курсором в нужные места.
Сейчас нужна обратная программа, помогите пожалуйста!
Отрисовываю разрез конвейера по принесенной от заказчика таблице.
В модели через нужные мне расстояния по оси X расставляю примитив "текст". У меня это любое число. По очереди выбираю каждый текст и редактирую его, вводя нужную высотную отметку, которую беру из таблицы. Мне нужно, чтобы программа сначала запросила первый (базовый) примитив "текст", относительно которого она (программа) будет перемещать остальные тексты, а затем, после редактирования очередного текста, молча его переносила бы его по оси Y вверх или вниз относительно высоты базового текста. И еще: программа должна запросить коэффициент переноса, так как на разрезах обычно значения оси Y на порядок больше значений на оси X, типа 10:1. Но иногда нужно, допустим, 5:1 или 2:1, или 1:1.
Высотные отметки должны оставаться такими, как я их отредактировала: с одним, двумя или тремя числами после запятой, в том же стиле и в том же слое, но после редактирования и автоматического переноса меняли цвет на зеленый (чтобы не редактировать дважды).
Большое спасибо всем откликнувшимся!
p.s. Работаю в AutoCAD 2008 rus
Просмотров: 4919
 
Непрочитано 31.01.2010, 20:00
#2
Disney

Геодезист
 
Регистрация: 12.03.2009
Сибирь (где медведи по улицам ходят)
Сообщений: 860
Отправить сообщение для Disney с помощью Skype™


Малявка, если правильно понял, то как то так:
Код:
[Выделить все]
(defun c:test (/ baza _baza_ mash_vvod nabor i Y_baza otm j Y_otm)
  (if (not (wcmatch (setq baza (vl-string-subst
				 "."
				 ","
				 (CDR
				   (ASSOC 1
					  (setq	_baza_
						 (ENTGET (car (entsel "\nБазовая отметка:")))
					  )
				   )
				 )
			       )
		    )
		    "*@*"
	   )
      )
    (progn
      (setq
	mash	  (if mash
		    mash
		    1
		  )
	mash_vvod (Getint (strcat "\nКоэффициент по оси Y <"
				  (itoa mash)
				  ">: "
			  )
		  )
	mash	  (if mash_vvod
		    mash_vvod
		    mash
		  )
	nabor	  (ssget '((0 . "*text")))
	i	  -1
	Y_baza	  (caddr (assoc 10 _baza_))

      )
      (repeat (sslength nabor)
	(if (not (wcmatch
		   (setq otm
			  (vl-string-subst
			    "."
			    ","
			    (CDR
			      (ASSOC
				1
				(setq J (ENTGET (SSNAME nabor (SETQ i (1+ i)))))
			      )
			    )
			  )
		   )
		   "*@*"
		 )
	    )
	  (progn (setq Y_otm (+ (* (- (atof otm) (atof baza)) mash) Y_baza)
		       j     (subst
			       (cons 10
				     (list (cadr (assoc 10 j))
					   Y_otm
					   (caddr (cdr (assoc 10 j)))
				     )
			       )
			       (assoc 10 j)
			       j
			     )
		       j     (if (assoc 62 j)
			       (subst '(62 . 3)
				      (assoc 62 j)
				      j
			       )
			       (append j '((62 . 3)))
			     )
		 )
		 (entmod j)
		 (entupd (entlast))
	  )
	)
      )
    )
  )
)
__________________
Почему все вдруг становятся умными, когда уже не надо?
Disney вне форума  
 
Автор темы   Непрочитано 01.02.2010, 08:12
#3
Малявка


 
Регистрация: 28.02.2007
Егорьевск Моск.обл.
Сообщений: 206


Спасибо за отклик!
Первая часть макроса отрабатывает правильно. Указываю базовую отметку, например 123.45. А после приглашения: "Выберите объекты" я должна выбрать другой примитив "текст" (в виде числа), отредактировать его (например ввести число 123.55) и нажать Enter, и это число должно прыгнуть по оси Y на 0.10 (разница между базовым и отредактированным числами, при коэффициенте 1) или на 1.00 (при коэффициенте 10).
Если же следующее число будет 123.30, то оно после редактирования должно прыгнуть вниз на 0.15 (при коэффициенте 1).
Надеюсь, понятно объяснила. Большое спасибо за участие в моей проблеме.
p.s. Требуемый разрез я уже отработала ручками, но наверное, еще будут такие заморочки, поэтому слёзно прошу, не бросайте меня с наполовину рабочим макросом.

p.p.s (через полчаса): Ой, я разобралась с макросом! Работает на 100%
Просто я хотела, чтобы каждое число подпрыгивало после редактирования по отдельности, а Вы сделали, чтобы я сначала отредактировала все высотные отметки в ряду, а потом воспользовалась макросом. Такой вариант меня тоже очень устраивает! Огромное спасибо!!!

Последний раз редактировалось Малявка, 01.02.2010 в 08:37. Причина: Так блондинка же! Тупая значит! Вот и вся причина. :-)
Малявка вне форума  
 
Автор темы   Непрочитано 05.02.2010, 12:00
#4
Малявка


 
Регистрация: 28.02.2007
Егорьевск Моск.обл.
Сообщений: 206


Уважаемый Disney, а можно Вас попросить подредактировать лиспик, чтобы он работал и с примитивами "мтекст"? Если Вас не затруднит.
Спасибо.
Малявка вне форума  
 
Непрочитано 05.02.2010, 12:45
#5
Disney

Геодезист
 
Регистрация: 12.03.2009
Сибирь (где медведи по улицам ходят)
Сообщений: 860
Отправить сообщение для Disney с помощью Skype™


Малявка, да я фиг знает почему с Мтекстом не работает, по идеи должно
__________________
Почему все вдруг становятся умными, когда уже не надо?
Disney вне форума  
 
Непрочитано 05.02.2010, 14:11
#6
kp+

идущий по граблям
 
Регистрация: 26.05.2005
Сообщений: 5,189


Disney, с мтекстом лучше пользоваться vla-put-textstring
kp+ вне форума  
 
Непрочитано 05.02.2010, 15:33
#7
Disney

Геодезист
 
Регистрация: 12.03.2009
Сибирь (где медведи по улицам ходят)
Сообщений: 860
Отправить сообщение для Disney с помощью Skype™


Цитата:
Сообщение от kp+ Посмотреть сообщение
vla-put-textstring
да, не... там проблема в координатах, надо vla-put-insertionPoint
Вот,теперь работает с Мтектсом
Код:
[Выделить все]
(defun c:test (/ old_cmdecho baza _baza_ mash_vvod nabor i Y_baza otm j
	       Y_otm)
  (vl-load-com)
  (setq old_cmdecho (getvar "CMDECHO"))
  (setvar "CMDECHO" 0)
  (vl-catch-all-apply
    (function
      (lambda ()
	(if (not (wcmatch (setq	baza (vl-string-subst
				       "."
				       ","
				       (CDR
					 (ASSOC	1
						(setq _baza_
						       (ENTGET (car (entsel "\nБазовая отметка:")))
						)
					 )
				       )
				     )
			  )
			  "*@*"
		 )
	    )
	  (progn
	    (setq
	      geo_mash	(if geo_mash
			  geo_mash
			  1
			)
	      mash_vvod	(Getint	(strcat	"\nКоэффициент по оси Y <"
					(itoa geo_mash)
					">: "
				)
			)
	      geo_mash	(if mash_vvod
			  mash_vvod
			  geo_mash
			)
	      nabor	(ssget '((0 . "*text")))
	      i		-1
	      Y_baza	(caddr (assoc 10 _baza_))

	    )
	    (repeat (sslength nabor)
	      (if (not (wcmatch
			 (setq otm
				(vl-string-subst
				  "."
				  ","
				  (CDR
				    (ASSOC
				      1
				      (setq j
					     (ENTGET (setq
						       obj (SSNAME nabor (SETQ i (1+ i)))
						     )
					     )
				      )
				    )
				  )
				)
			 )
			 "*@*"
		       )
		  )
		(progn
		  (setq	Y_otm (+ (* (- (atof otm) (atof baza)) geo_mash) Y_baza)
			j
			      (if (assoc 62 j)
				(subst '(62 . 3)
				       (assoc 62 j)
				       j
				)
				(append j '((62 . 3)))
			      )
		  )
		  (entmod j)
		  (vla-put-insertionPoint
		    (vlax-ename->vla-object obj)
		    (vlax-3d-point
		      (list (cadr (assoc 10 j))
			    Y_otm
			    (caddr (cdr (assoc 10 j)))
		      )
		    )
		  )
		)
	      )
	    )
	  )
	)
      )
    )
  )
  (setvar "CMDECHO" old_cmdecho)
  (princ)
  (princ)
)
Кстати ктони-будь из продвинутых программеров, объясните пожалуйста, почему с Мтекстом не работает subst с координатами
__________________
Почему все вдруг становятся умными, когда уже не надо?

Последний раз редактировалось Disney, 05.02.2010 в 19:07.
Disney вне форума  
 
Автор темы   Непрочитано 08.02.2010, 11:30
#8
Малявка


 
Регистрация: 28.02.2007
Егорьевск Моск.обл.
Сообщений: 206


Большое спасибо!!!
Малявка вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > ЛИСП-автоматическое перемещение высотных отметок при редактировании

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сейсмозащита и сейсмоизоляция существующих, построенных зд. IANationalInformAgentstvo Прочее. Архитектура и строительство 216 20.01.2015 16:51
Мониторы LCD CRT Разное 94 17.06.2008 10:51
БРЕД СИВОЙ КОБЫЛЫ Kryaker Разное 1876 29.12.2006 23:41
При перемещение объектов в лево, они перемещаются в право popsa0904 AutoCAD 9 17.11.2006 06:13