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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как организовать уловие функцией if?

Как организовать уловие функцией if?

Ответ
Поиск в этой теме
Непрочитано 29.07.2008, 15:52 #1
Как организовать уловие функцией if?
Kostinok
 
Инженер-электрик
 
Калининград
Регистрация: 13.10.2007
Сообщений: 151

Здравствуйте уважаемые форумчане!
Я совершенно не силен в програмироовании, но облегчить рутинные операции хочеться. Поэтому решил написать простейшую программу, но завалился.
Была задумка автоматизировать расстановку блоков внутри замкнутого, всегда прямоугольного! контура.
Контур - эта комната, блок - лампы. Расстановка зависит от длины и ширины комнаты. Всегда расстояние от стены до лампы, равно половине расстояния между лампами. Необходимо только определиться сколько столбцов и строк ламп необходимо. И найти точку вставки первой лампы, а после командой -ARRAY размножить блоки через определенные растояния.
Но если необходимо поставить лампы в один ряд или один столбец - выходит полная ерунда.
Надо организовать выбор, который прописывал бы разные команды, для разных условий.
Но не смог организовать условие!!!!((((
Надеюсь на вашу консультацию)

Код:
[Выделить все]
(vl-load-com)
(defun arr (/ set:entities int:row int:col rea:a rea:per rea:b list:beg obj)
(initget 7)  
(setq int:row (getint "\nЧисло строк: "))
(initget 7)  
(setq int:col (getint "\nЧисло столбцов: "))
(setq set:entities (ssget))
(setq obj (vlax-ename->vla-object (ssname set:entities 0)))
(setq rea:a (vlax-curve-getDistAtParam obj 1)
rea:per (vla-get-length obj)
rea:b (- (/ rea:per 2.0) rea:a)
list:beg (getpoint "\nУкажите НЛ точку контура:")
rea:ai (/ rea:a int:col 2.0)
rea:bi (/ rea:b int:row 2.0)
      );_/setq
(setq list:end (list (+ (car list:beg) rea:ai) (+ (cadr list:beg) rea:bi) 0.0))
(command "_insert" "Люминисцентная лампа" list:end "1" "1" "0")
  (if (eq int:row 1)
(command "_ARRAY" "_L" "" "_R" int:row int:col (* rea:ai 2))
    (progn
    (if (eq int:col 1)
      (command "_ARRAY" "_L" "" "_R" int:row int:col (* rea:bi 2))
      (command "_ARRAY" "_L" "" "_R" int:row int:col (* rea:bi 2) (* rea:ai 2))))
    )) ;_ defun
Для наглядности приложил пример.

Явно, что то не правильно, то работает, то нет(((

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

__________________
Можно сопротивляться вторжению армий, вторжению идей сопротивляться невозможно. /В. Гюго/
Просмотров: 2773
 
Непрочитано 29.07.2008, 16:15
#2
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,840


Ну по крайней мере либо привязки отключи:
(setq oldosmode (getvar "osmode"))
(setvar "osmode" 0)
;;;программа
(setvar "osmode" oldsomode)
либо в (command "_array" "_L" ... ) добавь (command "_array" "_L" "_none" int:row "_none" ...)
дальше логику не смотрел
Стоп вру:
не "_array" а "_insert"
__________________
Когда в руках молоток все вокруг кажется гвоздями.

Последний раз редактировалось Дима_, 29.07.2008 в 16:22.
Дима_ вне форума  
 
Автор темы   Непрочитано 30.07.2008, 07:16
#3
Kostinok

Инженер-электрик
 
Регистрация: 13.10.2007
Калининград
Сообщений: 151


Дима_,
Спасибо, наверное надо задать условие о обнулении rea:bi и rea:ai при значениях int:row и int:col равных единице. Я постараюсь сделать это самостоятельно, но очень надеюсь на помощь профессионалов, подскажите пожалуйста как правильно организовать это условие.
Цитата:
Ну по крайней мере либо привязки отключи:
Не понял про привязки, зачем их отключать?
С уважением kostinok.
__________________
Можно сопротивляться вторжению армий, вторжению идей сопротивляться невозможно. /В. Гюго/

Последний раз редактировалось Kostinok, 30.07.2008 в 07:34.
Kostinok вне форума  
 
Автор темы   Непрочитано 30.07.2008, 07:31
#4
Kostinok

Инженер-электрик
 
Регистрация: 13.10.2007
Калининград
Сообщений: 151


Есть команда:

(command "_ARRAY" "_L" "" "_R" int:row int:col (* rea:bi 2) (* rea:ai 2))

Как описать програмно такой цикл:
Если int:row = 1, то пусть исчезнет (* rea:bi 2)
Если int:col = 1, то пусть исчезнет (* rea:ai 2)
В остальных случаях остается первоночальная команда.
?
__________________
Можно сопротивляться вторжению армий, вторжению идей сопротивляться невозможно. /В. Гюго/
Kostinok вне форума  
 
Непрочитано 30.07.2008, 08:10
#5
Кулик Алексей aka kpblc
Moderator

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


Код:
[Выделить все]
(cond
((= int:row 1) (command "_.ARRAY" "_L" "" "_R" int:row int:col (* rea:ai 2)))
((= int:col 1) (command "_.ARRAY" "_L" "" "_R" int:row int:col (* rea:bi 2)))
(t (command "_.ARRAY" "_L" "" "_R" int:row int:col (* rea:bi 2) (* rea:ai 2))))
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 30.07.2008, 09:58
#6
Kostinok

Инженер-электрик
 
Регистрация: 13.10.2007
Калининград
Сообщений: 151


Кулик Алексей aka kpblc,
Большое спасибо, все от незнания!!! А в чем была моя ошибка в коде #1?
__________________
Можно сопротивляться вторжению армий, вторжению идей сопротивляться невозможно. /В. Гюго/
Kostinok вне форума  
 
Непрочитано 30.07.2008, 10:07
#7
Кулик Алексей aka kpblc
Moderator

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


Честно говоря, начальный код я не смотрел.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как организовать уловие функцией if?

Размещение рекламы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
на злобу дня !! zaza-noza Разное 63 22.05.2009 15:10
Как лучше организовать работу в ACADe Andy_BV AutoCAD 1 03.03.2007 11:56
БРЕД СИВОЙ КОБЫЛЫ Kryaker Разное 1876 29.12.2006 23:41
Как упорядочить наложение штриховок,полилиний (Draworder)? mmmx Программирование 7 13.07.2006 10:13