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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Помогите разобраться. При внесении расширенных данных в прямоугольник он (прямоугольник) искажается.

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

Ответ
Поиск в этой теме
Непрочитано 18.02.2017, 21:27 #1
Помогите разобраться. При внесении расширенных данных в прямоугольник он (прямоугольник) искажается.
AlexZh
 
Регистрация: 23.09.2015
Сообщений: 146

Здравствуйте!
Собственно вопрос в заголовке.

Программа следующая
Код:
[Выделить все]
 (defun c:1z_name_room (/	   vla_layer   old-textalignmode
		       old-textstyle	       modelspace  sset
		       obj	   name_obj    edata	   number_obj
		       le1	   le2	       textobj	   pointcoord
		       coords	   pnt	       pnt2	   ss
		       *error*
		      )
  (defun _dwgru-conv-ent-to-vla	(ent) ;|
*    Выполняет преобразование переданного указателя в vlax-вариант
*    Параметры вызова:
	ent	обрабатываемый указатель. Может быть:
	  ename
	  vla-object
	  строка (воспринимается как хендл примитива).
*    Примеры вызова:
(setq entity (entmakex (list (cons 0 "POINT") (cons 10 (getpoint)))))
(_dwgru-conv-ent-to-vla entity)	; #<VLA-OBJECT IAcadPoint 064ad294>
|;    (cond ((= (type ent) 'vla-object) ent)
	  ((= (type ent) 'ename) (vlax-ename->vla-object ent))
	  ((= (type ent) 'str)
	   (if (setq ent (handent ent))
	     (vlax-ename->vla-object ent)
	   ) ;_ end of if
	  )
	  (t nil)
    ) ;_ end of cond
  )
  (defun	qw (sset /	    acadobject acaddocument	     numspace
		 actspace   count      i	  n	     m
		 k	    summx      summy	  summareas  listx
		 listy	    listareas  objtype	  obj	     vla_region
		 CENTERPTLIST	       currarea	  ent	     pointobj
		 summxlist  summylist 
		) ;_ конец sset
   ;;; возвращает pointCoord - центр замкнутой фигуры
   (vl-load-com)
   (setq acadobject (vlax-get-acad-object))
   (setq acaddocument (vla-get-activedocument acadobject))
   (setq numspace (vla-get-activespace acaddocument))
   (cond
     ((= numspace 1) (setq actspace (vla-get-modelspace acaddocument)))
     ((= numspace 0) (setq actspace (vla-get-paperspace acaddocument)))
   ) ;_ конец cond
  
   (setq ent (ssname sset 0))
   (setq count	   (sslength sset)
	 i	   0
	 n	   0
	 m	   0
	 k	   0
	 summx	   0
	 summy	   0
	 summareas 0
	 listx	   (list)
	 listy	   (list)
	 listareas (list)
   ) ;_ конец setq
   (while (<= i (1- count))
     (setq objtype (cdr (assoc 0 (entget (ssname sset i)))))
     (setq obj (vlax-ename->vla-object (ssname sset i)))
     (if (= objtype "LWPOLYLINE")
       (progn (setq vla_region	(car (vlax-safearray->list
				       (vlax-variant-value
					 (vla-addregion
					   (vla-objectidtoobject
					     (vla-get-document obj)
					     (vla-get-ownerid obj)
					   ) ; _ конец
					     ; vla-objectidtoobject
					   (vlax-safearray-fill
					     (vlax-make-safearray
					       vlax-vbobject
					       (cons 0 (1- (length (list obj))))
					     ) ; _ конец
					       ; vlax-make-safearray
					     (list obj)
					   ) ; _ конец
					     ; vlax-safearray-fill
					 ) ;_ конец vla-addregion
				       ) ;_ конец vlax-variant-value
				     ) ;_ конец vlax-safearray->list
				) ;_ конец car
		    centerptlst	(vlax-safearray->list
				  (vlax-variant-value
				    (vla-get-centroid vla_region)
				  ) ;_ конец vlax-variant-value
				) ;_ конец vlax-safearray->list
		    currarea	(vla-get-area vla_region)
	      ) ;_ конец setq
	      (setq listx     (append listx (list (car centerptlst)))
		    listy     (append listy (list (cadr centerptlst)))
		    listareas (append listareas (list currarea))
	      ) ;_ конец setq
	      (vla-delete vla_region)
       ) ;_ конец progn
     ) ;_ конец if
     (if (= objtype "REGION")
       (progn (setq centerptlst	(vlax-safearray->list
				  (vlax-variant-value (vla-get-centroid obj))
				) ;_ конец vlax-safearray->list
		    currarea	(vla-get-area obj)
	      ) ;_ конец setq
	      (setq listx     (append listx (list (car centerptlst)))
		    listy     (append listy (list (cadr centerptlst)))
		    listareas (append listareas (list currarea))
	      ) ;_ конец setq
       ) ;_ конец progn
     ) ;_ конец if
     (if (or (= objtype "CIRCLE") (= objtype "ELLIPSE"))
       (progn (setq centerptlst	(vlax-safearray->list
				  (vlax-variant-value (vla-get-center obj))
				) ;_ конец vlax-safearray->list
		    currarea	(vla-get-area obj)
	      ) ;_ конец setq
	      (setq listx     (append listx (list (car centerptlst)))
		    listy     (append listy (list (cadr centerptlst)))
		    listareas (append listareas (list currarea))
	      ) ;_ конец setq
       ) ;_ конец progn
     ) ;_ конец if
     (setq i (1+ i))
   ) ;_ конец while
   (setq summxlist (mapcar '* listx listareas)
	 summylist (mapcar '* listy listareas)
   ) ;_ конец setq
   (foreach n summxlist (setq summx (+ summx n)))
   (foreach m summylist (setq summy (+ summy m)))
   (foreach k listareas (setq summareas (+ summareas k)))

   (setq	centerPtList (list (/ summX summAreas) (/ summY summAreas) 0)
	pointCoord   (ptnList->variantArray centerPtList)
	PointObj     (vla-addPoint ActSpace pointCoord)
  ) ;_ конец setq
   (princ)
 )
  (defun list_points (obj / bit idx)
;;; возвращает список точек в coords
  (load "_kpblc-conv-list-to-2dpoints")
  (load "_kpblc-conv-vla-to-list")
  (setq obj (_dwgru-conv-ent-to-vla obj))
  (setq	bit 0
	idx 0
  ) ;_ end of setq
  (foreach vertex (_kpblc-conv-list-to-2dpoints
		    (_kpblc-conv-vla-to-list (vla-get-coordinates obj))
		  ) ;_ конец _kpblc-conv-list-to-2dpoints
;;; Здесь ты делаешь то, что считаешь нужным
    (setq coords (cons
		   (cond
		     ((= bit 0) (list (+ (car vertex) 10.) (cadr vertex)))
		     ((= bit 1) (list (car vertex) (+ (cadr vertex) 10.)))
		     ((= bit 2) (list (- (car vertex) 10.) (cadr vertex)))
		     ((= bit 3) (list (car vertex) (- (cadr vertex) 10.)))
		   ) ;_ end of cond
		   coords
		 ) ;_ end of cons
	  bit	 (if (> bit 2)
		   0
		   (1+ bit)
		 ) ;_ end of if
    ) ;_ end of setq
  ) ;_ end of foreach
  (setq coords (apply (function append) (reverse coords)))
;;; И теперь чохом назначаешь все координаты в полилинию
  (vla-put-coordinates
    obj
    (vlax-make-variant
      (vlax-safearray-fill
	(vlax-make-safearray
	  vlax-vbdouble
	  (cons 0 (1- (length coords)))
	) ;_ end of vlax-make-safearray
	coords
      ) ;_ end of vlax-safearray-fill
    ) ;_ end of vlax-make-variant
  ) ;_ end of vla-put-Coordinates
  (vla-update obj)
)
  (defun makelayer
       (name colour linetype lineweight willplot bitflag description)
  ;; © Lee Mac 2010
  (or (tblsearch "LAYER" name)
      (entmake
	(append
	  (list
	    (cons 0 "LAYER")
	    (cons 100 "AcDbSymbolTableRecord")
	    (cons 100 "AcDbLayerTableRecord")
	    (cons 2 name)
	    (cons 70 bitflag)
	    (cons 290
		  (if willplot
		    1
		    0
		  ) ;_ конец if
	    ) ;_ конец cons
	    (cons 6
		  (if (and linetype (tblsearch "LTYPE" linetype))
		    linetype
		    "CONTINUOUS"
		  ) ;_ конец if
	    ) ;_ конец cons
	    (cons 62
		  (if (and colour (< 0 (abs colour) 256))
		    colour
		    7
		  ) ;_ конец if
	    ) ;_ конец cons
	    (cons 370
		  (fix (* 100
			  (if (and lineweight (<= 0.0 lineweight 2.11))
			    lineweight
			    0.0
			  ) ;_ конец if
		       ) ;_ конец *
		  ) ;_ конец fix
	    ) ;_ конец cons
	  ) ;_ конец list
	  (if description
	    (list (list	-3
			(list "AcAecLayerStandard"
			      (cons 1000 "")
			      (cons 1000 description)
			) ;_ конец list
		  ) ;_ конец list
	    ) ;_ конец list
	  ) ;_ конец if
	) ;_ конец append
      ) ;_ конец entmake
  ) ;_ конец or
)
  (defun _dwgru-conv-value-vla-to-list (value)
                                     ;|
*    Преобразование vlax-variant и vlax-safearray в обычный список.
*    Примеры вызова:
;; #1:
(setq point (vla-addpoint (vla-get-ModelSpace (vla-get-ActiveDocument (vlax-get-acad-object))) (vlax-3d-point (getpoint))))
(_dwgru-conv-value-vla-to-list (vla-get-Coordinates point))	; '(1232.24 544.835 0.0)

;; #2:
(setq ent1 (vlax-ename->vla-object (entmakex '(list (0 . "LINE") (10 574.761 426.116 0.0) (11 1054.08 878.378 0.0))))
 ent2 (vlax-ename->vla-object (entmakex '((0 . "LINE") (10 967.833 561.795 0.0) (11 779.78 335.664 0.0)))))
(_dwgru-conv-value-vla-to-list (vla-IntersectWith ent1 ent2 acExtendNone))	; nil
(_dwgru-conv-value-vla-to-list (vla-IntersectWith ent1 ent2 acExtendBoth))	; '(1876.15 1654.04 0.0)
|;
  (cond
    ((= (type value) 'variant)
     (_dwgru-conv-value-vla-to-list (vlax-variant-value value))
     )
    ((= (type value) 'safearray)
     (if (>= (vlax-safearray-get-u-bound value 1) 0)
       (vlax-safearray->list value)
       ) ;_ end of if
     )
    (t value)
    ) ;_ end of cond
  )
  (load "bgtools")
(princ)
(defun error ()		      ;load function
  (prompt "\nGlobal Error Trap Loaded") ;inform user
  (princ)
)			      ;defun
;;;*==========================================================
(defun initerr (/ )	      ;init error
  (setq oldlayer (getvar "clayer")) ;save settings
  (setq oldcolor (getvar "CECOLOR"))
  (setq oldaperture (getvar "APERTURE"))
  (setq oldceltype (getvar "Celtype"))
  (setq oldlinecel (getvar "CELWEIGHT"))
  (setq oldsnap (getvar "osmode"))
  (setq oldpick (getvar "pickbox"))
  (setq oldpickstyle (getvar "pickstyle"))
  (setq oldaperture (getvar "aperture"))
  (setq oldedgemode (getvar "edgemode"))
  (setq oldosmode (getvar "osmode"))
  (bg:layer-status-save)
  (setq temperr *error*)      ;save *error*
  (setq *error* trap)	      ;reassign *error*
  (princ)
)			      ;defun
;;;*===========================================================
(defun trap (errmsg)	      ;define trap
  (if command-s
    (command-s)
    (command)
  ) ;_ конец if
  (if (not (member errmsg '("console break" "Function Cancelled")))
    (princ (strcat "\nError: " errmsg)) ;print message
  ) ;_ конец if
  (if command-s
    (command-s "_undo" "_b")
    (command "_undo" "_b")
  )			      ;undo back
  (setvar "clayer" oldlayer)  ;reset settings
  (setvar "CECOLOR" oldcolor)
  (setvar "Celtype" oldceltype)
  (setvar "CELWEIGHT" oldlinecel)
  (setvar "blipmode" 0)
  (setvar "menuecho" 0)
  (setvar "highlight" 1)
  (setvar "osmode" oldsnap)
  (setvar "pickstyle" oldpickstyle)
  (setvar "pickbox" oldpick)
  (setvar "aperture" oldaperture)
  (setvar "edgemode" oldedgemode)
  (bg:layer-status-restore)
  (princ "\nError Resetting Enviroment ") ;inform user
  (terpri)
  (setq *error* temperr)      ;restore *error*
  (princ)
)			      ;defun
;;;*===========================================================
(defun reset ()		      ;define reset
  (setq *error* temperr)      ;restore *error*
  (setvar "clayer" oldlayer)  ;reset settings
  (setvar "CECOLOR" oldcolor)
  (setvar "Celtype" oldceltype)
  (setvar "CELWEIGHT" oldlinecel)
  (setvar "blipmode" 0)
  (setvar "menuecho" 0)
  (setvar "highlight" 1)
  (setvar "osmode" oldsnap)
  (setvar "pickstyle" oldpickstyle)
  (setvar "pickbox" oldpick)
  (setvar "aperture" oldaperture)
  (setvar "edgemode" oldedgemode)
  (bg:layer-status-restore)
  
  (princ)
)			      ;defun
;;;*======================================================
(princ)
 ;|«Visual LISP© Format Options»
(72 2 30 2 T "конец " 72 9 1 1 0 T nil T T)
;*** НЕ добавляйте текст под комментариями! ***|;

  (initerr)
  (if command-s
    (command-s "_undo" "_m")
    (command "_undo" "_m")
  )
  (setq old-textalignmode (getvar "TEXTALIGNMODE"))
  (setq old-textstyle (getvar "TEXTSTYLE"))
  (setvar "TEXTALIGNMODE" 10)
  (setvar "TEXTSTYLE" "Standard")
  (makelayer "1Z_Edit_room_floor" 110 nil 0.5 nil 0 nil)
  (setq	vla_layer
	 (vla-add (vla-get-layers
		    (vla-get-activedocument (vlax-get-acad-object))
		  ) ;_ конец vla-get-layers
		  "1Z_Edit_room_floor"
	 ) ;_ end of vla-add
  ) ;_ конец setq
  (if (vla-get-lock vla_layer)
    (vla-put-lock vla_layer :vlax-false)
  ) ;_ конец if
  (if (equal (vla-get-freeze vla_layer) :vlax-true)
    (vla-put-freeze vla_layer :vlax-false)
  ) ;_ конец if
  (setq	modelspace
	 (vla-get-modelspace
	   (vla-get-activedocument (vlax-get-acad-object))
	 ) ;_ конец vla-get-ModelSpace
  ) ;_ конец setq
  (if (null obj_edata)
    (progn (initget 1 "Этаж Помещение Шкаф")
	   (setq obj_edata (getkword "[Этаж/Помещение/Шкаф]: "))
    ) ;_ конец progn
  ) ;_ конец if
  (setq name_obj nil)
  (setq sset nil)
  (while (null sset)
    (princ "\nВыберите линию контура: [Enter - тип объекта]")
    (setq sset (ssget '((-4 . "<OR")
			(0 . "CIRCLE")
			(0 . "ELLIPSE")
			(-4 . "<AND")
			(0 . "LWPOLYLINE")
			(-4 . "AND>")
			(0 . "REGION")
			(-4 . "OR>")
		       )
	       ) ;_ конец ssget
    ) ;_ конец setq
    (if	(null sset)
      (progn (initget 1 "Этаж Помещение Шкаф")
	     (setq obj_edata (getkword "[Этаж/Помещение/Шкаф]: "))
      ) ;_ конец progn
    ) ;_ конец if
  ) ;_ конец while
  (qw sset)		      ; возвращает возвращает pointCoord -
			      ; центр
			      ; замкнутой
			      ; фигуры
  (setq obj (ssname sset 0))
  (if (setq le1 (entget (ssname sset 0)))
    (progn
      (setq prnstr   (strcat "\n"
			     obj_edata
			     ": \nВыберите наименование"
			     ": (Enter - ввод вручную)"
		     ) ;_ конец strcat
	    name_obj (car (entsel prnstr))
      ) ;_ конец setq
      (if (equal obj_edata "Помещение")
	(progn
	  (regapp "Помещения")
	  (if name_obj
	    (setq name_obj (vla-get-textstring
			     (vlax-ename->vla-object
			       name_obj ;_ конец car
			     ) ;_ конец vlax-ename->vla-object
			   ) ;_ конец vla-get-textstring
	    ) ;_ конец setq
	    (setq
	      name_obj (getstring t
				  "\nВведите наименование помещения: "
		       )      ; _
			      ; конец
			      ; getstring
	    ) ;_ конец setq
	  ) ;_ конец if
	  (if (not (setq number_obj
			  (car
			    (entsel
			      "\nВыберите номер помещения: [Enter - ввод вручную]"
			    ) ;_ конец entsel
			  ) ;_ конец car
		   ) ;_ конец setq
	      ) ;_ конец not
	    (setq number_obj
		   (getstring t "\nВведите номер помещения: ") ; _
			      ; конец
			      ; getstring
	    ) ;_ конец setq
	  ) ;_ конец setq
	  (if (equal (type number_obj) 'ename)
	    (setq number_obj
		   (vla-get-textstring
		     (vlax-ename->vla-object
		       number_obj ;_ конец car
		     ) ;_ конец vlax-ename->vla-object
		   ) ;_ конец vla-get-textstring
	    ) ;_ конец setq
	  ) ;_ конец if
	  (if (and name_obj number_obj)
	    (setq name_obj (strcat name_obj ", пом. " number_obj)
		  edata	   (list
			     (list -3 (list "Помещения" (cons 1000 name_obj)))
			   ) ;_ конец list
	    ) ;_ конец setq
	    (princ "Не заданы данные по помещению")
	  ) ;_ конец if
 ;_ конец list
	) ;_ конец setq
	(if (equal obj_edata "Этаж")
	  (progn (regapp "Этажи")
		 (if name_obj
		   (setq name_obj (vla-get-textstring
				    (vlax-ename->vla-object
				      name_obj ;_ конец car
				    ) ;_ конец vlax-ename->vla-object
				  ) ;_ конец vla-get-textstring
		   ) ;_ конец setq
		   (setq name_obj
			  (getstring t "\nВведите наименование этажа: ")
			      ; _
			      ; конец
			      ; car
		   ) ;_ конец setq
		 ) ;_ конец setq
		 (if name_obj
		   (setq edata
			  (list	(list -3 (list "Этажи" (cons 1000 name_obj)))
			  )   ; _
			      ; конец
			      ; list
		   ) ;_ конец setq
		   (princ "Не заданы данные по этажу")
		 ) ;_ конец if
	  ) ;_ конец progn
	  (if (equal obj_edata "Шкаф")
	    (progn (regapp "Шкафы")
		   (if name_obj
		     (setq name_obj (vla-get-textstring
				      (vlax-ename->vla-object
					name_obj ;_ конец car
				      ) ; _ конец
			      ; vlax-ename->vla-object
				    ) ;_ конец vla-get-textstring
		     ) ;_ конец setq
		     (setq
		       name_obj	(getstring t
					   "\nВведите наименование шкафа: "
				) ; _
			      ; конец
			      ; car
		     ) ;_ конец setq
		   ) ;_ конец if
		   (if name_obj
		     (setq edata
			    (list
			      (list -3 (list "Шкафы" (cons 1000 name_obj)))
			    ) ;_ конец list
		     ) ;_ конец setq
		     (princ "Не заданы данные по этажу")
		   ) ;_ конец setq
	    ) ;_ конец progn
	  ) ;_ конец if
	) ;_ конец if
      ) ;_ конец if
      (setq le2 (append le1 edata))
      (entmod le2)
      (setq
	pnt (list (car (_dwgru-conv-value-vla-to-list pointcoord))
		  (cadr (_dwgru-conv-value-vla-to-list pointcoord))
	    ) ;_ конец list
      ) ;_ конец setq
      (setq pnt2
	     (list (+ (/ 10 (getvar "CANNOSCALEVALUE"))
		      (car (_dwgru-conv-value-vla-to-list pointcoord))
		   ) ;_ конец +
		   (- (/ 10 (getvar "CANNOSCALEVALUE"))
		      (cadr (_dwgru-conv-value-vla-to-list pointcoord))
		   ) ;_ конец -
	     ) ;_ конец list
      ) ;_ конец setq
      (if (setq	ss
		 (ssget	"_C"
			pnt
			pnt2
			(list (cons 0 "*TEXT") (cons 8 "1Z_Edit_room_floor"))
		 ) ;_ конец ssget
	  ) ;_ конец setq
	(progn (sslength ss) (entdel (ssname ss 0)))
      ) ;_ конец if
      (vla-put-layer (_dwgru-conv-ent-to-vla obj) "1Z_Edit_room_floor")
      (if (equal obj_edata "Помещение")
	(vla-put-color (_dwgru-conv-ent-to-vla obj) 110)
      ) ;_ конец if
      (if (equal obj_edata "Этаж")
	(vla-put-color (_dwgru-conv-ent-to-vla obj) 150)
      ) ;_ конец if
      (if (equal obj_edata "Шкаф")
	(vla-put-color (_dwgru-conv-ent-to-vla obj) 120)
      ) ;_ конец if
      (setq textobj (vla-addtext
		      modelspace
		      name_obj
		      pointcoord
		      (/ 1 (getvar "CANNOSCALEVALUE"))
		    ) ;_ конец vla-addtext
      ) ;_ конец setq
      (if (equal obj_edata "Помещение")
	(vla-put-color textobj 110)
      ) ;_ конец if
      (if (equal obj_edata "Этаж")
	(vla-put-color textobj 150)
      ) ;_ конец if
      (if (equal obj_edata "Шкаф")
	(vla-put-color textobj 120)
      ) ;_ конец if
      (setq coords nil)
      (list_points obj)
      (vla-put-layer textobj "1Z_Edit_room_floor")
      (vla-put-lock vla_layer :vlax-true)
      (setvar "TEXTALIGNMODE" old-textalignmode)
      (setvar "TEXTSTYLE" old-textstyle)
    ) ;_ конец progn
  ) ;_ конец if
  (reset)
) ;_ конец defun
;|«Visual LISP© Format Options»
(72 2 30 2 T "конец " 72 9 1 1 0 T nil T T)
;*** НЕ добавляйте текст под комментариями! ***|;
Просмотров: 2219
 
Непрочитано 19.02.2017, 01:59
#2
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,004


вы предлагаете изучать простыню из десятка страниц кода?) Чудес не бывает, проверяйте все фрагменты, работающие на изменение координат вершин описания полилинии-прямоугольника - т.е. это группы с кодом 10 в группе DXF кодов LWPOLYLINE.
Сергей812 вне форума  
 
Непрочитано 19.02.2017, 02:29
#3
Enik

ГИП
 
Регистрация: 07.06.2015
Сообщений: 1,254


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
проверяйте все фрагменты
И метод проверки лучше использовать самый простой. Перегоняешь координаты в переменные и выводишь их на печать. И ставишь эту строчку кода в разные места программы, чтобы понять, начиная с какого места всё пошло не так.
Enik вне форума  
 
Автор темы   Непрочитано 21.02.2017, 10:07
#4
AlexZh


 
Регистрация: 23.09.2015
Сообщений: 146


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
вы предлагаете изучать простыню из десятка страниц кода?) Чудес не бывает, проверяйте все фрагменты, работающие на изменение координат вершин описания полилинии-прямоугольника - т.е. это группы с кодом 10 в группе DXF кодов LWPOLYLINE.
я, примерно, такой ответ и ожидал!)))
AlexZh вне форума  
 
Непрочитано 28.02.2017, 04:59
#5
480725


 
Регистрация: 06.10.2007
Москва
Сообщений: 132


Цитата:
Сообщение от AlexZh Посмотреть сообщение
он (прямоугольник) искажается
По тексту вопроса имеется первоначально неискаженный прямоугольник, затем в него вносятся расширенные данные и он искажается.
Для иллюстрации явления можно привести где-то до 10 строк кода: построение прямоугольника и внесение в него расширенных данных.
Ну, и пояснить в чем искажение. С некоторой долей вероятности по ходу все прояснится, в таком случае желательно сообщить в чем была проблема.
480725 вне форума  
 
Непрочитано 28.02.2017, 09:28
#6
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,004


В 164 строке комментарий - ";;; И теперь чохом назначаешь все координаты в полилинию". Что делает фрагмент кода до этого комментария?
Сергей812 вне форума  
 
Непрочитано 28.02.2017, 09:39
#7
Кулик Алексей aka kpblc
Moderator

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


М-да... Посмотрел код.
1. Получение активного пространства не учитывает варианта "находимся в модели, зайдя через ВЭ"
2. Код дополнительных функций не предоставлен.
3. Почему в list_points выполняется изменение координат? А если это надо, то чему ты удивляешься?

----- добавлено через ~2 мин. -----
4. Работа с системными переменными (ИМХО) за гранью добра и зла.
5. Странно обрабатывается (vla-get-lock vla_layer).

Ну и по мелочи...
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 28.02.2017, 10:07
#8
AlexZh


 
Регистрация: 23.09.2015
Сообщений: 146


Ребята, спасибо большое за ответы.

Разобрался в чем дело. Искажение происходит после функции list_points, если честно, не помню зачем ее использовал, просто ее удалил.

к Кулик Алексей aka kpblc, да программирую, как дилетант), как говорится, как и умею. В результате чего частенько сталкиваюсь с ошибками разного уровня. Потихоньку и в процессе обучаюсь.

по твоим пунктам, если не сложно, хотелось бы поподробнее. может еще кому-то пригодится.
AlexZh вне форума  
 
Непрочитано 28.02.2017, 10:42
#9
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,004


и пишите больше комментариев в коде - если сейчас в процессе программирования с трудом ориентируетесь в собственном коде, через несколько месяцев при необходимости доработать вообще не вспомните что делали.
Сергей812 вне форума  
 
Автор темы   Непрочитано 28.02.2017, 10:53
#10
AlexZh


 
Регистрация: 23.09.2015
Сообщений: 146


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
и пишите больше комментариев в коде - если сейчас в процессе программирования с трудом ориентируетесь в собственном коде, через несколько месяцев при необходимости доработать вообще не вспомните что делали.
вот с этим я сталкиваюсь постоянно)
AlexZh вне форума  
 
Непрочитано 01.03.2017, 08:15
#11
Кулик Алексей aka kpblc
Moderator

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


1. Перейди в лист. Двойной клик внутри видового экрана. Твой код будет считать, что ты в листе, хотя ты в модели.
2. У тебя в коде были строки (load "_kpblc-чего-то-там"). Файлов нет. Мало того, как минимум одна функция дублируется библиотекой dwgru
3. Ну, это уже разобрались
4. Все свои изменения системных переменных достаточно загнать в список и не множить лишних переменных
5. Сравни:
(alert (if (vla-get-lock layer) "Locked" "Normal"))
(alert (if (equal (vla-get-locked layer) :vlax-true) "equal Locked" "equal Normal"))

----- добавлено через 35 сек. -----
Ну и добро пожаловать в http://forum.dwg.ru/showthread.php?t=22894
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Помогите разобраться. При внесении расширенных данных в прямоугольник он (прямоугольник) искажается.

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Какой язык перспективен для инженера-конструктора с условием The_Mercy_Seat Программирование 705 17.03.2021 14:19
Помогите разобраться в причине ошибки в AutoCAD 2017 в создании связи с файлом Excle Роман Амосов AutoCAD 2 17.10.2016 14:22
Ребят, помогите разобраться с нахождением усилий по линиям влияния belan_es Прочее. Архитектура и строительство 5 31.05.2015 12:28
"В точке ... создана линия нулевой длины" помогите разобраться Mozgunov Программирование 18 27.11.2008 01:14
Вопрос про внесение расширенных данных в примитив. X28 Программирование 14 23.07.2005 16:30