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

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

проставления размеров на ARC

Ответ
Поиск в этой теме
Непрочитано 04.08.2004, 08:01 #1
проставления размеров на ARC
Startrek
 
AutoCAD/AutoLISP
 
Seattle/USA
Регистрация: 27.08.2003
Сообщений: 1,133

Уважаемые коллеги,
Соорудил простенькую програмку для проставления размеров на ARC - емулирует ассоциативное
образмеривание,применяю FIELD. Все работает - проблемка, приходится дважды кликать по дуге (arc)
подсобите как это обойти, а то я vlisp не очень-то.... апросто лиспом не обойтись
Код:
[Выделить все]
(defun c:arcdim()
(vl-load-com) 
(setq cm (getvar "cmdecho"))
(setvar"cmdecho" 0)
(setq fd (getvar "fielddisplay"))
(setvar"fielddisplay" 0)
(setq tab(vlax-ename->vla-object(car(entsel"\nSelect an Arc: ")))) 

(SETQ OBA (vla-get-objectid tab)) 
(setq lin (strcat "%<\\AcObjProp Object(%<\\_ObjId " (rtos oba 2 0) ">%).ArcLength \\f \"%.30q0\">%"))
(command"dimangular" pause "t" lin pause);;как первую pause избежать а....
(setvar"fielddisplay" fd)
(setvar "cmdecho" cm)
(princ)
)
Просмотров: 3815
 
Непрочитано 04.08.2004, 10:41
#2
AY


 
Сообщений: n/a


Действительно какая-то шняга. Команда не
принимает имя примитива или набор???
(если я не торможу)

Зато принимает точку.

Проходит такая конструкция:

Код:
[Выделить все]
(setq aa (getpoint "даеш точку"))
(command "dimangular"  aa pause )
 
 
Непрочитано 04.08.2004, 10:44
#3
AY


 
Сообщений: n/a


Если точнее
Код:
[Выделить все]
(setq aa (cadr(entsel"\nSelect an Arc: ")))
(command "dimangular"  aa pause )
 
 
Автор темы   Непрочитано 04.08.2004, 16:57
#4
Startrek

AutoCAD/AutoLISP
 
Регистрация: 27.08.2003
Seattle/USA
Сообщений: 1,133


К сожалению это не меняет дела - всеравно - два щелчка по дуге,
Пробовал, прежде чем спрашивать, увы дело глубже. :shock:

Подкиньте идею нуууу очень надо :roll: :roll: :roll:
Startrek вне форума  
 
Непрочитано 04.08.2004, 17:31
#5


 
Сообщений: n/a


Может я торможу но у меня вроде получается
правда точно проверить не могу нет ссобой 2005-го



Код:
[Выделить все]
(defun c:arcdim ()
    (vl-load-com)

    (setq a (entsel "\nSelect an Arc: ")
          b (cadr a)
          c (car a)
     ) ;_ end of setq
    (setq tab (vlax-ename->vla-object c)
          oba (vla-get-objectid tab)
          d   (strcat "%<\\AcObjProp Object(%<\\_ObjId "
                      (rtos oba 2 0)
                      ">%).ArcLength \\f \"%.30q0\">%")
    ) ;_ end of SETQ
    (command "dimangular" a "t" d pause)
) ;_ end of defun
 
 
Непрочитано 04.08.2004, 17:32
#6
AY


 
Сообщений: n/a


Проверю когда домой приду
 
 
Непрочитано 04.08.2004, 17:43
#7
kos

LISP-программист
 
Регистрация: 25.08.2003
Тутэйшы
Сообщений: 238


Startrek, мне кажется (нет, это мое глубокое убеждение!) что не нужно использовать в программах
Код:
Лучше в программе определиться с параметрами примитива, который вы хотите создать (DimAngular в данном случае) и затем создать его при помощи метода
Код:
[Выделить все]
(vla-addDimAngular ...)
Подробнее о методе в файле acadauto.chm.

ЗЫ: к сожалению не могу проверить код, не установлен 2005...
__________________
Там все есть для счастья - меня там только нет.
Так это значит, что я там - буду!
kos вне форума  
 
Автор темы   Непрочитано 04.08.2004, 18:25
#8
Startrek

AutoCAD/AutoLISP
 
Регистрация: 27.08.2003
Seattle/USA
Сообщений: 1,133


>>kos
Огромное спасибо получилось.
Я делал что-то похожее да наошибался с "прописанием" не заметил и бросился в другом направлении...... Я по старинке пишу все в NOTEPAD (каааашмар как примитивно - привычка)
вот и не углядел (написал entcel вместо entsel в самом начале)ГРРРРРРР.
а насчет того что лучше не пользоваться command - согласен, ето у меня тоже пережитки,
в AutoLISP это быстрее, а на програмирование дают мне нууу очень мало времени, компания наша большая и очень НЕ ГИБКАЯ.
Еще раз спасибо
Startrek вне форума  
 
Автор темы   Непрочитано 04.08.2004, 20:15
#9
Startrek

AutoCAD/AutoLISP
 
Регистрация: 27.08.2003
Seattle/USA
Сообщений: 1,133


Ну бот что получилось, kos еще раз спасибо.
Я этаааа...из устарелой школы посему немного подругому програмки рисую

Код:
[Выделить все]
(defun c:adim (/ cm fd ar1 ar2 ar3 tab oba	) 
(vl-load-com) 

  (setq cm (getvar "cmdecho")) 
  (setvar"cmdecho" 0) 
  (setq fd (getvar "fielddisplay")) 
  (if (/= fd 0)(setvar"fielddisplay" 0)) 

    (setq ar1 (entsel "\nSelect an Arc: ")) 
    (setq ar2 (car ar1)) 
    (setq tab (vlax-ename->vla-object ar2))
    (setq oba (vla-get-objectid tab)) 
    (setq ar3 (strcat "%<\\AcObjProp Object(%<\\_ObjId " 
                      (rtos oba 2 0) 
                      ">%).ArcLength \\f \"%.30q0\">%"))
    (command "dimangular" ar1 "t" ar3 pause) 

  (setvar"fielddisplay" fd) 
  (setvar "cmdecho" cm) 	

(princ)
)
Startrek вне форума  
 
Непрочитано 05.08.2004, 07:40
#10


 
Сообщений: n/a


Почему у меня в 2002 не работает, вместо значения длины дуги выдает строку:
Код:
[Выделить все]
%<cObjProp Object(%<\_ObjId 1087132688>%).ArcLength ;
Подскажите в чем причина
 
 
Непрочитано 05.08.2004, 09:05
#11
AY


 
Сообщений: n/a


Фишка для 2005
 
 
Непрочитано 05.08.2004, 09:15
#12
kos

LISP-программист
 
Регистрация: 25.08.2003
Тутэйшы
Сообщений: 238


Цитата:
Сообщение от Anonymous
Почему у меня в 2002 не работает, вместо значения длины дуги выдает строку:
Код:
[Выделить все]
%<cObjProp Object(%<\_ObjId 1087132688>%).ArcLength ;
Подскажите в чем причина
Потому что понятие "поле" (field), которое использует Startrek в своей функции появилось только в AutoCAD 2005.
__________________
Там все есть для счастья - меня там только нет.
Так это значит, что я там - буду!
kos вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > проставления размеров на ARC