Добавление точек к существующей геометрии

У меня есть файл dxf 2D-геометрии, созданный в AutoCAD, и я хотел бы добавить точки на линии существующей геометрии. Список добавляемых точек находится в текстовом файле. введите здесь описание изображения

Например, я хочу добавить 10 точек на линии между 3 и 2 на изображении выше. Координаты (x,y) 10 точек представлены в текстовом файле. Есть ли способ импортировать и привязать координаты близко к границе (/ линии), потому что координаты получены на этапе предварительной обработки и могут немного отличаться от фактических точек на 3-2.

Любые предложения будут очень полезны!


person Natasha    schedule 10.05.2020    source источник


Ответы (1)


В основном это будет примерно так:

 (defun C:ImportPoints (  / path coordinates askForFile loadPoints draw
 *error* )  (defun *error* ( msg / ) 
     (if (not (null msg ) ) (progn (princ "\nC:ImportPoints:*error*: " ) (princ msg ) (princ "\n")  ) )
 )
  (defun askForFile (  / 
      *error* ) (defun *error* ( msg / ) 
          (if (not (null msg ) )    (progn (princ "\naskForFile:*error*: " ) (princ msg ) (princ "\n")  ) )
      )
      (getfiled "Select the file with coordinates" "txt" 2)
  )

  (defun loadPoints ( path / 
      *error* ) (defun *error* ( msg / ) 
          (if (not (null msg ) )    (progn (princ "\nLoadPoints:*error*: " ) (princ msg ) (princ "\n")  ) )
      )  

    (setq filedesc (open Path "r"))
    (if filedesc(progn 
        (setq OutList (list))
        (setq linia(read-line filedesc))
        (while linia
        (progn
            (setq OutList (append OutList (list linia)))
            (setq linia (read-line filedesc))
        ))
        (close filedesc )
    ))  
    OutList
  )

  (defun draw ( coordinates / 
      *error* ) (defun *error* ( msg / ) 
          (if (not (null msg ) )    (progn (princ "\ndraw:*error*: " ) (princ msg ) (princ "\n")    ) )
      )
      (setq lastOSMODE (getvar "OSMODE"))
      (setvar "OSMODE" 512) ; 512 nearest
      (foreach % coordinates
        (command "_POINT" %)
      )
      (setvar "OSMODE" lastOSMODE ) ; ensure You didn't change anything in user settings
  )   


 (setq path (askForFile) )
 (setq coordinates (LoadPoints path) )
 (draw coordinates)

)

Вы должны знать, что это основной «скелет» функциональности. Основные функции, которые вы должны использовать:

(getfiled ...) - что позволяет выбрать файл

(setvar "OSMODE" 512) - какие точки будут на линии

(command "_POINT" coordinates) который будет рисовать точку Результат также будет зависеть от формата координат в файле. Ожидается 2 или 3 координаты, разделенные ,, а десятичная должна быть разделена . Я не помню, но, возможно, это зависит от ваших локальных настроек.

person CAD Developer    schedule 11.05.2020