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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Lisp и снова прошу помощи

Lisp и снова прошу помощи

Ответ
Поиск в этой теме
Непрочитано 02.12.2004, 13:44 #1
Lisp и снова прошу помощи
ilka_t
 
Москва
Регистрация: 20.01.2004
Сообщений: 154

Может у когонибудь есть или может написать

Необходимо округлинтб значения координат (с возможностью задать точность 1, 5, 10) линий, полилиний и т.д. сразу нескольких обектов
Пример

было
х у
25,3147 46,5678

Стало
х у
25 47

Заранее благодарю за помощь
Просмотров: 3287
 
Непрочитано 02.12.2004, 14:00
#2
{Smirnoff}

Инженер по системам безопасности
 
Регистрация: 23.11.2003
Рига
Сообщений: 1,099


В смысле округлить? Перерисовать с округленными координатами?

Цитата:
было
х у
25,3147 46,5678

Стало
х у
25 46
Наверное 25 47?
{Smirnoff} вне форума  
 
Непрочитано 02.12.2004, 14:09
#3
Apelsinov

Проектировщик ВК. LISP-любитель.
 
Регистрация: 15.12.2003
Москва
Сообщений: 1,190
<phrase 1=


если просто нужна целая часть, то (fix 46.5678) - возвращает 46
Apelsinov вне форума  
 
Автор темы   Непрочитано 02.12.2004, 15:49
#4
ilka_t


 
Регистрация: 20.01.2004
Москва
Сообщений: 154


>>> Fantomas
Да вы правы , ошибся я.


Нужно чтобы сами координаты выбранных линий и точек стали целыми числами.
ilka_t вне форума  
 
Непрочитано 02.12.2004, 17:56
#5
{Smirnoff}

Инженер по системам безопасности
 
Регистрация: 23.11.2003
Рига
Сообщений: 1,099


Вот пока для полилиний нарисовал, не совсем рационально но работает. На остальное сегодня времени уделить не могу. Пишите письма..
Код:
[Выделить все]
(defun c:ordfix(/
		objSet objList count curOrd ptArr ptVar
		)
  (vl-load-com)
  (princ "\n*** Select polylines ")
  (if(setq objSet(ssget '((0 . "LWPOLYLINE"))))
    (progn
      (setq objList
        (mapcar 'vlax-ename->vla-object
	 (vl-remove-if 'listp 
          (mapcar 'cadr
            (ssnamex objSet)))))
      (foreach i objList
	   (setq count 0)
	    (repeat(/(length(vlax-safearray->list
			      (vlax-variant-value
				(vla-get-coordinates i))))2)
		        (setq curOrd
		          (vlax-safearray->list
		             (vlax-variant-value
			       (vla-get-Coordinate i count))))
	      (setq ptArr(vlax-make-safearray vlax-vbDouble '(0 . 1)))
	      (vlax-safearray-put-element ptArr 0 (ord_to_int(car curOrd)))
	      (vlax-safearray-put-element ptArr 1 (ord_to_int(cadr curOrd)))
	      (setq ptVar(vlax-make-variant ptArr))
	      (vla-put-Coordinate i count ptVar)
	      (setq count(1+ count))
	      ); end repeat
	); end foreach
      (princ(strcat "\n*** Ordinates fixed for "(itoa(length objList)) " polylines. "))
      ); end progn
    (princ "\n*** Empty selection!")
    ); end if 
  (princ)
  ); end of c:ordint

(defun ord_to_int (ordinate /)
	(if(>= 0.5(- ordinate(fix ordinate)))
	  (float(fix ordinate))
	  (float(fix (+ 1.0 ordinate)))
	  ); end if
	); end of ord_to_int
{Smirnoff} вне форума  
 
Непрочитано 02.12.2004, 18:32
#6
Arkady

AutoCad Development and Support
 
Регистрация: 21.08.2003
Israel
Сообщений: 183
Отправить сообщение для Arkady с помощью Skype™


Есть глобальное решение - без лиспа.
Запускаем DXFOUT в режиме строки (переменная filedia=0).
Последний запрос крманды, в этом варианте, "количество знаков после запятой) - ставим нужное. Затем конечно DXFIN - все.
Arkady вне форума  
 
Непрочитано 02.12.2004, 21:07
#7
{Smirnoff}

Инженер по системам безопасности
 
Регистрация: 23.11.2003
Рига
Сообщений: 1,099


Дык по моему он все перисовать хотел с "округленными" кординатами, вот я и перирисовал... Остались только отрезки, и еще всякое требующее три кординаты в массиве. Извините, водку пьём...
{Smirnoff} вне форума  
 
Автор темы   Непрочитано 03.12.2004, 10:10
#8
ilka_t


 
Регистрация: 20.01.2004
Москва
Сообщений: 154


>>> Fantomas
Это то что я хотел, а нельзя ли добавить еще и просто линии?
ilka_t вне форума  
 
Непрочитано 03.12.2004, 10:39
#9
{Smirnoff}

Инженер по системам безопасности
 
Регистрация: 23.11.2003
Рига
Сообщений: 1,099


Можно, но ближе к обеду. Надо грёбанный проект бюджета на 2005 год добить...
{Smirnoff} вне форума  
 
Автор темы   Непрочитано 03.12.2004, 10:57
#10
ilka_t


 
Регистрация: 20.01.2004
Москва
Сообщений: 154


Хорошо, но если Вы заняты , то можно и на следующей недели....
Я подожду...
ilka_t вне форума  
 
Непрочитано 03.12.2004, 12:57
#11
{Smirnoff}

Инженер по системам безопасности
 
Регистрация: 23.11.2003
Рига
Сообщений: 1,099


Ну вот минутка появилась, добавил линии:
Код:
[Выделить все]
(defun c:ordapr(/
		objSet objList count curOrd ptArr ptVar curStart curEnd
		)
  (vl-load-com)
  (princ "\n*** Select lines and polylines ")
  (if(setq objSet(ssget '((-4 . "<OR")(0 . "LINE")(0 . "LWPOLYLINE")(-4 . "OR>"))))
    (progn
      (setq objList
        (mapcar 'vlax-ename->vla-object
	 (vl-remove-if 'listp 
          (mapcar 'cadr
            (ssnamex objSet)))))
      (foreach i objList
	(if(= "AcDbPolyline"(vla-get-ObjectName i))
	  (progn
	   (setq count 0)
	    (repeat(/(length(vlax-safearray->list
			      (vlax-variant-value
				(vla-get-coordinates i))))2)
		        (setq curOrd
		          (vlax-safearray->list
		             (vlax-variant-value
			       (vla-get-Coordinate i count))))
	      (setq ptArr(vlax-make-safearray vlax-vbDouble '(0 . 1)))
	      (vlax-safearray-put-element ptArr 0 (ord_to_int(car curOrd)))
	      (vlax-safearray-put-element ptArr 1 (ord_to_int(cadr curOrd)))
	      (setq ptVar(vlax-make-variant ptArr))
	      (vla-put-Coordinate i count ptVar)
	      (setq count(1+ count))
	      ); end repeat
	   ); end progn
	  (progn
	    (setq curStart(vlax-safearray->list
		             (vlax-variant-value
			       (vla-get-StartPoint i)))
		  curEnd(vlax-safearray->list
		          (vlax-variant-value
			    (vla-get-EndPoint i)))
		  ); end setq
	    (vla-put-StartPoint i(vlax-3D-Point
				   (list
				     (ord_to_int(car curStart))
				     (ord_to_int(cadr curStart))
				     (ord_to_int(nth 2 curStart))
				       ))) ; end vla-put-*
	    (vla-put-EndPoint i(vlax-3D-Point
				   (list
				     (ord_to_int(car curEnd))
				     (ord_to_int(cadr curEnd))
				     (ord_to_int(nth 2 curEnd))
				       )))  ; end vla-put-*
	    ); end progn
	  ); end if
	); end foreach
      (princ(strcat "\n*** Ordinates approximated for "(itoa(length objList)) " lines and polylines. "))
      ); end progn
    (princ "\n*** Empty selection!")
    ); end if 
  (princ)
  ); end of c:ordint

(defun ord_to_int (ordinate /)
	(if(>= 0.5(- ordinate(fix ordinate)))
	  (float(fix ordinate))
	  (float(fix (+ 1.0 ordinate)))
	  ); end if
	); end of ord_to_int
{Smirnoff} вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Lisp и снова прошу помощи

Размещение рекламы