Темы сайта
Интегрированная система ruCAD - приложение к базовой системе AutoCAD.

Система ruCAD - это приложение строительного профиля в широком понимании, то есть предназначенная для автоматизации строительного проектирования, реконструкции и технического перевооружения любых зданий и сооружений.В отличие от других систем, ориентированных на конкретную область применения, в ruCAD включены средства для комплексной разработки проектной документации наиболее распространенных разделов проекта, выполняемых во всех проектных организациях.
Система управления контентом MODx
Ограничения
В соответствии с Договором между издательством и авторами мы не имеем права полностью публиковать в Интернет материалы книги.

Но, в пределах установленной квоты, будут публиковаться отдельные главы. Кроме того, на сайте будут размещаться материалы, не вошедшие в книгу и полные версии сокращенных по техническим причинам глав.

Так помечены материалы, не опубликованные на сайте!

Новинки
Книга была выпущена в 2004 году. С тех пор многое изменилось - появились версии AutoCAD 2005, 2006, 2007, 2008.

Система ruCAD была выпущена в свет, появились замечания и предложения пользователей. Да и у нас появились новые представления по некоторым вопросам.

Поэтому в материалы книги, публикуемые на сайте, мы вносим дополнительные замечания, выделяемые так:
Так выделяются дополнительные замечания, комментарии, указания!
Где спросить
На нашем сайте было уже несколько форумов. На них было зарегистрировано более 400 посетителей, а многие заходили просто так, в гости. Но сейчас мы вывели форумы из открытого режима. Подробнее о наших форумах
Если очень нужно что-то узнать о ruCAD именно в форумном формате, заходите на Форум сайта
AutoCAD и проектирование
Внимание!
Технические решения и исходные тексты, публикуемые на сайте, могут быть устаревшими!

В таком виде они были во время написания книги, но с тех пор прошло несколько лет, в систему было внесено множество изменений и дополнений.


Одиночная вставка блока, висящего на курсоре



(defun ru-block-insert-scaled-angleask (msg
                                        block_name
                                        x_scale
                                        y_scale
                                        block_angle
                                        is_attedit
                                        /
                                        curr_layer
                                        do_insert
                                        ins_point
                                        is_attrib
                                        sub_ent
                                        tmp_angle
                                        tmp_block
                                        tmp_ent
                                        unnamed_block
                                        put_point
                                        exp_block
                                        result
                                       )
;;;
 ;|------------------------------------------------------------------
Вариант с одиночной вставкой блока
 (ru-block-insert-scaled-angleask "Центр отверстия" "RU_WALL_HOLE_MARK" 500 1000 nil nil)

 (ru-block-insert-scaled-angleask "Центр отверстия" "RU_WALL_HOLE_MARK" 500 1000 nil T)
|;
 (if (ru-ucs-z-is-parallel-wcs)
  (progn
   (setq do_insert  t
         ins_point
                    (list (+ (car (getvar "VSMAX"))
                             (* 2 (max x_scale y_scale))
                          ) ;_ end of +
                          (+ (cadr (getvar "VSMAX"))
                             (* 2 (max x_scale y_scale))
                          ) ;_ end of +
                          0.0
                    ) ;_ end of list

         tmp_angle  (if block_angle
                     block_angle
                     0
                    ) ;_ end of if
         curr_layer (getvar "CLAYER")
   ) ;_ end of setq
   (if (setq tmp_block (ru-block-insert-obj
                        block_name
                        ins_point
                        x_scale
                        y_scale
                        1.0
                        tmp_angle
                       ) ;_ end of ru-block-insert-obj
       ) ;_ end of setq
    (progn
     (setq tmp_block (vlax-vla-object->ename tmp_block)
           tmp_ent   tmp_block
     ) ;_ end of setq
     (entmake (list (cons 0 "BLOCK")
                    (cons 100 "AcDbEntity")
                    (cons 100 "AcDbBlockBegin")
                    (cons 2 "*U0")
                    (cons 8 curr_layer)
                    (cons 70 1)
                    (cons 62 256)
                    (cons 10 ins_point)
              ) ;_ end of list
     ) ;_ end of entmake
     (entmake (entget tmp_ent))
     (while (setq tmp_ent (entnext tmp_ent))
      (if (= (cdr (assoc 0 (setq sub_ent (entget tmp_ent))))
             "ATTRIB"
          ) ;_ end of =
       (setq is_attrib t)
      ) ;_ end of if
      (entmake sub_ent)
     ) ;_ end of while
     (setq unnamed_block
           (entmake (list (cons 0 "ENDBLK")
                          (cons 100 "AcDbEntity")
                          (cons 100 "AcDbBlockEnd")
                          (cons 8 curr_layer)
                    ) ;_ end of list
           ) ;_ end of entmake
     ) ;_ end of setq

     (entdel tmp_block)
    ) ;_ end of progn
    (setq do_insert nil)
   ) ;_ end of if

   (while do_insert
    (setq tmp_block (vlax-vla-object->ename
                     (ru-block-insert-obj
                      unnamed_block
                      ins_point
                      1.0
                      1.0
                      1.0
                      0.0
                     ) ;_ end of ru-block-insert-obj
                    ) ;_ end of vlax-vla-object->ename
    ) ;_ end of setq

    (princ (strcat "
" msg " <Хватит>: "))
    (if (or (not (setq do_insert (vl-cmdf "_.CHANGE"
                                          tmp_block
                                          ""
                                          ""
                                          pause
                                          ""
                                 ) ;_ end of vl-cmdf
                 ) ;_ end of setq
            ) ;_ end of not
            (equal
             (setq put_point (cdr (assoc 10 (entget tmp_block))))
             ins_point
             1e-6
            ) ;_ end of equal
        ) ;_ end of or
     (setq do_insert nil)
     (progn
      (if (not block_angle)
       (progn
        (princ "
Угол поворота <0>: ")
        (setq do_insert (vl-cmdf "_.CHANGE"
                                 tmp_block
                                 ""
                                 ""
                                 ""
                                 pause
                        ) ;_ end of vl-cmdf
        ) ;_ end of setq
       ) ;_ end of progn
      ) ;_ end of if
      (if do_insert
       (progn
        (setq exp_block
              (car
               (vlax-safearray->list
                (vlax-variant-value
                 (vla-explode
                  (vlax-ename->vla-object
                   tmp_block
                  ) ;_ end of vlax-ename->vla-object
                 ) ;_ end of vla-explode
                ) ;_ end of vlax-variant-value
               ) ;_ end of vlax-safearray->list
              ) ;_ end of car
        ) ;_ end of setq
        (if (and is_attrib is_attedit)
         (vl-cmdf "_.DDATTE" (entlast))
        ) ;_ end of if
        (vla-put-insertionpoint
         exp_block
         (vlax-3d-point put_point)
        ) ;_* Mark #2
        (setq result (list (entlast) put_point))
       ) ;_ end of progn
      ) ;_ end of if
     ) ;_ end of progn
    ) ;_ end of if
    (entdel tmp_block)
;;; Чтобы не было продолжения и не ломать цикл
    (setq do_insert nil)
   ) ;_ end of while
  ) ;_ end of progn
  (alert (strcat "
Ось Z текущей ПСК не параллельна оси Z МСК."
                 "
Выполение команды прекращено."
         ) ;_ end of strcat
  ) ;_ end of alert
 ) ;_ end of if
 ;; Вернуть какой-то результат - списком примитив - точка_вставки
 result
) ;_ end of defun

24-07-2004 23:34:12