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

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

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

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

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

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

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

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


Диалги ввода двух строк


Иллюстрация к функции
(defun ru-dlg-get-two-number (caption    label1     default1
                              min1       max1       label2
                              default2   min2       max2
                              xml_file_name1        xml_file_name2
                              /          end        err_str
                              lst        num1       num2
                              result     str1       str2
                             )
                             ;|
Ввод двух чисел
(ru-dlg-get-two-number
    "Размеры пилястры"
    "Длина вдоль стены"
    640
    120 1000
    "Ширина перпендикулярно стене"
    380 120 6000
    "options\wall_w.xml"
    "options\wall_w.xml"
       )
|;
  (while (not end)
    (if (setq lst (ru-dlg-get-two-string
                    caption
                    label1
                    (vl-princ-to-string default1)
                    t
                    label2
                    (vl-princ-to-string default2)
                    t
                    t
                    xml_file_name1
                    xml_file_name2
                  ) ;_ end of ru-dlg-get-two-string
        ) ;_ end of setq
      (progn
        (setq err_str ""
              str1    (car lst)
              str2    (cadr lst)
              num1    (atof str1)
              num2    (atof str2)
        ) ;_ end of setq
        (if (< num1 min1)
          (setq err_str (strcat err_str
                                "
"
                                label1
                                "="
                                str1
                                "  меньше допустимого значения "
                                (vl-princ-to-string min1)
                        ) ;_ end of strcat
          ) ;_ end of setq
        ) ;_ end of if
        (if (> num1 max1)
          (setq err_str (strcat err_str
                                "
"
                                label1
                                "="
                                str1
                                " больше допустимого значения "
                                (vl-princ-to-string max1)
                        ) ;_ end of strcat
          ) ;_ end of setq
        ) ;_ end of if
        (if (< num2 min2)
          (setq err_str (strcat err_str
                                "
"
                                label2
                                "="
                                str2
                                "  меньше допустимого значения "
                                (vl-princ-to-string min2)
                        ) ;_ end of strcat
          ) ;_ end of setq
        ) ;_ end of if
        (if (> num2 max2)
          (setq err_str (strcat err_str
                                "
"
                                label2
                                "="
                                str2
                                " больше допустимого значения "
                                (vl-princ-to-string max2)
                        ) ;_ end of strcat
          ) ;_ end of setq
        ) ;_ end of if
        (if (/= err_str "")
          (ru-msg-alert
            (strcat caption
                    "
Обнаружены ошибки: "
                    err_str
                    "
Повторите ввод!"
            ) ;_ end of strcat
          ) ;_ end of ru-msg-alert
          (setq end    t
                result (list num1 num2)
          ) ;_ end of setq
        ) ;_ end of if
      ) ;_ end of progn
      (setq end t)
    ) ;_ end of if
  ) ;_ end of while
  result
) ;_ end of defun

(defun ru-dlg-get-two-string (caption        label1
                              default1       disable_empty1
                              label2         default2
                              disable_empty2 Visible2
                              xml_file_name1 xml_file_name2
                              /              command_line
                              continue       reason
                              result         tmp_str
                             )
                             ;|
;; XMLFileName передавать относительно
  (ru-dlg-get-two-string
    "Размеры пилястры"
    "Длина вдоль стены"
    "640"
    t
    "Ширина перпендикулярно стене"
    "380"
    t
    t
    "options\wall_w.xml"
    "options\wall_w.xml"
       ) ;_ end of ru-dlg-get-two-string
(ru-dlg-get-two-string
    "Образец штриховки"
    "Диаметр магистрали"
    "1000"
    t
    "Диаметр ответвления"
    "500"
    t
    nil
     "options\diam_nominal.xml"
     "options\diam_nominal.xml"
   )
  |;
  (setq command_line (strcat (ru-file-bin "ruGetDoubleStr.exe") " ru")
        result       (list default1 default2)
        continue     t
  ) ;_ end of setq
  (ru-reg-delete-tmp-sub-key "GetDoubleString")
  (ru-reg-write-tmp-string "GetDoubleString" "Caption" caption)
  (ru-reg-write-tmp-string "GetDoubleString" "LabelStr1" label1)
  (ru-reg-write-tmp-string "GetDoubleString" "LabelStr2" label2)
  (ru-reg-write-tmp-string
    "GetDoubleString"
    "DisableEmpty1"
    (ru-conv-bool-to-str disable_empty1)
  ) ;_ end of ru-reg-write-tmp-string
  (ru-reg-write-tmp-string
    "GetDoubleString"
    "DisableEmpty2"
    (ru-conv-bool-to-str disable_empty2)
  ) ;_ end of ru-reg-write-tmp-string
  (ru-reg-write-tmp-string
    "GetDoubleString"
    "CaptureImageEnabled"
    (ru-conv-bool-to-str (ru-user-may-xml-edit))
  ) ;_ end of ru-reg-write-tmp-string

  (ru-reg-write-tmp-string
    "GetDoubleString"
    "Visible2"
    (ru-conv-bool-to-str visible2)
  ) ;_ end of ru-reg-write-tmp-string
  (ru-reg-write-tmp-string
    "GetDoubleString"
    "XmlFileName1"
    xml_file_name1
  ) ;_ end of ru-reg-write-tmp-string
  (ru-reg-write-tmp-string
    "GetDoubleString"
    "XmlFileName2"
    xml_file_name2
  ) ;_ end of ru-reg-write-tmp-string
  (ru-reg-write-tmp-string "GetDoubleString" "AttribName1" "sdata")
  (ru-reg-write-tmp-string "GetDoubleString" "AttribName2" "sdata")
  (ru-reg-write-tmp-string
    "GetDoubleString"
    "XmlImagesDir"
    (ru-dirs-menu-xml-images)
  ) ;_ end of ru-reg-write-tmp-string
  (ru-reg-write-tmp-string
    "GetDoubleString"
    "XmlRootDir"
    (ru-dirs-menu-xml)
  ) ;_ end of ru-reg-write-tmp-string


  (ru-reg-write-tmp-string "GetDoubleString" "StartFromAcad" "1")

;;; Запуск диалога в цикле
  (while continue
    (ru-reg-write-tmp-string "GetDoubleString" "String1" (car result))
    (ru-reg-write-tmp-string "GetDoubleString" "String2" (cadr result))
    (ru-app-run command_line t)

    (setq result (list
                   (ru-reg-read-tmp-string "GetDoubleString" "String1" "")
                   (ru-reg-read-tmp-string "GetDoubleString" "String2" "")
                 ) ;_ end of list

          reason (atoi
                   (ru-reg-read-tmp-string
                     "GetDoubleString"
                     "ResultDial"
                     "1"
                   ) ;_ end of ru-reg-read-tmp-string
                 ) ;_ end of ru-conv-str-to-bool
    ) ;_ end of setq


    (cond
      ((= reason 3)
       ;;Выбор из Acad
       (if (setq tmp_str
                  (ru-get-txt-from-dwg
                    (strcat "Выбери надпись из рисунка для " label1)
                  ) ;_ end ofru-get-txt-from-dwg
           ) ;_ end of setq
         (setq result (list tmp_str (cadr result)))

       ) ;_ end of if
      )
      ((= reason 4)
       ;;Выбор из Acad
       (if (setq tmp_str
                  (ru-get-txt-from-dwg
                    (strcat "Выбери надпись из рисунка для " label2)
                  ) ;_ end ofru-get-txt-from-dwg
           ) ;_ end of setq
         (setq result (list (car result) tmp_str))
       ) ;_ end of if
      )

      ((= reason 1)
       ;;OK
       (setq continue nil)
       ;; вернуть строку
      )
      (t
       ;; Отмена
       (setq continue nil
             result nil
       ) ;_ end of setq
      )
    ) ;_ end of cond
  ) ;_ end of while
  (ru-reg-delete-tmp-sub-key "GetDoubleString")

  result
) ;_ end of defun

24-07-2004 23:34:12