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

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

Программа отрисовки выноски для сетей

Ответ
Поиск в этой теме
Непрочитано 27.10.2009, 13:52 #1
Программа отрисовки выноски для сетей
lozivan
 
Регистрация: 25.09.2009
Сообщений: 11

Уважаемые участники форума, большая просьба написать программу отрисовки выноски для сетей. На чертеже нарисована сеть трубопроводов (линия, полилиния), каждый трубопровод лежит на своем слое (название слоя – это диаметр трубы и толщина стенки, например Ш110х6.3). Также в чертеже настроена мультивыноска со стилем «Vynoska_seti».
«Хотелки» по работе программы . После запуска программы следует запрос на выбор объекта (единичного или рамкой). Затем программа рисует (в произвольном месте, например от середины линии или полилинии в любом направлении) мультивыноску со стилем «Vynoska_seti», в верхней строчки должно вставиться поле с названием слоя, которому принадлежит линия или полилиния (%<\AcObjProp Object(%<\_ObjId 2129618480>%).Layer \f "%tc4">%), а в нижней строчки вставляется поле с длинной данной линии или полилинии с добавлением «Префикса» L= и «Суффиксом» м (малая русская), и подавлением «хвостовых» нулей (%<\AcObjProp.16.2 Object(%<\_ObjId 2129618480>%).Length \f "%lu2%ps[L=,м]%zs8">%). Каждая мультивыноска должна отрисоваться на том же слое что и линии или полилинии, которой она «принадлежит» (цвет – послою, тип линий – Continuous, вес линий – 0,25мм).
Описал так подробно потому что не знаю получиться ли прикрепить файл для примера.
Подправляю сообщения, хочу уточнить в программирование полный профан и сам коды похожих программ под себя подправить не могу.
Ссылки на похожие темы: http://forum.dwg.ru/showthread.php?t=17145 , http://forum.dwg.ru/showthread.php?t=6474 и http://forum.dwg.ru/showthread.php?t=4599&page=3

Вложения
Тип файла: dwg
DWG 2007
Пример.dwg (95.1 Кб, 577 просмотров)


Последний раз редактировалось lozivan, 28.10.2009 в 11:27.
Просмотров: 4200
 
Непрочитано 29.10.2009, 01:41
#2
Олег (jr.)

специалист по околачиванию грушевых деревьев
 
Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 813


Попробуй вариант
(сразу предупреждаю что ничего переделывать не смогу):

Код:
[Выделить все]
(defun C:MLF (/ acsp adoc col dht ent mlead p1 p2 pline pt1 pt2 ptarr txt)
  (vl-load-com)
  (or adoc
      (setq adoc
	     (vla-get-activedocument
	       (vlax-get-acad-object)
	       )
	    )
      )
  (if (and
	(= (getvar "tilemode") 0)
	(= (getvar "cvport") 1)
	)
    (setq acsp (vla-get-paperspace adoc))
    (setq acsp (vla-get-modelspace adoc))
    )

  (setq	col (vla-getinterfaceobject
	      (vlax-get-acad-object)
	      (strcat "autocad.accmcolor."
		      (vl-princ-to-string (atoi (getvar "acadver")))))
	)
  (while (setq ent (entsel "\n >> Выбрать полилинию >> \n"))
    (progn
      (setq pline (vlax-ename->vla-object (car ent))
	    )
      (setq txt
		(strcat
		  "%<\\AcObjProp Object(%<\\_ObjId "
		  (itoa (vla-get-objectid pline))
		  ">%).Layer \\f \"%tc4\">%"
		  )

	    txt	(strcat	txt
			"\\P"
			"%<\\AcObjProp Object(%<\\_ObjId "
			(itoa (vla-get-objectid pline))
			">%).Length \\f \"%lu2%ps[L=,м]%zs8\">%"))

      (setq p1 (vlax-curve-getclosestpointto pline (cadr ent))
	    p2 (getpoint p1 "\nТочка полочки выноски >> \n")
	    )
      (setq ptarr (vlax-make-variant
		    (vlax-safearray-fill
		      (safearray vlax-vbdouble '(0 . 5))
		      (apply 'append (list p1 p2))))
	    )

      (setq mlead (vla-addmleader acsp ptarr 0))
      (vla-put-contenttype mlead acMTextContent)
      (vla-put-landinggap mlead 0.09)
      (vla-put-textstring mlead txt)
;;;(vla-put-layer mlead (vla-get-layer pline));; <-- не работает потому что в имени слоя некорректный символ (диаметр)

      ;;borrowed from LeeMac:
      (vla-setdoglegdirection
	mlead
	0
	(vlax-3D-point
	  (list
	    (if	(<= (car p1) (car p2))
	      1
	      -1)
	    0
	    0
	    )
	  )
	)
      (vla-put-leaderlineweight mlead acLnWt025)
      (vla-put-leadertype mlead 1)
      (vla-put-colorindex col 256)
      (vla-put-truecolor mlead col)
      (vla-put-leaderlinecolor mlead col)

      )
    )
  (vl-catch-all-apply
    (function (lambda ()
		(vlax-release-object col)
		)
	      )
    )
  (vla-regen adoc acactiveviewport)
  (princ)
)
(prompt "\n")
(prompt "\t\t<<< Ввести MLF для старта программы\t>>> ")
(princ)
~'J'~
Олег (jr.) вне форума  
 
Автор темы   Непрочитано 29.10.2009, 12:59
#3
lozivan


 
Регистрация: 25.09.2009
Сообщений: 11


Олег (jr.)
Огромнейшее спасибо, чуть чуть не так как хотелось, но все равно намного легче станет оформлять чертежи, еще раз спасибо.
lozivan вне форума  
 
Непрочитано 29.10.2009, 13:37
#4
Олег (jr.)

специалист по околачиванию грушевых деревьев
 
Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 813


Цитата:
Сообщение от lozivan Посмотреть сообщение
Олег (jr.)
Огромнейшее спасибо, чуть чуть не так как хотелось, но все равно намного легче станет оформлять чертежи, еще раз спасибо.
Я в мультилидерах ничего не понимаю поэтому
ничего переделать не смогу - никогда не занимался этим
Объясни что не так (лучше приаттачить чертеж)
может кто-нибудь и поможет
Успехов

~'J'~
Олег (jr.) вне форума  
 
Автор темы   Непрочитано 29.10.2009, 13:57
#5
lozivan


 
Регистрация: 25.09.2009
Сообщений: 11


Кстати для тех кто захочет воспользоваться этой lsp-й, если название слоя сделать не однострочным или многострочным тексом в AutoCAD (как у меня в Пример.dwg), а в Word (вставка - символ - "значок диаметра"), то мультивыноска отрисуется в том же слое, что и линия которой "принадлежит" эта мультивыноска.
Макрос для кнопки - ^C^C^P(load "MLF");MLF

Олег (jr.) все хорошо, только жалко нельзя все линии или полилинии скопом выделить. Это единственный минус.

P.S. Кстати для тех кто захочет воспользоваться этой lsp-й, если название слоя сделать не однострочным или многострочным тексом в AutoCAD (как у меня в Пример.dwg), а в Word (вставка - символ - "значок диаметра"), то мультивыноска отрисуется в том же слое, что и линия которой "принадлежит" эта мультивыноска. Извините ошибся, мультивыноска все равно отрисовывается на текущем слое и текущим стилем мультивыноски .

Последний раз редактировалось lozivan, 29.10.2009 в 15:39.
lozivan вне форума  
 
Непрочитано 30.10.2009, 13:11
#6
dextron3

проектировшик
 
Регистрация: 01.01.2007
СССР
Сообщений: 5,143


lozivan, я такой лсип видел на КАДУСЕР.ru, но теперь там сайт какойто другой стал непонятно где что искать, найди там все мои сообщения, я помню писал для названия арматур в ДЖ мне нужна была программка
__________________
инженер проектировшик с опттом программа авто гад образование высшие
dextron3 вне форума  
 
Автор темы   Непрочитано 30.10.2009, 14:46
#7
lozivan


 
Регистрация: 25.09.2009
Сообщений: 11


Спасибо, посмотрю
lozivan вне форума  
 
Автор темы   Непрочитано 31.10.2009, 17:42
#8
lozivan


 
Регистрация: 25.09.2009
Сообщений: 11


dextron3 наверное вот эта тема http://www.caduser.ru/forum/index.ph...#message235004, посмотрел к сожалению не подходит, маркировку трубопровода надо на выноске или в две строки над и под линией, и еще в той теме маркировка обычным текстом, а хотелось бы полям для автоматического обновления.
lozivan вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Программа отрисовки выноски для сетей

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программа для отрисовки добычных откосов babkakoshka Другие CAD системы 7 12.01.2009 14:37
Электромагнитная пушка T-Yoke Машиностроение 112 06.08.2008 18:48
Мониторы LCD CRT Разное 94 17.06.2008 10:51
Фундамент с динамическими нагрузками в Scad Tlelaxu SCAD 9 31.08.2007 10:44