Re: Экспорт координат X Y Z точек из AutoCada в Excel

qwerty пишет:

Так теперь разобрался, в чем проблема, во 1-ых если csv файл открывать в экселе то нет разделения м/у х и у, а если тотже файл открыть в блокноте то там разделяются табуляцией, во 2-ых если после того как спрашивает Add numbering ответить нет, он спрашивает Draw the text и тоже ответить нет то записывается одна координата.
в командной строке пишет вот это.
Precision <2> : 4
Add numbering? [Yes/No] <N> :
Draw the text? [Yes/No] <N> :
Error! неверный тип аргумента: numberp: nil_undo Текущие настройки: Авто = Вкл,
Управление = Все, Объединить = Есть, Слой = Есть
Количество отменяемых операций или [Авто/Управление/Начало/Конец/Метка/Обратно]
<1>: _end

а если в отвечать Y, то тогда все гуд


Precision <2> : 4
Add numbering? [Yes/No] <N> : Y
Initial number <1> :
Draw the text? [Yes/No] <N> : Y
Text height <2.5> : 3
Records were added.._.zoom

Да, автокад 2011, русский

Изменил код  в посте #22, пробуй снова

[FONT=Arial]~'J'~[/FONT]

Re: Экспорт координат X Y Z точек из AutoCada в Excel

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

Re: Экспорт координат X Y Z точек из AutoCada в Excel

qwerty пишет:

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

Спасибо за тест
Будет время, обязательно доведу это дело до ума
Успехов :)

[FONT=Arial]~'J'~[/FONT]

(изменено: fixo, 31 января 2011г. 18:21:08)

Re: Экспорт координат X Y Z точек из AutoCada в Excel

qwerty пишет:

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

Вроде теперь все учел, протестируй еще:

;;ptxk.lsp
;; программа снимает координаты мест пересечения полилиний
;; fixo © 2010 * all rights released
;; edited with help of 'qwerty'
(vl-load-com)
(defun C:PTXL    (/ *error*  countp datafile decs en ent filename fst hgt lstobj nump par points sp ss  textp txt_points tmp)
  (defun *error*    (msg)
  (if datafile
    (close datafile))
  
  (if msg
    (princ (strcat "\nError! " msg)))
    (command "_undo" "_end")
  
  (princ)
  )
  
  (defun emake-pt  (pt)
    (entmake
      (list
    (cons 0 "POINT")
    (cons 100 "AcDbEntity")
    (cons 100 "AcDbPoint")
    (cons 10 (trans pt 1 0));<--WCS
    (cons 8 "0")
    )
      )
    )

  (defun emake-mtext  (p1 p2 txt hgt)
    (entmake
      (list
    (cons 0 "MTEXT")
    (cons 100 "AcDbEntity")
    (cons 100 "AcDbMText")    
    (cons 10 (trans p1 1 0) )
    (cons 40 hgt)
    (cons 41 (abs (- (car p2) (car p1))))
    (cons 7 (getvar "TEXTSTYLE"))
    (cons 1 txt)
    (cons 71 4)
    (cons 72 5)
    (cons 73 1)

    )
      )
    )
(defun group-by-num (lst num / ls ret)
  (if (= (rem (length lst) num ) 0)
    (progn
      (setq ls nil)
      (repeat (/ (length lst) num)
    (repeat num (setq ls 
            (cons (car lst) ls)
          lst (cdr lst)))
    (setq ret (append ret (list (reverse ls)))
          ls nil)))
    )
ret
  )

  (command "_undo" "_begin")

  (if (setq ent (entsel "\nSelect first entity >> "))
    (if (setq ss (ssget ))
      (progn
    (vl-load-com)
    (setq fst (vlax-ename->vla-object (setq en (car ent))))
    (setq sp (vlax-curve-getclosestpointto fst (cadr ent))
          par (vlax-curve-getparamatpoint fst sp))
    (setq lstobj (mapcar 'vlax-ename->vla-object
                (vl-remove en (vl-remove-if 'listp
                   (mapcar 'cadr (ssnamex ss))))))

(setq points nil)    
  
  (setq filename (getfiled "Select a Points Data File"
                 (getvar "dwgprefix")
                 "csv"
                 1)
         )
    (if (not filename) (setq filename (strcat (getvar "dwgprefix")
               (vl-filename-base (getvar "dwgname"))
               ".csv")));<-- ( or .TXT)
    
(foreach obj lstobj
     (setq tmp (vlax-invoke obj 'intersectwith fst 0))

     (if tmp
       (if (>(length tmp) 3)
       (setq points (append points (group-by-num tmp 3) ))
       (setq points (cons tmp points))
       ))
     )
(setq points (mapcar '(lambda(pt)(trans pt 0 1))     points))
  (initget 6)
  (setq decs (getint (strcat "\nPrecision <"(rtos (getvar 'dimdec)) "> : ")))
    (if (not decs)(setq decs (getvar 'dimdec))
  )
  (setq cnt nil start nil nump nil drawp nil)
  
  (initget "Yes No")
  (setq num (getkword "\nAdd numbering? [Yes/No] <N> : "))

    (if (eq "Yes" num)
      (progn
  (initget 6)
  (setq countp (getint "\nInitial number <1> : "))
    (if (not countp)   (setq cnt 1)(setq cnt countp))
    (setq start cnt)
  (setq nump T))
      (setq cnt nil)
  )
  
 (initget "Yes No")
  (setq textp (getkword "\nDraw the text? [Yes/No] <N> : "))
  (if (eq "Yes" textp)
      (progn
    (setq drawp T)
(initget 6)
  (setq hgt (getreal (strcat "\nText height <"(rtos (getvar 'dimtxt)) "> : ")))
    (if (not hgt)  (setq hgt (getvar 'dimtxt))))
    )


    
   (setq points  (vl-sort points '(lambda (a b)
               ((if (< par (/ (vlax-curve-getendparam fst) 2))
              >
              <
              )
            (vlax-curve-getdistatpoint fst(vlax-curve-getclosestpointto fst a))
            (vlax-curve-getdistatpoint fst(vlax-curve-getclosestpointto fst b)))))
         )
    
(setq datafile (open filename "W"))

(if nump
  (progn
    (setq start cnt)
    (setq cnt (1- cnt))
    
 (setq txt_points (mapcar '(lambda(x)(setq cnt (1+ cnt))(append (list cnt) x)) points)))
  (setq txt_points points))
    
(foreach pt  txt_points
  (cond ((= 3 (length pt))
  (write-line
    
    (strcat 
        (rtos (car pt) 2 decs)
        (chr 9)
        (rtos (cadr pt) 2 decs)
        (chr 9)
        (rtos (caddr pt) 2 decs))
    datafile))
    ((= 4 (length pt))
  (write-line
    
    (strcat (itoa (car pt))
        (chr 9)
        (rtos (cadr pt) 2 decs)
        (chr 9)
        (rtos (caddr pt) 2 decs)
        (chr 9)
        (rtos (last pt) 2 decs))
    datafile)))

  )        
(close datafile)
  
(gc)
(princ "\n Records were added..")   
(alert (strcat "The point records were saved into the file:\n" filename ))
(if drawp
  (progn
(setq cnt start)

(foreach pt  points

      (emake-pt (trans (trans pt  1 0) 0 1 t))
    (emake-mtext
     (trans (trans (polar pt 0 (* hgt 0.5)) 1 0) 0 1 t)
      (trans(trans (polar pt (/ pi 4) (* hgt 10)) 1 0)0 1 t)
      (itoa cnt)
     hgt
    )

  (setq cnt (1+ cnt))
  )


 
      (vl-cmdf "_.zoom" "_O" en ""
           "_.zoom" ".5x")
    )
  )
      )
    )
      )

  (princ)
  )
(prompt "\n\t***\tType PTXL to run program")

(prin1)

[FONT=Arial]~'J'~[/FONT]

Re: Экспорт координат X Y Z точек из AutoCada в Excel

Спасибо за исправления, теперь нормально когда не ставишь нумерацию координаты снимает все, т.е. все ок, но заметил такую особенность, по умолчанию он предлагает высоту текста 2.5, если ее меняешь на другую она не меняется(раньше не пробовал менять щас вот решил и заметил такую особенность), и еще, с проставлением нумерации, раньше такого точно не было, ваш лисп предлагает начальную нумерацию точек, по умолчанию с единицы, щас он на чертеже начинает на единицу меньше, т.е. если поставить 1 начнет с 0 если поставить 2 начнет с  1, а в csv пишет как положено, т.е. поставил начать с единицы - нумерует точки с единицы, поставил с 3-ки нумерует с тройки, причем количество точек на чертеже и в файле csv совпадает, не совпадает нумерация, на чертеже на 1 меньше. Влюбом случае ОГРОМНОЕ спасибо, главное для меня, что ВАША программа правильно снимает координаты мест пересечения полилиний.

Re: Экспорт координат X Y Z точек из AutoCada в Excel

qwerty пишет:

Спасибо за исправления, теперь нормально когда не ставишь нумерацию координаты снимает все, т.е. все ок, но заметил такую особенность, по умолчанию он предлагает высоту текста 2.5, если ее меняешь на другую она не меняется(раньше не пробовал менять щас вот решил и заметил такую особенность), и еще, с проставлением нумерации, раньше такого точно не было, ваш лисп предлагает начальную нумерацию точек, по умолчанию с единицы, щас он на чертеже начинает на единицу меньше, т.е. если поставить 1 начнет с 0 если поставить 2 начнет с 1, а в csv пишет как положено, т.е. поставил начать с единицы - нумерует точки с единицы, поставил с 3-ки нумерует с тройки, причем количество точек на чертеже и в файле csv совпадает, не совпадает нумерация, на чертеже на 1 меньше. Влюбом случае ОГРОМНОЕ спасибо, главное для меня, что ВАША программа правильно снимает координаты мест пересечения полилиний.

Спасибо за тест - будем искать :)

[FONT=Arial]~'J'~[/FONT]

Re: Экспорт координат X Y Z точек из AutoCada в Excel

fixo пишет:

но заметил такую особенность, по умолчанию он предлагает высоту текста 2.5, если ее меняешь на другую она не меняется(раньше не пробовал менять щас вот решил и заметил такую особенность), и еще, с проставлением нумерации, раньше такого точно не было, ваш лисп предлагает начальную нумерацию точек, по умолчанию с единицы, щас он на чертеже начинает на единицу меньше, т.е. если поставить 1 начнет с 0 если поставить 2 начнет с 1, а в csv пишет как положено, т.е. поставил начать с единицы - нумерует точки с единицы, поставил с 3-ки нумерует с тройки

Изменил код в посте #29, надеюсь финальный вариант

[FONT=Arial]~'J'~[/FONT]

Re: Экспорт координат X Y Z точек из AutoCada в Excel

Все отлично работает, все супер, огромное спасибо.

Re: Экспорт координат X Y Z точек из AutoCada в Excel

qwerty пишет:

Все отлично работает, все супер, огромное спасибо.

Спасибо за твою работу тоже
Рад, если годится в дело :)

[FONT=Arial]~'J'~[/FONT]