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

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

Программное создание размерных стилей

Ответ
Поиск в этой теме
Непрочитано 12.09.2005, 09:04 #1
Программное создание размерных стилей
Кулик Алексей aka kpblc
Moderator
 
LISP, C# (ACAD 200[9,12,13,14])
 
С.-Петербург
Регистрация: 25.08.2003
Сообщений: 39,831

Есть небольшая проблема: надо сделать размерный стиль, и внутри него дополнительные определения для размерных стилей на угловые размеры, радиусы и т.п. Через (tblobjname) получены списки настроек, имена, но сделать повторно через (entmake) - естественно, на новом файле, только имя стиля менял,- не получается - возвращается nil.
Я понимаю, что есть некоторые значения dxf-кодов, которые являются обязательными. Какие обязательные, какие нет, мне вычислить не удалось. Поэтому собственно вопрос(ы) - даю несколько, чтобы и мне было понятно, и сразу на ошибки указали:
1. Для задания кодов 5, 6 и 7 (соответствуют dimblk, dimblk1, dimblk2) требуется имя блока - как его получать / задавать? через tblobjname или assoc? Или проще сделать через (setvar)?
2. Для кодов 340, 341 (соответственно dimtxtsty, dimldrblk) требуются уже хэндлы блоков - а к ним как обращаться?
3. Для кодов 371, 372 (соответственно dimlwd, dimlwe) требуются lineweight enum value - а это что за чудо? Для значения "ByLayer" чего надо назначать? А для "ByBlock", 0.25 etc?
---
Идти через (setvar) в данном варианте у меня что-то не получается, подозреваю, что надо использовать ActiveX-функции, но там я как свинья в ананасах, хоть скажите, в какую сторону копать.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Просмотров: 27437
 
Непрочитано 12.09.2005, 11:21
#2
Лентяй

Project Engineer
 
Регистрация: 05.01.2005
Лос Анджелес
Сообщений: 1,392


Цитата:
kpblc: надо использовать ActiveX-функции, но там я как свинья в ананасах, хоть скажите, в какую сторону копать.
Во- перывых, не "в ананасах", а в апельсинах. Классику непозволительно искажать никому, даже гурам. Во-вторых, не надо прибндняться - LISP-ом вы занялись с полгода и уже сделали заметные успехи. Одолеете и ActiveX. А для начала загляните в "The Visual LISP Developer Bible" bt David Stein. Здесь когда-то приводили ссылку, но если надо, я могу кинуть ZIP на емелю.
Лентяй вне форума  
 
Автор темы   Непрочитано 12.09.2005, 11:29
#3
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,831


Ну дело в том, что есть человек с ником Apelsinov, весьма сильно мною уважаемый, не хочу даже косвенно его обижать или давать повод.
За похвалу спасибо - Доброе слово и ламеру приятно (с) Лукьяненко, "Фальшивые зеркала".
Zip, если можно, то да, с большим удовольствием. Сколько оно весит? Просто yandex не принимает больше 10 метров за раз, т.е. паковка должна быть где-то по 7-7,5 метров, не больше.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 12.09.2005, 12:04
#4
Лентяй

Project Engineer
 
Регистрация: 05.01.2005
Лос Анджелес
Сообщений: 1,392


Хорошая новость - мыло уже отслал, всего 800К.
Плохая нововсть - нет, пусть уж AutoDesk скажет сам: "Dimensions created via the AutoCAD user interface are created with the active dimension style plus all document overrides. Dimensions created via ActiveX are created with the active dimension style only. To have the dimensions created via ActiveX take on the document overrides, use the CopyFrom method to copy the dimension style from the document to the active dimension style." Так что сохдавайте парный спиок с DXF кодами, согласно DXF Reference->Tables->DIMSTYLES, типа такого
Код:
[Выделить все]
((0 . "DIMSTYLE") (2 . "Standard") (70 . 0) (3 . "") (4 . "") (5 . "") (6 . "") (7 . "") (40 . 0.0) (41 . 0.0625) (42 . 0.03125) (43 . 0.38) (44 . 0.03125) (45 . 0.0) (46 . 0.0) (47 . 0.0) (48 . 0.0) (140 . 0.09375) (141 . 0.09) (142 . 0.0) (143 . 25.4) (144 . 1.0) (145 . 0.0) (146 . 1.0) (147 . 0.0625) (71 . 0) (72 . 0) (73 . 0) (74 . 0) (75 . 0) (76 . 0) (77 . 1) (78 . 1) (170 . 0) (171 . 2) (172 . 1) (173 . 0) (174 . 0) (175 . 0) (176 . 256) (177 . 256) (178 . 256) (270 . 2) (271 . 3) (272 . 3) (273 . 2) (274 . 2) (340 . <Entity name: 7ef88c88>) (275 . 0) (280 . 0) (281 . 0) (282 . 0) (283 . 1) (284 . 0) (285 . 0) (286 . 0) (287 . 3) (288 . 0))
затем ENTMAKE, и да сопутствует вам удача. Аминь.
Лентяй вне форума  
 
Автор темы   Непрочитано 12.09.2005, 12:16
#5
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,831


Опять-таки немного новостей:
хорошая - письмо получил, но пока просмотреть не успел.
отвратительная - список создан, но (entmake) для него возвращает nil. Соответственно, ничего не делается. Чтобы не быть голословным:
Код:
[Выделить все]
(list
'(0 . "DIMSTYLE") '(2 . "SPDS")  '(70 . 0)	  '(3 . "")   '(4 . "")	  '(5 . "")
'(6 . "")	 '(7 . "")   '(41 . 2.5) '(42 . 0.625)	'(43 . 3.75)   '(44 . 1.25)
'(45 . 0.5) '(46 . 0.0) '(47 . 0.0) '(48 . 0.0) '(140 . 2.5)   '(141 . -2.5)
'(142 . 0.0)   '(144 . 1.0)   '(145 . 0.0)	  '(146 . 1.0)	 '(147 . 0.625)	'(71 . 0)
'(72 . 0)	 '(73 . 0)   '(74 . 1)	 '(75 . 0)   '(76 . 0)	 '(77 . 1)   '(78 . 8)
'(170 . 0)	 '(171 . 3)  '(172 . 1)	 '(173 . 0)  '(174 . 0)	 '(175 . 0)  '(176 . 0)
'(177 . 0)	 '(178 . 0)  '(270 . 2)	 '(271 . 0)  '(272 . 0)	 '(273 . 2)  '(274 . 3)
'(275 . 1)	 '(280 . 0)  '(281 . 0)	 '(282 . 0)  '(283 . 0)	 '(284 . 8)  '(285 . 0)
'(286 . 0)	 '(287 . 4)  '(288 . 0)
) ;_ end of list
(entmake) применяется на этот список. Чего ему не нравится, понять не могу
При этом на самом деле в группе 5 мне надо использовать "_Archtick", но это ладно, можно временно и (setvar) применить, и заменить
Код:
на
Код:
[Выделить все]
'(5 . (tblobjname "block" "_archtick"))
Кстати, непонятно, последняя строка правильно сделана или нет.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 12.09.2005, 20:06
#6
Лентяй

Project Engineer
 
Регистрация: 05.01.2005
Лос Анджелес
Сообщений: 1,392


Не знаю, как в более ранних версиях, но в 2005 группы 5, 6. 7б 270 и 287 не используются (obsolete), потому, как я понимаю, ими пользоваться не следует. Ссылки на блок стрелки делаются группами 340, 341 и 342, соответственно "handle of referenced BLOCK, BLOCK1, BLOCK2" и переменные DIMBLK, DIMBLK1, DIMBLK2. Может, следует вытаскивать соотв. ссылку из коллекции_блоков/tblsearch "block" и потом как-то пердвать вновь создаваемому списку? И еще, если есть чертеж-прототип, не проще ли перенести стиль путем CopyFrom.Object?
Лентяй вне форума  
 
Автор темы   Непрочитано 13.09.2005, 08:35
#7
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,831


Да все дело в том, что такая операция будет выполняться, скорее всего, миллионы раз, так что вариант copyfrom немного не катит. Мне тут подсказали попробовать применять dxf-список, полученный через (entget (tblobjname "dimstyle" "dimenstion_style_name")), сейчас ковыряю в этом направлении.
Кстати, за книгу огромное человеческое спасибо, вчера распечатал, до 2 ночи не спал - читал. Может, ее сюда закинуть, поскольку она и на afralisp'e тоже есть вроде как в свободном скачивании?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 13.09.2005, 09:08
#8
Лентяй

Project Engineer
 
Регистрация: 05.01.2005
Лос Анджелес
Сообщений: 1,392


Цитата:
kpblc: Может, ее сюда закинуть, поскольку она и на afralisp'e тоже есть вроде как в свободном скачивании?
А где же я ее, по-вашему. взял? Натюрлих, туточки, из какого-нить, ну о-о-о-очень давнишнего dwl-а.
Лентяй вне форума  
 
Автор темы   Непрочитано 13.09.2005, 09:11
#9
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,831


Упс... Все равно thanks огромаднейший.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 13.09.2005, 10:58
#10
Лентяй

Project Engineer
 
Регистрация: 05.01.2005
Лос Анджелес
Сообщений: 1,392


Ничуть не меньший наш вам Welcome!
Лентяй вне форума  
 
Непрочитано 14.09.2005, 12:00
#11
Alaspher


 
Регистрация: 11.10.2004
e•burg
Сообщений: 755


Может через ActiveX попробовать. Примерно, так:
Код:
[Выделить все]
(defun demo (OSt NSt / dss name new nn pat stl suf)
  (if (= (strcase OSt) (strcase NSt))
    (princ "\nNew style can't be named the same as old style!")
    (progn
      (setq pat (strcat (strcase OSt) "," (strcase OSt) "$#")
            dss (vla-get-DimStyles (vla-get-ActiveDocument (vlax-get-acad-object)))
      )
      (vlax-for i dss
        (if (wcmatch (strcase (setq name (vla-get-name i))) pat)
          (setq stl (cons (list name i) stl))
        )
      )
      (if (setq stl (vl-sort stl (function (lambda (a b) (< (car a) (car b))))))
        (progn
          (setq suf (1+ (strlen OSt)))
          (foreach i stl
            (setq nn (strcat NSt (substr (car i) suf)))
            (if (vl-catch-all-error-p
                  (setq new (vl-catch-all-apply (function vla-Add) (list dss nn)))
                )
              (princ (strcat "\nCan't create new style: '" nn "'"))
              (vla-CopyFrom new (cadr i))
            )
          )
        )
        (princ (strcat "\nCan't find old style: '" OSt "'"))
      )
    )
  )
  (princ)
)

(demo "OldStyle" "NewStyle")
Серьёзно не проверял, но, вроде бы - должно работать.
Alaspher вне форума  
 
Непрочитано 15.09.2005, 11:12
#12
Лентяй

Project Engineer
 
Регистрация: 05.01.2005
Лос Анджелес
Сообщений: 1,392


Я так понял, что kpblc создает новый размерный стиль в документе, где этого стиля раньше не было. Ваша же программа создает в пределах одного и того же документа новый стиль, содержащий те же установки, что и старый. Сорри. но это не от той стенки гвоздь.
Лентяй вне форума  
 
Автор темы   Непрочитано 16.09.2005, 08:52
#13
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,831


Всем откликнувшимся - огромное человеческое спасибо. Лентяю - отдельный земной поклон за книгу. Alaspher - за иллюстрации. Проблема решена. Если интересно, код:
Код:
[Выделить все]
;|=============================================================================
*    Функция создания размерного стиля. Используется вариант (setvar) и
* (vl-cmdf)
*    Параметры вызова:
*	нет
*    Примеры вызова:
(_kpblc-create-dimstyle)
=============================================================================|;
(defun _kpblc-create-dimstyle (/ ent_list exist_style arrow_block active_dimstyle)

  ;; Локальные функции
  (defun _kpblc-create-sub-dimstyle (style-number / ent_list ent_name)
    (setq ent_name (if style-number
		     (strcat "SPDS$" (itoa style-number))
		     "SPDS"
		     ) ;_ end of if
	  ent_list
		   (list
		     (cons 0 "DIMSTYLE") ;		@R@
		     (cons 100 "AcDbSymbolTableRecord") ;		@R@
		     (cons 100 "AcDbDimStyleTableRecord") ;		@R@
		     (cons 2 ent_name)	;dimsty		@R@
		     (cons 70
			   (if (not style-number)
			     0
			     style-number
			     ) ;_ end of if
			   )		; @R@
		     (cons 40 (getvar "dimscale")) ;dimscale	@R@
		     (cons 41 2.5)	;dimsz		@R@
		     (cons 42 0.625)	;dimexo		@R@
		     (cons 43 3.75)	;dimdli		@R@
		     (cons 44 1.25)	;dimexe		@R@
		     (cons 45 0.5)	;dimrnd		@R@
		     (cons 46 0.0)	;dimdle		@R@
		     ;; группы 47 (dimtp) и 48 (dimtm) не используются - отключена
		     ;; dimtol
		     ;; и
		     ;; dimlim
		     (cons 140 2.5)	;dimtxt		@R@
		     (cons 141 -2.5)	;dimcen		@R@
		     (cons 143 0.005)	;dimaltf	@R@
		     (cons 144 1)	;dimlfac
		     (cons 145 0)	;dimtvp
		     (cons 147 0.5)	;dimgap		@R@
		     ;; группа 146 (dimtfac) не используется и не изменяется - отключены
		     ;; альтернативные единицы
		     (cons 72 0)	;dimlim
		     ;; Дополнительно, для гарантии, отключаем dimlim
		     (cons 73 0)	;dimtih		@R@
		     (cons 74 0)	;dimtoh		@R@
		     (cons 77 1)	;dimtad		@R@
		     (cons 78 8)	;dimzin		@R@
		     (cons 79 2)	;dimazin	@R@
		     ;; группа 71 (dimtol) - нет альтернативных единиц
		     (cons 170 0)	;dimalt
		     (cons 172 1)	;dimtofl	@R@
		     (cons 173 0)	;dimsah		@R@
		     (cons 174 0)	;dimtix
		     (cons 175 1)	;dimsoxd
		     (cons 176 0)	;dimclrd
		     (cons 177 0)	;dimclre
		     (cons 178 0)	;dimclrt
		     (cons 179 1)	;dimadec
		     ;; группа 171 (dimaltd) не используется - нет альтернативных единиц
		     (cons 271 0)	;dimdec		@R@
		     (cons 272 0)	;dimtdec	@R@
		     (cons 275 1)	;dimaunit
		     (cons 277 2)	;dimlunit
		     (cons 278 44)	;dimdsep	@R@
		     (cons 279		;dimtmove
			   (cond
			     ((not style-number) 0)
			     ((= style-number 0) 1)
			     ((= style-number 1) 1)
			     (t 1)
			     ) ;_ end of cond
			   ) ;_ end of cons
		     (cons 280 0)	;dimjust
		     (cons 281 0)	;dimsd1
		     (cons 282 0)	;dimsd2
		     (cons 283 0)	;dimtolj
		     (cons 284 8)	;dimtzin
		     ;; группа 270 не используется - устарело. Вместо этого используется
		     ;; назначение dimlunit и dimfrac
		     ;; группа 287 (dimfit) не используется - устар. Вместо этого
		     ;; используются
		     ;; dimaltfit и dimtmove
		     (cons 288 0)	;dimupt
		     ;; группы 273 (dimaltu), 274 (dimalttd), 285 (dimaltz), 286
		     ;; (dimalttz)
		     ;; не используются - нет альтернативных единиц
		     ;; группа 276 (dimfrac) не устанавливается
		     (cons 340 (tblobjname "style" "SPDS")) ;dimtxtsty	@R@
		     (cons 371 -2)	;dimlwd
		     (cons 372 -2)	;dimlwe
		     ) ;_ end of list
	  ) ;_ end of setq
    (if	(member style-number '(nil 0 1))
      (progn
	(setq ent_list
	       (reverse
		 (cons
		   (cons 342
			 (cdr
			   (assoc 330
				  (entget
				    (tblobjname "block" "_archtick")
				    ) ;_ end of entget
				  ) ;_ end of assoc
			   ) ;_ end of cdr
			 )		;dimblk		@R@
		   (reverse ent_list)
		   ) ;_ end of cons
		 ) ;_ end of reverse
	      ) ;_ end of setq
	(setq ent_list
	       (reverse
		 (cons
		   (cons 343
			 (cdr
			   (assoc 330
				  (entget
				    (tblobjname "block" "_archtick")
				    ) ;_ end of entget
				  ) ;_ end of assoc
			   ) ;_ end of cdr
			 )		;dimblk1
		   (reverse ent_list)
		   ) ;_ end of cons
		 ) ;_ end of reverse
	      ) ;_ end of setq
	(setq ent_list
	       (reverse
		 (cons
		   (cons 344
			 (cdr
			   (assoc 330
				  (entget
				    (tblobjname "block" "_archtick")
				    ) ;_ end of entget
				  ) ;_ end of assoc
			   ) ;_ end of cdr
			 )		;dimblk2
		   (reverse ent_list)
		   ) ;_ end of cons
		 ) ;_ end of reverse
	      ) ;_ end of setq
	) ;_ end of setq
      ) ;_ end of if
    (if	(setq exist_style (tblobjname "dimstyle" ent_name))
      (foreach item ent_list
	(_kpblc-ent-modify exist_style (car item) (cdr item))
	) ;_ end of foreach
      (entmake ent_list)
      ) ;_ end of if

    ) ;_ end of defun
  ;; Конец локальных функций

  (_kpblc-create-textstyle)
  (if (not (tblsearch "block" "_archtick"))
    (progn
      (setq _dimblk_ (getvar "dimblk"))
      (setvar "dimblk" "_archtick")
      (if (= _dimblk_ "")
	(setvar "dimblk" ".")
	(setvar "dimblk" _dimblk_)
	) ;_ end of if
      ) ;_ end of progn
    ) ;_ end of if

  (_kpblc-echo t)

  (foreach item	(list nil 0 2 3 4 7)
    (_kpblc-create-sub-dimstyle item)
    ) ;_ end of foreach

  (if (not *kpblc-activedoc*)
    (setq *kpblc-activedoc* (vla-get-activedocument (vlax-get-acad-object)))
    ) ;_ end of if
  (if (tblobjname "dimstyle" "SPDS")
    (progn
      (setq active_dimstyle (vlax-ename->vla-object (tblobjname "dimstyle" "SPDS")))
      (vlax-put-property *kpblc-activedoc* "ActiveDimStyle" active_dimstyle)
      ) ;_ end of progn
    (vl-cmdf "_.-dimstyle" "_Save" "SPDS")
    ) ;_ end of if
  (_kpblc-echo nil)

  (princ)
  ) ;_ end of defun

;|=======================================================================================
*    Функция снятия / показа командного эха. В процессе работы используются глобальные
* переменные *kpblc-cmdecho* и *kpblc-nomutt*. Если они nil, то в них считываются значения
* cmdecho и nomutt. Если они не nil, то устанавливаются записанные в них значения.
*    Параметры вызова:
*	setecho	- установить или возвратить обратно эхо. nil -> установить эхо; t -> снять
*    Примеры вызова:
(_kpblc-echo t)		; снять эхо команд
(_kpblc-echo nil)		; установить это команд
=======================================================================================|;
(defun _kpblc-echo (setecho)
  (if setecho
    (mapcar
      'setvar
      (list "cmdecho" "nomutt")
      (list 0 1)
      ) ;_ end of mapcar
    (mapcar
      'setvar
      (list "cmdecho" "nomutt")
      (list 1 0)
      ) ;_ end of mapcar
    ) ;_ end of if
  (princ)
  ) ;_defun

;|=======================================================================================
*    Функция создает текстовый стиль. Создание идет через (entmake).
*    Созданный стиль делается активным
*    Параметры вызова:
*	нет
*    Примеры вызова:
(_kpblc-create-textstyle)
=======================================================================================|;
(defun _kpblc-create-textstyle (/ ent_list font_filename exist_style)
  (if (findfile "spds.shx")
    (setq font_filename (strcat (vl-filename-base (findfile "spds.shx")) ".shx"))
    (setq font_filename (strcat (vl-filename-base (findfile "simplex.shx")) ".shx"))
    ) ;_ end of if
  (setq	ent_list
	 (list
	   '(0 . "STYLE")
	   '(100 . "AcDbSymbolTableRecord")
	   '(100 . "AcDbTextStyleTableRecord")
	   '(2 . "SPDS")		; text style name
	   '(70 . 0)			;
	   '(40 . 0.0)			; text height
	   '(41 . 0.8)			; width factor
	   '(50 . 0.0)			; oblique angle
	   '(71 . 0)			; not backwatf, not upside down
	   '(42 . 2.5)			; last height used
	   (cons 3 font_filename)	; primary font file name
	   '(4 . "")			; big font file name
	   ) ;_ end of list
	) ;_ end of setq
					;(entmake ent_list)
  (if (setq exist_style (tblobjname "style" "SPDS"))
    ;; Стиль есть, возвращаем стандартный вид
    (foreach item ent_list
      (_kpblc-ent-modify exist_style (car item) (cdr item))
      ) ;_ end of foreach
    ;; Стиля нет, делаем его и нормализуем все примитивы
    (entmake ent_list)
    ) ;_ end of if
  (setvar "textstyle" "SPDS")
					;(princ)
  ) ;_ end of defun

;|=======================================================================================
*    Функция модификации указанного бита примитива
*    Параметры вызова:
*	entity	- примитив, полученный через (entsel), (entlast) etc
*	bit	- dxf-код, значение которого надо установить
*	value	- новое значение
*    Примеры вызова:
(_kpblc-ent-modify (entlast) 8 "0")	; перенести последний примитив на слой 0
(_kpblc-ent-modify (entsel) 62 10)	; установить выбранному примитиву цвет 10
*    Возвращаемое значение:
*	примитив с модифицированным dxf-списком. Примитив автоматически перерисовывается.
=======================================================================================|;
(defun _kpblc-ent-modify (ent bit value / ent_list old_dxf new_dxf)
  (if (not
	(and
	  (or
	    (= (cdr (assoc 0 (entget ent))) "STYLE")
	    (= (cdr (assoc 0 (entget ent))) "DIMSTYLE")
	    ) ;_ end of or
	  (= bit 100)
	  ) ;_ end of and
	) ;_ end of not
    (progn
      (setq ent_list (entget ent)
	    new_dxf  (cons bit
			   (if (and (= bit 62) (= (type value) 'str))
			     (if (= (strcase value) "BYLAYER")
			       256
			       0
			       ) ;_ end of if
			     value
			     ) ;_ end of if
			   ) ;_ end of cons
	    ) ;_ end of setq
      (if (not (equal new_dxf (setq old_dxf (assoc bit ent_list))))
	(progn (entmod (if old_dxf
			 (subst new_dxf old_dxf ent_list)
			 (append ent_list (list new_dxf))
			 ) ;_ end of if
		       ) ;_ end of entmod
	       (entupd ent)
	       (redraw ent)
	       ) ;_ end of progn
	) ;_ end of if
      ) ;_ end of progn
    ) ;_ end of if
  ent
  ) ;_ end of defun
В коде используется немного переработанная функция из ruCAD (ru-ent-mod) для обработки записей таблиц STYLE и DIMSTYLE. Мало ли, может, кому и пригодится...
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 16.09.2005, 09:37
#14
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,381


А вот теперь, когда задача решена, может быть подумать - а нужно ли вообще программное создание стиля?

Стиль - именованная совокупность набора значений системных переменных, устанавливающаяся при выборе стиля. Если оформлять размеры по-разному, использовать стиль в голом Автокаде удобно. Но если дошли до программирования, то цель, возможно, обеспечить единообразие - то есть оформление размеров по единому стандарту. Для этого стиль не нужен - можно просто устанавливать требуемые значения, чтобы в текущем состоянии размеры изображались "как надо".

Это будет гораздо нагляднее маловразумительных DXF-кодов. "Любимые" значения можно вообще в файле держать, даже списком. Это позволит не менять программу, если встретишь другую любовь.

Эт так, в порядке возможного варианта.
ShaggyDoc вне форума  
 
Автор темы   Непрочитано 16.09.2005, 09:59
#15
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,831


> ShaggyDoc : Да пробовал я так, пробовал. Не фонтан, если честно - постоянно работать с системными переменными - достаточно медленно, дополнительно надо отслеживать, какой размер проставляется... В общем, либо у меня руки кривые, либо мне лень. Скорее всего, и то, и другое. В общем, мне показалось это более приемлемым вариантом. Кстати, там в комментариях на каждый dxf-код соответствующая ему системная переменная забита - это к вопросу о маловразумительности.
Ладно, если не интересно, то и бог с ним, оставим тему в покое, она сама и умрет.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 16.09.2005, 13:13
#16
Alan

CAD
 
Регистрация: 28.08.2003
Киев
Сообщений: 1,835
<phrase 1=


>ShaggyDoc
Мне очень понравилось решение kpblc. Я тоже употребляю размерные стили, хранящиеся в прототипе. Для единообразия (архитектурно-строительное проектирование) использую целых два стиля: с выносными линиями и без. Переключение между стилями осуществляется выбором кнопки (пользовательской) проставления размера: с выносными линиями или без оных. Но в случае его (прототипа) очистки, неиспользуемые стили уходят. Безвозвратно! В этом случае программное задание стиля (после проверки на его наличие) выручает.
Так я и делал, но попроще (по-инженерному), текст же kpblc учел кажется все варианты.
Alan вне форума  
 
Автор темы   Непрочитано 16.09.2005, 13:24
#17
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,831


> Alan : можно и не проверять, а просто повторно вызывать - override-стиль не создается, все настройки переходят на "стандартные", которые заданы в dxf-списке. Если чего-то там не нравится в этих настройках, исправить, по-моему, 5 минут.
Несколько замечаний:
1. Группу 70 не трогать - она вкупе с именем (группа 2) определяет область применения стиля.
2. Устаревшие группы не использовать - ибо нефиг
3. Для группы 340 предварительно надо сделать текстовый стиль
4. Для групп 342, 343, 344 при условии использования закрашенной стрелки придется извращаться - т.к. при создании нового стиля эти настройки по умолчанию берутся с текущего. Соответственно приходится туда каким-то манером вколачивать dimblk = "", что через (tblobjname) провернуть нереально.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 16.09.2005, 14:13
#18
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,381


Программа-то мне тоже понравилась.

А вот насчет разных стилей в одном проекте - сомнение. Особенно "архитектурных".

Допустим, размеры проставлены "архитектурно", без выносок. Так можно где-нибудь на чисто "архитектурных" чертежах. Но далее эта же подоснова попадет к строителям, смежникам. А там такие вольности уже не пойдут. Часть будет одним стилем, часть другим.

Плюс еще другие "архитектурные" особенности (недовводы, непараллельность стен осям, "красивые" до ужаса шрифты и т.п.) - общий вид ужасный. Да еще любовь к расчленению размеров (ij, как я нарисовал, на века), когда переопределение стиля не спасет.

PS. К качеству программы, над которой kpblc хорошо потрудился это не имеет отношения.

PPS. Втягивание в дискуссию не о программе исключительно с провокационной целью.
ShaggyDoc вне форума  
 
Непрочитано 16.09.2005, 14:39
#19
Alan

CAD
 
Регистрация: 28.08.2003
Киев
Сообщений: 1,835
<phrase 1=


>ShaggyDoc
Цитата:
А вот насчет разных стилей в одном проекте - сомнение. Особенно "архитектурных". Допустим, размеры проставлены "архитектурно", без выносок....
Применение ДВУХ (с выносками и без) стилей в одном проекте не противоречит ГОСТ 21.501-93 "Правило выполнения арх.-стр. чертежей".
ИМХО, надо дать проектировщику возможность выбора сообразно конкретному случаю.

Цитата:
Плюс еще другие "архитектурные" особенности (недовводы, непараллельность стен осям, "красивые" до ужаса шрифты и т.п.) - общий вид ужасный. Да еще любовь к расчленению размеров (ij, как я нарисовал, на века), когда переопределение стиля не спасет.
Всё это надо стандартизировать в СТП. Тут мы кажется с kpblc пришли к консенсусу, писал свой под себя по его образцу.
А за несоблюдения карать сообразно революционной целесообразности. Битьём!!!
Alan вне форума  
 
Автор темы   Непрочитано 16.09.2005, 15:15
#20
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,831


Поддамся на провокацию (ессно, со шкурными интересами) - именно так, как описал ShaggyDoc, работают у меня архитекторы. Конструктора рыдают - у кого еще силы остались. На все попытки урезонить архитекторов те отвечают "Мы творческие люди, и нам техника ни к чему". Именно поэтому эту прогу + обновление всех текстовых и размерных примитивов на основе тутошней же функции kpblc-ent-modify повесить на сохранение. Хоть что-то...
А насчет остального - конструкторы уже начинают вроде как заворачивать чертежи обратно на доработку, если шаг не соблюден, если взорваны размеры (пока говорят, если таких большая часть, но, надеюсь, придем к тому, чтобы даже один такой размер служил основанием для доработки), если не использовалась orthomode, кроме косых кусков, ну и так далее.
Что самое интересное, учиться из 35 человек могут, хотят и учатся всего 6-7, при всем при этом трое - "тетушки" предпенсионного возраста. Какое удовольствие с ними работать - не описать!
Так что все для них, родных.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Программное создание размерных стилей

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

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