Advertisement
Guest User

Untitled

a guest
Jan 23rd, 2017
145
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ;1. dokonaa selekcji poligonalnej, obiekty musz1 sie w ca3o?ci mie?cia w oknie
  2. ;2. pozostawia tylko te, których sumaryczne pole >460
  3. ;3. dodaa warstwe "wynik" i przenie?a na ni1 selekcje
  4. ;4. wy31czya pozosta3e warstwy
  5.  
  6. ;1. Create a polygonal selection. The selected objects have to be completly inside the selection
  7. ;2. Leave only those, whose total area is > 460
  8. ;3. Add a layer "result" and move the selection to it
  9. ;4. Disable/hide the other layers
  10.  
  11. (setq application (vlax-get-acad-object))
  12. (setq active_document (vla-get-activedocument application))
  13. (setq document_blocks (vla-get-Blocks active_document))
  14. (setq layers (vla-get-layers active_document))
  15.  
  16. (defun uniq (lst / out)
  17.   (while lst
  18.     (setq out (cons (car lst) out))
  19.     (setq lst (vl-remove (car lst) (cdr lst))))
  20.   (reverse out))
  21.  
  22. (defun ConvList_to_VariantArray (InList SAType / LengthList i iList)
  23.     (setq LengthList (length InList))
  24.     (setq OutSaveArray (vlax-make-safearray SAType (cons 0 (1- LengthList))))
  25.     (setq i 0)
  26.     (repeat LengthList
  27.         (setq iList (nth i InList))
  28.         (vlax-safearray-put-element OutSaveArray i iList)
  29.         (setq i (1+ i)))
  30.   (vlax-make-variant OutSaveArray))
  31.  
  32. (defun get_model_space ( / application active_document)
  33.   (setq application (vlax-get-acad-object))
  34.   (setq active_document (vla-get-activedocument application))
  35.   (vlax-get-property active_document 'ModelSpace))
  36.  
  37. (defun get_model_space_objects ()
  38.   (object_to_list (get_model_space)))
  39.  
  40. (defun id_to_object (object_id / application active_document)
  41.   (setq application (vlax-get-acad-object))
  42.   (setq active_document (vla-get-activedocument application))
  43.   (vla-ObjectIDToObject active_document object_id))
  44.  
  45. (defun get_points (num_points / points_list)
  46.   (setq points_list nil)
  47.   (repeat num_points
  48.     (setq points_list
  49.       (append points_list (getpoint))))
  50.   points_list)
  51.  
  52. (defun create_selection ( / application active_document selection_sets)
  53.   (setq application (vlax-get-acad-object))
  54.   (setq active_document (vla-get-activedocument application))
  55.   (setq selection_sets (vla-get-SelectionSets active_document))
  56.   ;(vla-Add selection_sets "SelAll2")    ;uncomment if needed
  57.   (vla-item selection_sets "SelAll2"))
  58.  
  59. (defun add_polygon_to_selection (sel sel_points / filter_type filter_data)
  60.   (setq filter_type (ConvList_to_VariantArray (list 8) vlax-vbInteger))
  61.   (setq filter_data (ConvList_to_VariantArray (list (vlax-make-variant "0")) vlax-vbVariant))
  62.   (vla-clear sel)
  63.   (vla-SelectByPolygon sel acSelectionSetWindowPolygon
  64.     (ConvList_to_VariantArray sel_points vlax-vbDouble) filter_type filter_data))
  65.  
  66. (defun object_to_list (object / result)
  67.   (setq result nil)
  68.   (vlax-for element object
  69.     (setq result (append result (list element))))
  70.   result)
  71.  
  72. (defun get_named_block (block_name)
  73.   (vla-item document_blocks block_name))
  74.  
  75. (defun get_shape_area (object)
  76.   (if (vlax-property-available-p object 'Area)
  77.     (vla-get-area object)
  78.     0.0))
  79.    
  80. (defun sum_list (list / sum)
  81.   (setq sum 0)
  82.   (foreach x list
  83.     (setq sum (+ sum x)))
  84.   sum)
  85.  
  86. (defun get_block_area (block / areas shapes)
  87.   (setq area 0)
  88.   (setq shapes (object_to_list block))
  89.   (setq areas (mapcar 'get_shape_area shapes))
  90.   (sum_list areas))
  91.  
  92. (defun block_predicate (block / area)
  93.   (setq area (get_block_area block))
  94.   (< area 460))
  95.  
  96. (defun get_valid_blocks ()
  97.   (setq sel_points (get_points 4))
  98.   (setq selection (create_selection))
  99.   (add_polygon_to_selection selection sel_points)
  100.   (setq selected_references (object_to_list selection))
  101.   (setq selected_block_names (mapcar 'vla-get-effectivename selected_references))
  102.   (setq selected_block_names (uniq selected_block_names))
  103.   (setq selected_blocks (mapcar 'get_named_block selected_block_names))
  104.   (vl-remove-if 'block_predicate selected_blocks))
  105.  
  106. (defun hide_all_layers ()
  107.   (vlax-for layer layers
  108.     (vla-put-layeron layer :vlax-false)))
  109.  
  110. (defun create_layer (layer_name)
  111.   (vla-add layers layer_name)
  112.   (vla-item layers layer_name))
  113.  
  114. (defun move_reference_to_layer (object layer_name)
  115.   (vla-put-layer object layer_name))
  116.  
  117.  
  118. ;(foreach block selected_blocks
  119. ;  (setq area (get_block_area block))
  120. ;  (print block)
  121. ;  (print area))
  122.  
  123. (setq valid_blocks (get_valid_blocks))
  124. (setq valid_block_names (mapcar 'vla-get-name valid_blocks))
  125.  
  126. (hide_all_layers)
  127. (create_layer "result")
  128.  
  129. (foreach reference selected_references
  130.   (setq name (vla-get-effectivename reference))
  131.   (if (member name valid_block_names)
  132.     (move_reference_to_layer reference "result")))
  133.  
  134. (print "wheee")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement