Тема: 3orbit

Столкнулся с проблемой. Когда рисую порядка 10-20 экземпляров своего энтити, кад начинает жутко тормозить и зависать при вращении 3dorbit. Даже если в начале viewportdraw поставить return и объекты рисоваться не будут, всё-равно 3dorbit зависает. И самое удивительное, если нарисовать объекты и удалить их, это тоже приведет к падению на 3dorbit. Что характерно, если просто выставлять изометрию, то всё работает нормально.
Кто-нибудь знает, в чём может быть фишка?

Re: 3orbit

> Dex
попробуйте мой вариант 3Д орбиты.
Может, сможете разобраться, в чем проблемма...

(defun my-3dorbit (/ PT1 PT2 R S V V1 VD W)
  ;;  ElpanovEvgeniy, Russia, Moscow, 2006
  ;;  Function "3dorbit"
  ;;  During work it is possible to use PAN and ZOOM
  ;;  in a transparent mode.
  ;;  (my-3dorbit)
  (if (tblsearch "VIEW" "tmp1")
    (setq v1  (tblobjname "VIEW" "tmp1")
          pt2 (trans (cadr (grread nil 5)) 1 2)
    ) ;_  setq
    (setq
      v1  (entmakex
            (list
              '(0 . "VIEW")
              '(100 . "AcDbSymbolTableRecord")
              '(100 . "AcDbViewTableRecord")
              '(2 . "tmp1")
              '(70 . 0)
              (cons 40 (getvar "VIEWSIZE"))
              (cons 10 (getvar "VIEWCTR"))
              (cons 41
                    (* (getvar "VIEWSIZE")
                       (apply
                         (function /)
                         (getvar "SCREENSIZE")
                       ) ;_  apply
                    ) ;_  *
              ) ;_  cons
              (cons 11 (getvar "VIEWDIR"))
              '(12 0. 0. 0.)
              (cons 42 (getvar "LENSLENGTH"))
              (cons 43 (getvar "FRONTZ"))
              (cons 44 (getvar "BACKZ"))
              (cons 50 (getvar "VIEWTWIST"))
              (cons 71 (getvar "VIEWMODE"))
              '(281 . 6)
              '(72 . 0)
            ) ;_  list
          ) ;_  entmakex
      pt2 (trans (cadr (grread nil 5)) 1 2)
    ) ;_  setq
  ) ;_  if
  (while (= (car (setq pt1 (grread nil 5))) 5)
    (setq r   (/ (getvar "VIEWSIZE") 4.)
          w   (trans (getvar "VIEWCTR") 1 2)
          pt1 (trans (cadr pt1) 1 2)
          v   (trans ((lambda (x1 y1 x2 y2)
                        (list
                          (- x1 x2)
                          (- y1 y2)
                          (- (sqrt (abs (- (* R R) (* x1 x1) (* y1 y1))))
                             (sqrt (abs (- (* R R) (* x2 x2) (* y2 y2))))
                          ) ;_  -
                        ) ;_  list
                      ) ;_  lambda
                       (- (car pt2) (car w))
                       (- (cadr pt2) (cadr w))
                       (- (car pt1) (car w))
                       (- (cadr pt1) (cadr w))
                     )
                     2
                     1
              ) ;_  trans
          pt2 pt1
          s   (/ r (distance '(0. 0. 0.) (getvar "VIEWDIR")))
          vd  (mapcar (function (lambda (x) (* x s))) (getvar "VIEWDIR"))
          v   (mapcar (function +) vd v)
          s   (/ r (distance '(0. 0. 0.) v))
          v   ((lambda (s) (list (* (car v) s) (* (cadr v) s) (* (caddr v) s)))
                (/ r (distance '(0. 0. 0.) v))
              )
          w   (* (/ r (getvar "VIEWSIZE"))
                 (* (getvar "VIEWSIZE")
                    (apply
                      (function /)
                      (getvar "SCREENSIZE")
                    ) ;_  apply
                 ) ;_  *
                 4.
              ) ;_  *
    ) ;_  setq
    (entmod
      (list
        (cons -1 v1)
        '(0 . "VIEW")
        '(100 . "AcDbSymbolTableRecord")
        '(100 . "AcDbViewTableRecord")
        '(2 . "tmp1")
        '(70 . 0)
        (cons 40 (getvar "VIEWSIZE"))
        (cons 10 (trans (getvar "VIEWCTR") 1 2))
        (cons 41
              (* (getvar "VIEWSIZE")
                 (apply
                   (function /)
                   (getvar "SCREENSIZE")
                 ) ;_  apply
              ) ;_  *
        ) ;_  cons
        (cons 11 v)
        '(12 0. 0. 0.)
        (cons 42 (getvar "LENSLENGTH"))
        (cons 43 (getvar "FRONTZ"))
        (cons 44 (getvar "BACKZ"))
        (cons 50 (getvar "VIEWTWIST"))
        (cons 71 (getvar "VIEWMODE"))
        '(281 . 6)
        '(72 . 0)
      ) ;_  list
    ) ;_  entmod
    (entupd v1)
    (setview (tblsearch "VIEW" "tmp1"))
  ) ;_  while
)

Re: 3orbit

> Dex
https://www.caduser.ru/forum/topic24787.html

Re: 3orbit

2Евгений Елпанов: спасибо, но я в лиспе не бум-бум.. совсем:)
2Александр Ривилис: В этом-то и трабла, что трабла не в viewportdraw:). Виснет даже после удаления объектов)

Re: 3orbit

> Dex
Ну если виснет после удаления объектов, то анализируй все методы custom entity. Или баг у тебя, или в AutoCAD. Третьего не дано...