乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 58|回复: 12

[编程交流] 软选择/比例编辑

[复制链接]

16

主题

69

帖子

54

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
80
发表于 2022-7-5 17:42:35 | 显示全部楼层 |阅读模式
在Maya中,它被称为软选择。在Blender中,它被称为比例编辑模式。我正在寻找一种工具,可以让我移动夹点,使附近的所有顶点朝同一方向移动。移动量取决于距离选定夹点的距离以及设置衰减的锐度。
 
一些视频让你了解我在说什么:
软选择-
比例编辑-
 
总体思路是,当用户选择夹点时,LISP将搜索最大衰减范围内的所有有效顶点。接下来,当用户移动(或缩放,缩放也会很酷)该夹点时,每个受影响的顶点都会以目标顶点移动距离的百分比向该方向移动,这取决于它与该目标顶点的距离。
 
如果还有一个选项允许代码仅影响作为同一多段线的一部分连接到目标顶点的线,则会获得额外的分数。如果代码被大量注释,那么我可以看到发生了什么,这将获得额外的加分。这个节目太离谱了,我真的很想知道怎么做。
 
 
**编辑**
我不在乎它是否在3d中工作。在使用AutoCAD时,我通常只使用2d。
回复

使用道具 举报

5

主题

1334

帖子

1410

银币

限制会员

铜币
-20
发表于 2022-7-5 17:52:29 | 显示全部楼层
你好我想我已经使用了直观的变量名,所以我没有对代码进行注释,但是如果你不理解什么,只要问一下。。。我和其他人可能会给你正确的解释。。。
 
  1. (defun c:softselvertmod ( / *error* barycent *adoc* ucsf osm 3dosm ss e ch pl p vl c r v v1 vln eg ex xx p1 p2 rf gr ux uy uc )
  2. (vl-load-com)
  3. (defun *error* ( m )
  4.    (if ucsf
  5.      (command "_.UCS" "_P")
  6.    )
  7.    (if osm
  8.      (setvar 'osmode osm)
  9.    )
  10.    (if 3dosm
  11.      (setvar '3dosmode 3dosm)
  12.    )
  13.    (vla-endundomark *adoc*)
  14.    (if m
  15.      (prompt m)
  16.    )
  17.    (princ)
  18. )
  19. (defun barycent ( l )
  20.    (mapcar '(lambda ( x ) (/ x (length l))) (list (apply '+ (mapcar 'car l)) (apply '+ (mapcar 'cadr l)) (apply '+ (mapcar 'caddr l))))
  21. )
  22. (vla-startundomark (setq *adoc* (vla-get-activedocument (vlax-get-acad-object))))
  23. (if (= (getvar 'worlducs) 0)
  24.    (progn
  25.      (command "_.UCS" "_W")
  26.      (setq ucsf t)
  27.    )
  28. )
  29. (setq osm (getvar 'osmode))
  30. (if (getvar '3dosmode)
  31.    (setq 3dosm (getvar '3dosmode))
  32. )
  33. (prompt "\nPick editable entity for softselvertmod (SPLINE,POLYLINE,MESH,POLYFACE MESH) on unlocked layer...")
  34. (setq ss (ssget "_+.:E:S:L" '((0 . "*POLYLINE,SPLINE,MESH"))))
  35. (while (not ss)
  36.    (prompt "\nMissed - empty sel.set... Please pick editable entity for softselvertmod (SPLINE,POLYLINE,MESH,POLYFACE MESH) on unlocked layer...")
  37.    (setq ss (ssget "_+.:E:S:L" '((0 . "*POLYLINE,SPLINE,MESH"))))
  38. )
  39. (setq e (ssname ss 0))
  40. (initget "Move-Stretch Twist Scale-Shrink")
  41. (setq ch (getkword "\nChoose mode [Move-Stretch/Twist/Scale-Shrink] <Move-Stretch> : "))
  42. (if (null ch)
  43.    (setq ch "Move-Stretch")
  44. )
  45. (cond
  46.    ( (= ch "Move-Stretch")
  47.      (cond
  48.        ( (= (cdr (assoc 0 (entget e))) "LWPOLYLINE")
  49.          (setq pl (mapcar '(lambda ( p ) (trans (list (car p) (cadr p) (cdr (assoc 38 (entget e)))) e 0)) (mapcar 'cdr (vl-remove-if-not '(lambda ( x ) (= (car x) 10)) (entget e)))))
  50.          (command "_.UCS" "_E" e)
  51.          (while (< 0 (getvar 'cmdactive))
  52.            (command "")
  53.          )
  54.          (setvar 'osmode 1)
  55.          (while (setq p (getpoint "\nPick or specify main vertex-vertices for softselvertmod - ENTER TO FINISH : "))
  56.            (setq vl (cons (trans p 1 0) vl))
  57.            (print (trans p 1 0))
  58.          )
  59.          (setvar 'osmode 0)
  60.          (setq c (barycent vl))
  61.          (prompt "\nPick or specify radius of softselvertmod : ")
  62.          (command "_.CIRCLE" "_non" (trans c 0 1) "\")
  63.          (setq r (cdr (assoc 40 (entget (entlast)))))
  64.          (entdel (entlast))
  65.          (setq p1 (getpoint (trans c 0 1) "\nPick or specify start point of vector of softselvertmod : "))
  66.          (setq p2 (getpoint p1 "\nPick or specify end point of vector of softselvertmod : "))
  67.          (setq v (mapcar '- (trans p2 1 0) (trans p1 1 0)))
  68.          (setq v1 (mapcar '/ v (list (distance '(0.0 0.0 0.0) v) (distance '(0.0 0.0 0.0) v) (distance '(0.0 0.0 0.0) v))))
  69.          (setq vl (vl-remove-if-not '(lambda ( x ) (< (distance c x) r)) pl))
  70.          (command "_.UCS" "_3P" "_non" p1 "_non" p2 "")
  71.          (setq eg (entget e))
  72.          (while (= 5 (car (setq gr (grread t))))
  73.            (setq v (mapcar '* v1 (list (car (cadr gr)) (car (cadr gr)) (car (cadr gr)))))
  74.            (setq vln (mapcar '(lambda ( p ) (mapcar '+ p (mapcar '* v (list (/ (- r (distance c p)) r) (/ (- r (distance c p)) r) (/ (- r (distance c p)) r))))) vl))
  75.            (setq ex (mapcar '(lambda ( x / xx ) (if (setq xx (vl-member-if '(lambda ( y ) (equal (cdr x) (mapcar '+ '(0.0 0.0) (trans y 0 e)) 1e-6)) vl)) (cons 10 (mapcar '+ '(0.0 0.0) (trans (nth (vl-position (car xx) vl) vln) 0 e))) x)) eg))
  76.            (entupd (cdr (assoc -1 (entmod ex))))
  77.          )
  78.          (command "_.UCS" "_P")
  79.          (command "_.UCS" "_P")
  80.        )
  81.        ( (and (= (cdr (assoc 0 (entget e))) "POLYLINE") (= "AcDb2dPolyline" (cdr (assoc 100 (reverse (entget e)))))) ;;; - it's old heavy 2D POLYLINE
  82.          (command "_.CONVERTPOLY" "_L" e)
  83.          (while (< 0 (getvar 'cmdactive))
  84.            (command "")
  85.          )
  86.          (setq pl (mapcar '(lambda ( p ) (trans (list (car p) (cadr p) (cdr (assoc 38 (entget e)))) e 0)) (mapcar 'cdr (vl-remove-if-not '(lambda ( x ) (= (car x) 10)) (entget e)))))
  87.          (command "_.UCS" "_E" e)
  88.          (while (< 0 (getvar 'cmdactive))
  89.            (command "")
  90.          )
  91.          (setvar 'osmode 1)
  92.          (while (setq p (getpoint "\nPick or specify main vertex-vertices for softselvertmod - ENTER TO FINISH : "))
  93.            (setq vl (cons (trans p 1 0) vl))
  94.            (print (trans p 1 0))
  95.          )
  96.          (setvar 'osmode 0)
  97.          (setq c (barycent vl))
  98.          (prompt "\nPick or specify radius of softselvertmod : ")
  99.          (command "_.CIRCLE" "_non" (trans c 0 1) "\")
  100.          (setq r (cdr (assoc 40 (entget (entlast)))))
  101.          (entdel (entlast))
  102.          (setq p1 (getpoint (trans c 0 1) "\nPick or specify start point of vector of softselvertmod : "))
  103.          (setq p2 (getpoint p1 "\nPick or specify end point of vector of softselvertmod : "))
  104.          (setq v (mapcar '- (trans p2 1 0) (trans p1 1 0)))
  105.          (setq v1 (mapcar '/ v (list (distance '(0.0 0.0 0.0) v) (distance '(0.0 0.0 0.0) v) (distance '(0.0 0.0 0.0) v))))
  106.          (setq vl (vl-remove-if-not '(lambda ( x ) (< (distance c x) r)) pl))
  107.          (setq eg (entget e))
  108.          (command "_.UCS" "_3P" "_non" p1 "_non" p2 "")
  109.          (while (= 5 (car (setq gr (grread t))))
  110.            (setq v (mapcar '* v1 (list (car (cadr gr)) (car (cadr gr)) (car (cadr gr)))))
  111.            (setq vln (mapcar '(lambda ( p ) (mapcar '+ p (mapcar '* v (list (/ (- r (distance c p)) r) (/ (- r (distance c p)) r) (/ (- r (distance c p)) r))))) vl))
  112.            (setq ex (mapcar '(lambda ( x / xx ) (if (setq xx (vl-member-if '(lambda ( y ) (equal (cdr x) (mapcar '+ '(0.0 0.0) (trans y 0 e)) 1e-6)) vl)) (cons 10 (mapcar '+ '(0.0 0.0) (trans (nth (vl-position (car xx) vl) vln) 0 e))) x)) eg))
  113.            (entupd (cdr (assoc -1 (entmod ex))))
  114.          )
  115.          (command "_.UCS" "_P")
  116.          (command "_.UCS" "_P")
  117.          (command "_.CONVERTPOLY" "_H" e)
  118.          (while (< 0 (getvar 'cmdactive))
  119.            (command "")
  120.          )
  121.        )
  122.        ( (= (cdr (assoc 0 (entget e))) "POLYLINE") ;;; it's 3DPOLYLINE or POLYFACE MESH
  123.          (setq v e)
  124.          (while (= (cdr (assoc 0 (entget (setq v (entnext v))))) "VERTEX")
  125.            (setq pl (cons (cdr (assoc 10 (entget v))) pl))
  126.          )
  127.          (setq pl (reverse pl))
  128.          (setvar 'osmode 1)
  129.          (while (setq p (getpoint "\nPick or specify main vertex-vertices for softselvertmod - ENTER TO FINISH : "))
  130.            (setq vl (cons p vl))
  131.            (print p)
  132.          )
  133.          (setvar 'osmode 0)
  134.          (setq c (barycent vl))
  135.          (prompt "\nPick or specify radius of softselvertmod : ")
  136.          (command "_.SPHERE" "_non" c "\")
  137.          (setq r (expt (/ (* 3.0 (vla-get-volume (vlax-ename->vla-object (entlast)))) 4.0 pi) (/ 1.0 3.0)))
  138.          (entdel (entlast))
  139.          (initget 1 "XY YZ ZX")
  140.          (setq uc (getkword "\nChoose option of setting UCS [XY/YZ/ZX] : "))
  141.          (cond
  142.            ( (= uc "XY")
  143.              (setq ux (mapcar '+ c '(1.0 0.0 0.0)))
  144.              (setq uy (mapcar '+ c '(0.0 1.0 0.0)))
  145.              (command "_.UCs" "_3P" "_non" c "_non" ux "_non" uy)
  146.            )
  147.            ( (= uc "YZ")
  148.              (setq ux (mapcar '+ c '(0.0 1.0 0.0)))
  149.              (setq uy (mapcar '+ c '(0.0 0.0 1.0)))
  150.              (command "_.UCs" "_3P" "_non" c "_non" ux "_non" uy)
  151.            )
  152.            ( (= uc "ZX")
  153.              (setq ux (mapcar '+ c '(0.0 0.0 1.0)))
  154.              (setq uy (mapcar '+ c '(1.0 0.0 0.0)))
  155.              (command "_.UCs" "_3P" "_non" c "_non" ux "_non" uy)
  156.            )
  157.          )
  158.          (setq p1 (getpoint '(0.0 0.0 0.0) "\nPick or specify start point of vector of softselvertmod : "))
  159.          (setq p2 (getpoint p1 "\nPick or specify end point of vector of softselvertmod : "))
  160.          (setq v (mapcar '- (setq p2 (trans p2 1 0)) (setq p1 (trans p1 1 0))))
  161.          (setq v1 (mapcar '/ v (list (distance '(0.0 0.0 0.0) v) (distance '(0.0 0.0 0.0) v) (distance '(0.0 0.0 0.0) v))))
  162.          (setq vl (vl-remove-if-not '(lambda ( x ) (< (distance c x) r)) pl))
  163.          (command "_.UCS" "_ZA" "_non" (trans p1 0 1) "_non" (trans p2 0 1))
  164.          (while (= 5 (car (setq gr (grread t))))
  165.            (setq v (mapcar '* v1 (list (car (cadr gr)) (car (cadr gr)) (car (cadr gr)))))
  166.            (setq vln (mapcar '(lambda ( p ) (mapcar '+ p (mapcar '* v (list (/ (- r (distance c p)) r) (/ (- r (distance c p)) r) (/ (- r (distance c p)) r))))) vl))
  167.            (setq v e)
  168.            (while (= (cdr (assoc 0 (entget (setq v (entnext v))))) "VERTEX")
  169.              (if (setq xx (vl-member-if '(lambda ( p ) (equal p (cdr (assoc 10 (entget v))) 1e-6)) vl))
  170.                (entupd (cdr (assoc -1 (entmod (subst (cons 10 (nth (vl-position (car xx) vl) vln)) (assoc 10 (entget v)) (entget v))))))
  171.              )
  172.            )
  173.            (entupd e)
  174.            (setq vl vln)
  175.          )
  176.          (command "_.UCS" "_P")
  177.          (command "_.UCS" "_P")
  178.        )
  179.        ( (= (cdr (assoc 0 (entget e))) "MESH") ;;; it's MESH
  180.          (setq pl (mapcar 'cdr (vl-remove-if-not '(lambda ( x ) (= (car x) 10)) (entget e))))
  181.          (setvar 'osmode 1)
  182.          (while (setq p (getpoint "\nPick or specify main vertex-vertices for softselvertmod - ENTER TO FINISH : "))
  183.            (setq vl (cons p vl))
  184.            (print p)
  185.          )
  186.          (setvar 'osmode 0)
  187.          (setq c (barycent vl))
  188.          (prompt "\nPick or specify radius of softselvertmod : ")
  189.          (command "_.SPHERE" "_non" c "\")
  190.          (setq r (expt (/ (* 3.0 (vla-get-volume (vlax-ename->vla-object (entlast)))) 4.0 pi) (/ 1.0 3.0)))
  191.          (entdel (entlast))
  192.          (initget 1 "XY YZ ZX")
  193.          (setq uc (getkword "\nChoose option of setting UCS [XY/YZ/ZX] : "))
  194.          (cond
  195.            ( (= uc "XY")
  196.              (setq ux (mapcar '+ c '(1.0 0.0 0.0)))
  197.              (setq uy (mapcar '+ c '(0.0 1.0 0.0)))
  198.              (command "_.UCs" "_3P" "_non" c "_non" ux "_non" uy)
  199.            )
  200.            ( (= uc "YZ")
  201.              (setq ux (mapcar '+ c '(0.0 1.0 0.0)))
  202.              (setq uy (mapcar '+ c '(0.0 0.0 1.0)))
  203.              (command "_.UCs" "_3P" "_non" c "_non" ux "_non" uy)
  204.            )
  205.            ( (= uc "ZX")
  206.              (setq ux (mapcar '+ c '(0.0 0.0 1.0)))
  207.              (setq uy (mapcar '+ c '(1.0 0.0 0.0)))
  208.              (command "_.UCs" "_3P" "_non" c "_non" ux "_non" uy)
  209.            )
  210.          )
  211.          (setq p1 (getpoint '(0.0 0.0 0.0) "\nPick or specify start point of vector of softselvertmod : "))
  212.          (setq p2 (getpoint p1 "\nPick or specify end point of vector of softselvertmod : "))
  213.          (setq v (mapcar '- (setq p2 (trans p2 1 0)) (setq p1 (trans p1 1 0))))
  214.          (setq v1 (mapcar '/ v (list (distance '(0.0 0.0 0.0) v) (distance '(0.0 0.0 0.0) v) (distance '(0.0 0.0 0.0) v))))
  215.          (setq vl (vl-remove-if-not '(lambda ( x ) (< (distance c x) r)) pl))
  216.          (setq eg (entget e))
  217.          (command "_.UCS" "_ZA" "_non" (trans p1 0 1) "_non" (trans p2 0 1))
  218.          (while (= 5 (car (setq gr (grread t))))
  219.            (setq v (mapcar '* v1 (list (car (cadr gr)) (car (cadr gr)) (car (cadr gr)))))
  220.            (setq vln (mapcar '(lambda ( p ) (mapcar '+ p (mapcar '* v (list (/ (- r (distance c p)) r) (/ (- r (distance c p)) r) (/ (- r (distance c p)) r))))) vl))
  221.            (setq ex (mapcar '(lambda ( x / xx ) (if (setq xx (vl-member-if '(lambda ( y ) (equal (cdr x) y 1e-6)) vl)) (cons (car x) (nth (vl-position (car xx) vl) vln)) x)) eg))
  222.            (entupd (cdr (assoc -1 (entmod ex))))
  223.          )
  224.          (command "_.UCS" "_P")
  225.          (command "_.UCS" "_P")
  226.        )
  227.        ( t ;;; else - it's SPLINE
  228.          (if (assoc 11 (entget e))
  229.            (setq pl (mapcar 'cdr (vl-remove-if-not '(lambda ( x ) (= (car x) 11)) (entget e))))
  230.            (setq pl (mapcar 'cdr (vl-remove-if-not '(lambda ( x ) (= (car x) 10)) (entget e))))
  231.          )
  232.          (if (getvar '3dosmode)
  233.            (progn
  234.              (setvar '3dosmode 16)
  235.              (setvar 'osmode 0)
  236.            )
  237.            (setvar 'osmode 1)
  238.          )
  239.          (while (setq p (getpoint "\nPick or specify main vertex-vertices for softselvertmod - ENTER TO FINISH : "))
  240.            (setq vl (cons p vl))
  241.            (print p)
  242.          )
  243.          (if (getvar '3dosmode)
  244.            (progn
  245.              (setvar '3dosmode 0)
  246.              (setvar 'osmode 0)
  247.            )
  248.            (setvar 'osmode 0)
  249.          )
  250.          (setq c (barycent vl))
  251.          (prompt "\nPick or specify radius of softselvertmod : ")
  252.          (command "_.SPHERE" "_non" c "\")
  253.          (setq r (expt (/ (* 3.0 (vla-get-volume (vlax-ename->vla-object (entlast)))) 4.0 pi) (/ 1.0 3.0)))
  254.          (entdel (entlast))
  255.          (initget 1 "XY YZ ZX")
  256.          (setq uc (getkword "\nChoose option of setting UCS [XY/YZ/ZX] : "))
  257.          (cond
  258.            ( (= uc "XY")
  259.              (setq ux (mapcar '+ c '(1.0 0.0 0.0)))
  260.              (setq uy (mapcar '+ c '(0.0 1.0 0.0)))
  261.              (command "_.UCs" "_3P" "_non" c "_non" ux "_non" uy)
  262.            )
  263.            ( (= uc "YZ")
  264.              (setq ux (mapcar '+ c '(0.0 1.0 0.0)))
  265.              (setq uy (mapcar '+ c '(0.0 0.0 1.0)))
  266.              (command "_.UCs" "_3P" "_non" c "_non" ux "_non" uy)
  267.            )
  268.            ( (= uc "ZX")
  269.              (setq ux (mapcar '+ c '(0.0 0.0 1.0)))
  270.              (setq uy (mapcar '+ c '(1.0 0.0 0.0)))
  271.              (command "_.UCs" "_3P" "_non" c "_non" ux "_non" uy)
  272.            )
  273.          )
  274.          (setq p1 (getpoint '(0.0 0.0 0.0) "\nPick or specify start point of vector of softselvertmod : "))
  275.          (setq p2 (getpoint p1 "\nPick or specify end point of vector of softselvertmod : "))
  276.          (setq v (mapcar '- (setq p2 (trans p2 1 0)) (setq p1 (trans p1 1 0))))
  277.          (setq v1 (mapcar '/ v (list (distance '(0.0 0.0 0.0) v) (distance '(0.0 0.0 0.0) v) (distance '(0.0 0.0 0.0) v))))
  278.          (setq vl (vl-remove-if-not '(lambda ( x ) (< (distance c x) r)) pl))
  279.          (setq eg (entget e))
  280.          (command "_.UCS" "_ZA" "_non" (trans p1 0 1) "_non" (trans p2 0 1))
  281.          (while (= 5 (car (setq gr (grread t))))
  282.            (setq v (mapcar '* v1 (list (car (cadr gr)) (car (cadr gr)) (car (cadr gr)))))
  283.            (setq vln (mapcar '(lambda ( p ) (mapcar '+ p (mapcar '* v (list (/ (- r (distance c p)) r) (/ (- r (distance c p)) r) (/ (- r (distance c p)) r))))) vl))
  284.            (setq ex (mapcar '(lambda ( x / xx ) (if (setq xx (vl-member-if '(lambda ( y ) (equal (cdr x) y 1e-6)) vl)) (cons (car x) (nth (vl-position (car xx) vl) vln)) x)) eg))
  285.            (entupd (cdr (assoc -1 (entmod ex))))
  286.          )
  287.          (command "_.UCS" "_P")
  288.          (command "_.UCS" "_P")
  289.        )
  290.      )
  291.    )
  292.    ( (= ch "Twist")
  293.      (cond
  294.        ( (= (cdr (assoc 0 (entget e))) "LWPOLYLINE")
  295.          (setq pl (mapcar '(lambda ( p ) (trans (list (car p) (cadr p) (cdr (assoc 38 (entget e)))) e 0)) (mapcar 'cdr (vl-remove-if-not '(lambda ( x ) (= (car x) 10)) (entget e)))))
  296.          (command "_.UCS" "_E" e)
  297.          (while (< 0 (getvar 'cmdactive))
  298.            (command "")
  299.          )
  300.          (setvar 'osmode 1)
  301.          (while (setq p (getpoint "\nPick or specify main vertex-vertices for softselvertmod - ENTER TO FINISH : "))
  302.            (setq vl (cons (trans p 1 0) vl))
  303.            (print (trans p 1 0))
  304.          )
  305.          (setvar 'osmode 0)
  306.          (setq c (barycent vl))
  307.          (prompt "\nPick or specify radius of softselvertmod : ")
  308.          (command "_.CIRCLE" "_non" (trans c 0 1) "\")
  309.          (setq r (cdr (assoc 40 (entget (entlast)))))
  310.          (entdel (entlast))
  311.          (setq p1 (getpoint (trans c 0 1) "\nPick or specify start point of vector of softselvertmod : "))
  312.          (setq p2 (getpoint p1 "\nPick or specify end point of vector of softselvertmod : "))
  313.          (setq v (mapcar '- (trans p2 1 0) (trans p1 1 0)))
  314.          (setq v1 (mapcar '/ v (list (distance '(0.0 0.0 0.0) v) (distance '(0.0 0.0 0.0) v) (distance '(0.0 0.0 0.0) v))))
  315.          (setq vl (vl-remove-if-not '(lambda ( x ) (< (distance c x) r)) pl))
  316.          (setq c (mapcar '+ c (mapcar '* (mapcar '- c (barycent vl)) (list 0.5 0.5 0.5))))
  317.          (initget 2)
  318.          (setq rf (getreal "\nSpecify rotation factor per vector intensity in decimal degrees <10.0> : "))
  319.          (if (null rf)
  320.            (setq rf 10.0)
  321.          )
  322.          (command "_.UCS" "_3P" "_non" p1 "_non" p2 "")
  323.          (setq eg (entget e))
  324.          (while (= 5 (car (setq gr (grread t))))
  325.            (setq v (mapcar '* v1 (list (car (cadr gr)) (car (cadr gr)) (car (cadr gr)))))
  326.            (setq vln (mapcar '(lambda ( p ) (trans (append (mapcar '+ '(0.0 0.0) (polar (trans p1 0 e) (+ (angle (trans p1 0 e) (trans p 0 e)) (* (if (equal (distance c p) 0.0 1e-6) (/ (distance '(0.0 0.0 0.0) v) 0.1) (/ (distance '(0.0 0.0 0.0) v) (distance c p))) (cvunit rf "degree" "radian"))) (distance (mapcar '+ '(0.0 0.0) (trans p1 0 e)) (trans p 0 e)))) (list (caddr (trans p 0 e)))) e 0)) vl))
  327.            (setq ex (mapcar '(lambda ( x / xx ) (if (setq xx (vl-member-if '(lambda ( y ) (equal (cdr x) (mapcar '+ '(0.0 0.0) (trans y 0 e)) 1e-6)) vl)) (cons 10 (mapcar '+ '(0.0 0.0) (trans (nth (vl-position (car xx) vl) vln) 0 e))) x)) eg))
  328.            (entupd (cdr (assoc -1 (entmod ex))))
  329.          )
  330.          (command "_.UCS" "_P")
  331.          (command "_.UCS" "_P")
  332.        )
  333.        ( (and (= (cdr (assoc 0 (entget e))) "POLYLINE") (= "AcDb2dPolyline" (cdr (assoc 100 (reverse (entget e)))))) ;;; - it's old heavy 2D POLYLINE
  334.          (command "_.CONVERTPOLY" "_L" e)
  335.          (while (< 0 (getvar 'cmdactive))
  336.            (command "")
  337.          )
  338.          (setq pl (mapcar '(lambda ( p ) (trans (list (car p) (cadr p) (cdr (assoc 38 (entget e)))) e 0)) (mapcar 'cdr (vl-remove-if-not '(lambda ( x ) (= (car x) 10)) (entget e)))))
  339.          (command "_.UCS" "_E" e)
  340.          (while (< 0 (getvar 'cmdactive))
  341.            (command "")
  342.          )
  343.          (setvar 'osmode 1)
  344.          (while (setq p (getpoint "\nPick or specify main vertex-vertices for softselvertmod - ENTER TO FINISH : "))
  345.            (setq vl (cons (trans p 1 0) vl))
  346.            (print (trans p 1 0))
  347.          )
  348.          (setvar 'osmode 0)
  349.          (setq c (barycent vl))
  350.          (prompt "\nPick or specify radius of softselvertmod : ")
  351.          (command "_.CIRCLE" "_non" (trans c 0 1) "\")
  352.          (setq r (cdr (assoc 40 (entget (entlast)))))
  353.          (entdel (entlast))
  354.          (setq p1 (getpoint (trans c 0 1) "\nPick or specify start point of vector of softselvertmod : "))
  355.          (setq p2 (getpoint p1 "\nPick or specify end point of vector of softselvertmod : "))
  356.          (setq v (mapcar '- (trans p2 1 0) (trans p1 1 0)))
  357.          (setq v1 (mapcar '/ v (list (distance '(0.0 0.0 0.0) v) (distance '(0.0 0.0 0.0) v) (distance '(0.0 0.0 0.0) v))))
  358.          (setq vl (vl-remove-if-not '(lambda ( x ) (< (distance c x) r)) pl))
  359.          (setq c (mapcar '+ c (mapcar '* (mapcar '- c (barycent vl)) (list 0.5 0.5 0.5))))
  360.          (initget 2)
  361.          (setq rf (getreal "\nSpecify rotation factor per vector intensity in decimal degrees <10.0> : "))
  362.          (if (null rf)
  363.            (setq rf 10.0)
  364.          )
  365.          (command "_.UCS" "_3P" "_non" p1 "_non" p2 "")
  366.          (setq eg (entget e))
  367.          (while (= 5 (car (setq gr (grread t))))
  368.            (setq v (mapcar '* v1 (list (car (cadr gr)) (car (cadr gr)) (car (cadr gr)))))
  369.            (setq vln (mapcar '(lambda ( p ) (trans (append (mapcar '+ '(0.0 0.0) (polar (trans p1 0 e) (+ (angle (trans p1 0 e) (trans p 0 e)) (* (if (equal (distance c p) 0.0 1e-6) (/ (distance '(0.0 0.0 0.0) v) 0.1) (/ (distance '(0.0 0.0 0.0) v) (distance c p))) (cvunit rf "degree" "radian"))) (distance (mapcar '+ '(0.0 0.0) (trans p1 0 e)) (trans p 0 e)))) (list (caddr (trans p 0 e)))) e 0)) vl))
  370.            (setq ex (mapcar '(lambda ( x / xx ) (if (setq xx (vl-member-if '(lambda ( y ) (equal (cdr x) (mapcar '+ '(0.0 0.0) (trans y 0 e)) 1e-6)) vl)) (cons 10 (mapcar '+ '(0.0 0.0) (trans (nth (vl-position (car xx) vl) vln) 0 e))) x)) eg))
  371.            (entupd (cdr (assoc -1 (entmod ex))))
  372.          )
  373.          (command "_.UCS" "_P")
  374.          (command "_.UCS" "_P")
  375.          (command "_.CONVERTPOLY" "_H" e)
  376.          (while (< 0 (getvar 'cmdactive))
  377.            (command "")
  378.          )
  379.        )
  380.        ( (= (cdr (assoc 0 (entget e))) "POLYLINE") ;;; it's 3DPOLYLINE or POLYFACE MESH
  381.          (setq v e)
  382.          (while (= (cdr (assoc 0 (entget (setq v (entnext v))))) "VERTEX")
  383.            (setq pl (cons (cdr (assoc 10 (entget v))) pl))
  384.          )
  385.          (setq pl (reverse pl))
  386.          (setvar 'osmode 1)
  387.          (while (setq p (getpoint "\nPick or specify main vertex-vertices for softselvertmod - ENTER TO FINISH : "))
  388.            (setq vl (cons p vl))
  389.            (print p)
  390.          )
  391.          (setvar 'osmode 0)
  392.          (setq c (barycent vl))
  393.          (prompt "\nPick or specify radius of softselvertmod : ")
  394.          (command "_.SPHERE" "_non" c "\")
  395.          (setq r (expt (/ (* 3.0 (vla-get-volume (vlax-ename->vla-object (entlast)))) 4.0 pi) (/ 1.0 3.0)))
  396.          (entdel (entlast))
  397.          (initget 1 "XY YZ ZX")
  398.          (setq uc (getkword "\nChoose option of setting UCS [XY/YZ/ZX] : "))
  399.          (cond
  400.            ( (= uc "XY")
  401.              (setq ux (mapcar '+ c '(1.0 0.0 0.0)))
  402.              (setq uy (mapcar '+ c '(0.0 1.0 0.0)))
  403.              (command "_.UCs" "_3P" "_non" c "_non" ux "_non" uy)
  404.            )
  405.            ( (= uc "YZ")
  406.              (setq ux (mapcar '+ c '(0.0 1.0 0.0)))
  407.              (setq uy (mapcar '+ c '(0.0 0.0 1.0)))
  408.              (command "_.UCs" "_3P" "_non" c "_non" ux "_non" uy)
  409.            )
  410.            ( (= uc "ZX")
  411.              (setq ux (mapcar '+ c '(0.0 0.0 1.0)))
  412.              (setq uy (mapcar '+ c '(1.0 0.0 0.0)))
  413.              (command "_.UCs" "_3P" "_non" c "_non" ux "_non" uy)
  414.            )
  415.          )
  416.          (setq p1 (getpoint '(0.0 0.0 0.0) "\nPick or specify start point of vector of softselvertmod : "))
  417.          (setq p2 (getpoint p1 "\nPick or specify end point of vector of softselvertmod : "))
  418.          (setq v (mapcar '- (setq p2 (trans p2 1 0)) (setq p1 (trans p1 1 0))))
  419.          (setq v1 (mapcar '/ v (list (distance '(0.0 0.0 0.0) v) (distance '(0.0 0.0 0.0) v) (distance '(0.0 0.0 0.0) v))))
  420.          (setq vl (vl-remove-if-not '(lambda ( x ) (< (distance c x) r)) pl))
  421.          (setq c (mapcar '+ c (mapcar '* (mapcar '- c (barycent vl)) (list 0.5 0.5 0.5))))
  422.          (initget 2)
  423.          (setq rf (getreal "\nSpecify rotation factor per vector intensity in decimal degrees <10.0> : "))
  424.          (if (null rf)
  425.            (setq rf 10.0)
  426.          )
  427.          (command "_.UCS" "_ZA" "_non" (trans p1 0 1) "_non" (trans p2 0 1))
  428.          (while (= 5 (car (setq gr (grread t))))
  429.            (setq v (mapcar '* v1 (list (car (cadr gr)) (car (cadr gr)) (car (cadr gr)))))
  430.            (setq vln (mapcar '(lambda ( p ) (trans (append (mapcar '+ '(0.0 0.0) (polar (trans p1 0 v) (+ (angle (trans p1 0 v) (trans p 0 v)) (* (if (equal (distance c p) 0.0 1e-6) (/ (distance '(0.0 0.0 0.0) v) 0.1) (/ (distance '(0.0 0.0 0.0) v) (distance c p))) (cvunit rf "degree" "radian"))) (distance (mapcar '+ '(0.0 0.0) (trans p1 0 v)) (trans p 0 v)))) (list (caddr (trans p 0 v)))) v 0)) vl))
  431.            (setq v e)
  432.            (while (= (cdr (assoc 0 (entget (setq v (entnext v))))) "VERTEX")
  433.              (if (setq xx (vl-member-if '(lambda ( p ) (equal p (cdr (assoc 10 (entget v))) 1e-6)) vl))
  434.                (entupd (cdr (assoc -1 (entmod (subst (cons 10 (nth (vl-position (car xx) vl) vln)) (assoc 10 (entget v)) (entget v))))))
  435.              )
  436.            )
  437.            (entupd e)
  438.            (setq vl vln)
  439.          )
  440.          (command "_.UCS" "_P")
  441.          (command "_.UCS" "_P")
  442.        )
  443.        ( (= (cdr (assoc 0 (entget e))) "MESH") ;;; it's MESH
  444.          (setq pl (mapcar 'cdr (vl-remove-if-not '(lambda ( x ) (= (car x) 10)) (entget e))))
  445.          (setvar 'osmode 1)
  446.          (while (setq p (getpoint "\nPick or specify main vertex-vertices for softselvertmod - ENTER TO FINISH : "))
  447.            (setq vl (cons p vl))
  448.            (print p)
  449.          )
  450.          (setvar 'osmode 0)
  451.          (setq c (barycent vl))
  452.          (prompt "\nPick or specify radius of softselvertmod : ")
  453.          (command "_.SPHERE" "_non" c "\")
  454.          (setq r (expt (/ (* 3.0 (vla-get-volume (vlax-ename->vla-object (entlast)))) 4.0 pi) (/ 1.0 3.0)))
  455.          (entdel (entlast))
  456.          (initget 1 "XY YZ ZX")
  457.          (setq uc (getkword "\nChoose option of setting UCS [XY/YZ/ZX] : "))
  458.          (cond
  459.            ( (= uc "XY")
  460.              (setq ux (mapcar '+ c '(1.0 0.0 0.0)))
  461.              (setq uy (mapcar '+ c '(0.0 1.0 0.0)))
  462.              (command "_.UCs" "_3P" "_non" c "_non" ux "_non" uy)
  463.            )
  464.            ( (= uc "YZ")
  465.              (setq ux (mapcar '+ c '(0.0 1.0 0.0)))
  466.              (setq uy (mapcar '+ c '(0.0 0.0 1.0)))
  467.              (command "_.UCs" "_3P" "_non" c "_non" ux "_non" uy)
  468.            )
  469.            ( (= uc "ZX")
  470.              (setq ux (mapcar '+ c '(0.0 0.0 1.0)))
  471.              (setq uy (mapcar '+ c '(1.0 0.0 0.0)))
  472.              (command "_.UCs" "_3P" "_non" c "_non" ux "_non" uy)
  473.            )
  474.          )
  475.          (setq p1 (getpoint '(0.0 0.0 0.0) "\nPick or specify start point of vector of softselvertmod : "))
  476.          (setq p2 (getpoint p1 "\nPick or specify end point of vector of softselvertmod : "))
  477.          (setq v (mapcar '- (setq p2 (trans p2 1 0)) (setq p1 (trans p1 1 0))))
  478.          (setq v1 (mapcar '/ v (list (distance '(0.0 0.0 0.0) v) (distance '(0.0 0.0 0.0) v) (distance '(0.0 0.0 0.0) v))))
  479.          (setq vl (vl-remove-if-not '(lambda ( x ) (< (distance c x) r)) pl))
  480.          (setq c (mapcar '+ c (mapcar '* (mapcar '- c (barycent vl)) (list 0.5 0.5 0.5))))
  481.          (initget 2)
  482.          (setq rf (getreal "\nSpecify rotation factor per vector intensity in decimal degrees <10.0> : "))
  483.          (if (null rf)
  484.            (setq rf 10.0)
  485.          )
  486.          (command "_.UCS" "_ZA" "_non" (trans p1 0 1) "_non" (trans p2 0 1))
  487.          (setq eg (entget e))
  488.          (while (= 5 (car (setq gr (grread t))))
  489.            (setq v (mapcar '* v1 (list (car (cadr gr)) (car (cadr gr)) (car (cadr gr)))))
  490.            (setq vln (mapcar '(lambda ( p ) (trans (append (mapcar '+ '(0.0 0.0) (polar (trans p1 0 v) (+ (angle (trans p1 0 v) (trans p 0 v)) (* (if (equal (distance c p) 0.0 1e-6) (/ (distance '(0.0 0.0 0.0) v) 0.1) (/ (distance '(0.0 0.0 0.0) v) (distance c p))) (cvunit rf "degree" "radian"))) (distance (mapcar '+ '(0.0 0.0) (trans p1 0 v)) (trans p 0 v)))) (list (caddr (trans p 0 v)))) v 0)) vl))
  491.            (setq ex (mapcar '(lambda ( x / xx ) (if (setq xx (vl-member-if '(lambda ( y ) (equal (cdr x) y 1e-6)) vl)) (cons (car x) (nth (vl-position (car xx) vl) vln)) x)) eg))
  492.            (entupd (cdr (assoc -1 (entmod ex))))
  493.          )
  494.          (command "_.UCS" "_P")
  495.          (command "_.UCS" "_P")
  496.        )
  497.        ( t ;;; else - it's SPLINE
  498.          (if (assoc 11 (entget e))
  499.            (setq pl (mapcar 'cdr (vl-remove-if-not '(lambda ( x ) (= (car x) 11)) (entget e))))
  500.            (setq pl (mapcar 'cdr (vl-remove-if-not '(lambda ( x ) (= (car x) 10)) (entget e))))
  501.          )
  502.          (if (getvar '3dosmode)
  503.            (progn
  504.              (setvar '3dosmode 16)
  505.              (setvar 'osmode 0)
  506.            )
  507.            (setvar 'osmode 1)
  508.          )
  509.          (while (setq p (getpoint "\nPick or specify main vertex-vertices for softselvertmod - ENTER TO FINISH : "))
  510.            (setq vl (cons p vl))
  511.            (print p)
  512.          )
  513.          (if (getvar '3dosmode)
  514.            (progn
  515.              (setvar '3dosmode 0)
  516.              (setvar 'osmode 0)
  517.            )
  518.            (setvar 'osmode 0)
  519.          )
  520.          (setq c (barycent vl))
  521.          (prompt "\nPick or specify radius of softselvertmod : ")
  522.          (command "_.SPHERE" "_non" c "\")
  523.          (setq r (expt (/ (* 3.0 (vla-get-volume (vlax-ename->vla-object (entlast)))) 4.0 pi) (/ 1.0 3.0)))
  524.          (entdel (entlast))
  525.          (initget 1 "XY YZ ZX")
  526.          (setq uc (getkword "\nChoose option of setting UCS [XY/YZ/ZX] : "))
  527.          (cond
  528.            ( (= uc "XY")
  529.              (setq ux (mapcar '+ c '(1.0 0.0 0.0)))
  530.              (setq uy (mapcar '+ c '(0.0 1.0 0.0)))
  531.              (command "_.UCs" "_3P" "_non" c "_non" ux "_non" uy)
  532.            )
  533.            ( (= uc "YZ")
  534.              (setq ux (mapcar '+ c '(0.0 1.0 0.0)))
  535.              (setq uy (mapcar '+ c '(0.0 0.0 1.0)))
  536.              (command "_.UCs" "_3P" "_non" c "_non" ux "_non" uy)
  537.            )
  538.            ( (= uc "ZX")
  539.              (setq ux (mapcar '+ c '(0.0 0.0 1.0)))
  540.              (setq uy (mapcar '+ c '(1.0 0.0 0.0)))
  541.              (command "_.UCs" "_3P" "_non" c "_non" ux "_non" uy)
  542.            )
  543.          )
  544.          (setq p1 (getpoint '(0.0 0.0 0.0) "\nPick or specify start point of vector of softselvertmod : "))
  545.          (setq p2 (getpoint p1 "\nPick or specify end point of vector of softselvertmod : "))
  546.          (setq v (mapcar '- (setq p2 (trans p2 1 0)) (setq p1 (trans p1 1 0))))
  547.          (setq v1 (mapcar '/ v (list (distance '(0.0 0.0 0.0) v) (distance '(0.0 0.0 0.0) v) (distance '(0.0 0.0 0.0) v))))
  548.          (setq vl (vl-remove-if-not '(lambda ( x ) (< (distance c x) r)) pl))
  549.          (setq c (mapcar '+ c (mapcar '* (mapcar '- c (barycent vl)) (list 0.5 0.5 0.5))))
  550.          (initget 2)
  551.          (setq rf (getreal "\nSpecify rotation factor per vector intensity in decimal degrees <10.0> : "))
  552.          (if (null rf)
  553.            (setq rf 10.0)
  554.          )
  555.          (command "_.UCS" "_ZA" "_non" (trans p1 0 1) "_non" (trans p2 0 1))
  556.          (setq eg (entget e))
  557.          (while (= 5 (car (setq gr (grread t))))
  558.            (setq v (mapcar '* v1 (list (car (cadr gr)) (car (cadr gr)) (car (cadr gr)))))
  559.            (setq vln (mapcar '(lambda ( p ) (trans (append (mapcar '+ '(0.0 0.0) (polar (trans p1 0 v) (+ (angle (trans p1 0 v) (trans p 0 v)) (* (if (equal (distance c p) 0.0 1e-6) (/ (distance '(0.0 0.0 0.0) v) 0.1) (/ (distance '(0.0 0.0 0.0) v) (distance c p))) (cvunit rf "degree" "radian"))) (distance (mapcar '+ '(0.0 0.0) (trans p1 0 v)) (trans p 0 v)))) (list (caddr (trans p 0 v)))) v 0)) vl))
  560.            (setq ex (mapcar '(lambda ( x / xx ) (if (setq xx (vl-member-if '(lambda ( y ) (equal (cdr x) y 1e-6)) vl)) (cons (car x) (nth (vl-position (car xx) vl) vln)) x)) eg))
  561.            (entupd (cdr (assoc -1 (entmod ex))))
  562.          )
  563.          (command "_.UCS" "_P")
  564.          (command "_.UCS" "_P")
  565.        )
  566.      )
  567.    )
  568.    ( (= ch "Scale-Shrink")
  569.      (cond
  570.        ( (= (cdr (assoc 0 (entget e))) "LWPOLYLINE")
  571.          (setq pl (mapcar '(lambda ( p ) (trans (list (car p) (cadr p) (cdr (assoc 38 (entget e)))) e 0)) (mapcar 'cdr (vl-remove-if-not '(lambda ( x ) (= (car x) 10)) (entget e)))))
  572.          (command "_.UCS" "_E" e)
  573.          (while (< 0 (getvar 'cmdactive))
  574.            (command "")
  575.          )
  576.          (setvar 'osmode 1)
  577.          (while (setq p (getpoint "\nPick or specify main vertex-vertices for softselvertmod - ENTER TO FINISH : "))
  578.            (setq vl (cons (trans p 1 0) vl))
  579.            (print (trans p 1 0))
  580.          )
  581.          (setvar 'osmode 0)
  582.          (setq c (barycent vl))
  583.          (prompt "\nPick or specify radius of softselvertmod : ")
  584.          (command "_.CIRCLE" "_non" (trans c 0 1) "\")
  585.          (setq r (cdr (assoc 40 (entget (entlast)))))
  586.          (entdel (entlast))
  587.          (setq p1 (getpoint (trans c 0 1) "\nPick or specify start point of vector of softselvertmod : "))
  588.          (setq p2 (getpoint p1 "\nPick or specify end point of vector of softselvertmod : "))
  589.          (setq v (mapcar '- (trans p2 1 0) (trans p1 1 0)))
  590.          (setq v1 (mapcar '/ v (list (distance '(0.0 0.0 0.0) v) (distance '(0.0 0.0 0.0) v) (distance '(0.0 0.0 0.0) v))))
  591.          (setq vl (vl-remove-if-not '(lambda ( x ) (< (distance c x) r)) pl))
  592.          (command "_.UCS" "_3P" "_non" p1 "_non" p2 "")
  593.          (setq eg (entget e))
  594.          (while (= 5 (car (setq gr (grread t))))
  595.            (setq v (mapcar '* v1 (list (car (cadr gr)) (car (cadr gr)) (car (cadr gr)))))
  596.            (setq vln (mapcar '(lambda ( p ) (trans (append (mapcar '+ '(0.0 0.0) (polar (trans p1 0 e) (angle (trans p1 0 e) (trans p 0 e)) (if (equal (distance c p) 0.0 1e-6) 0.0 (/ (distance '(0.0 0.0 0.0) v) (distance c p))))) (list (caddr (trans p 0 e)))) e 0)) vl))
  597.            (setq ex (mapcar '(lambda ( x / xx ) (if (setq xx (vl-member-if '(lambda ( y ) (equal (cdr x) (mapcar '+ '(0.0 0.0) (trans y 0 e)) 1e-6)) vl)) (cons 10 (mapcar '+ '(0.0 0.0) (trans (nth (vl-position (car xx) vl) vln) 0 e))) x)) eg))
  598.            (entupd (cdr (assoc -1 (entmod ex))))
  599.          )
  600.          (command "_.UCS" "_P")
  601.          (command "_.UCS" "_P")
  602.        )
  603.        ( (and (= (cdr (assoc 0 (entget e))) "POLYLINE") (= "AcDb2dPolyline" (cdr (assoc 100 (reverse (entget e)))))) ;;; - it's old heavy 2D POLYLINE
  604.          (command "_.CONVERTPOLY" "_L" e)
  605.          (while (< 0 (getvar 'cmdactive))
  606.            (command "")
  607.          )
  608.          (setq pl (mapcar '(lambda ( p ) (trans (list (car p) (cadr p) (cdr (assoc 38 (entget e)))) e 0)) (mapcar 'cdr (vl-remove-if-not '(lambda ( x ) (= (car x) 10)) (entget e)))))
  609.          (command "_.UCS" "_E" e)
  610.          (while (< 0 (getvar 'cmdactive))
  611.            (command "")
  612.          )
  613.          (setvar 'osmode 1)
  614.          (while (setq p (getpoint "\nPick or specify main vertex-vertices for softselvertmod - ENTER TO FINISH : "))
  615.            (setq vl (cons (trans p 1 0) vl))
  616.            (print (trans p 1 0))
  617.          )
  618.          (setvar 'osmode 0)
  619.          (setq c (barycent vl))
  620.          (prompt "\nPick or specify radius of softselvertmod : ")
  621.          (command "_.CIRCLE" "_non" (trans c 0 1) "\")
  622.          (setq r (cdr (assoc 40 (entget (entlast)))))
  623.          (entdel (entlast))
  624.          (setq p1 (getpoint (trans c 0 1) "\nPick or specify start point of vector of softselvertmod : "))
  625.          (setq p2 (getpoint p1 "\nPick or specify end point of vector of softselvertmod : "))
  626.          (setq v (mapcar '- (trans p2 1 0) (trans p1 1 0)))
  627.          (setq v1 (mapcar '/ v (list (distance '(0.0 0.0 0.0) v) (distance '(0.0 0.0 0.0) v) (distance '(0.0 0.0 0.0) v))))
  628.          (setq vl (vl-remove-if-not '(lambda ( x ) (< (distance c x) r)) pl))
  629.          (command "_.UCS" "_3P" "_non" p1 "_non" p2 "")
  630.          (setq eg (entget e))
  631.          (while (= 5 (car (setq gr (grread t))))
  632.            (setq v (mapcar '* v1 (list (car (cadr gr)) (car (cadr gr)) (car (cadr gr)))))
  633.            (setq vln (mapcar '(lambda ( p ) (trans (append (mapcar '+ '(0.0 0.0) (polar (trans p1 0 e) (angle (trans p1 0 e) (trans p 0 e)) (if (equal (distance c p) 0.0 1e-6) 0.0 (/ (distance '(0.0 0.0 0.0) v) (distance c p))))) (list (caddr (trans p 0 e)))) e 0)) vl))
  634.            (setq ex (mapcar '(lambda ( x / xx ) (if (setq xx (vl-member-if '(lambda ( y ) (equal (cdr x) (mapcar '+ '(0.0 0.0) (trans y 0 e)) 1e-6)) vl)) (cons 10 (mapcar '+ '(0.0 0.0) (trans (nth (vl-position (car xx) vl) vln) 0 e))) x)) eg))
  635.            (entupd (cdr (assoc -1 (entmod ex))))
  636.          )
  637.          (command "_.UCS" "_P")
  638.          (command "_.UCS" "_P")
  639.          (command "_.CONVERTPOLY" "_H" e)
  640.          (while (< 0 (getvar 'cmdactive))
  641.            (command "")
  642.          )
  643.        )
  644.        ( (= (cdr (assoc 0 (entget e))) "POLYLINE") ;;; it's 3DPOLYLINE or POLYFACE MESH
  645.          (setq v e)
  646.          (while (= (cdr (assoc 0 (entget (setq v (entnext v))))) "VERTEX")
  647.            (setq pl (cons (cdr (assoc 10 (entget v))) pl))
  648.          )
  649.          (setq pl (reverse pl))
  650.          (setvar 'osmode 1)
  651.          (while (setq p (getpoint "\nPick or specify main vertex-vertices for softselvertmod - ENTER TO FINISH : "))
  652.            (setq vl (cons p vl))
  653.            (print p)
  654.          )
  655.          (setvar 'osmode 0)
  656.          (setq c (barycent vl))
  657.          (prompt "\nPick or specify radius of softselvertmod : ")
  658.          (command "_.SPHERE" "_non" c "\")
  659.          (setq r (expt (/ (* 3.0 (vla-get-volume (vlax-ename->vla-object (entlast)))) 4.0 pi) (/ 1.0 3.0)))
  660.          (entdel (entlast))
  661.          (initget 1 "XY YZ ZX")
  662.          (setq uc (getkword "\nChoose option of setting UCS [XY/YZ/ZX] : "))
  663.          (cond
  664.            ( (= uc "XY")
  665.              (setq ux (mapcar '+ c '(1.0 0.0 0.0)))
  666.              (setq uy (mapcar '+ c '(0.0 1.0 0.0)))
  667.              (command "_.UCs" "_3P" "_non" c "_non" ux "_non" uy)
  668.            )
  669.            ( (= uc "YZ")
  670.              (setq ux (mapcar '+ c '(0.0 1.0 0.0)))
  671.              (setq uy (mapcar '+ c '(0.0 0.0 1.0)))
  672.              (command "_.UCs" "_3P" "_non" c "_non" ux "_non" uy)
  673.            )
  674.            ( (= uc "ZX")
  675.              (setq ux (mapcar '+ c '(0.0 0.0 1.0)))
  676.              (setq uy (mapcar '+ c '(1.0 0.0 0.0)))
  677.              (command "_.UCs" "_3P" "_non" c "_non" ux "_non" uy)
  678.            )
  679.          )
  680.          (setq p1 (getpoint '(0.0 0.0 0.0) "\nPick or specify start point of vector of softselvertmod : "))
  681.          (setq p2 (getpoint p1 "\nPick or specify end point of vector of softselvertmod : "))
  682.          (setq v (mapcar '- (setq p2 (trans p2 1 0)) (setq p1 (trans p1 1 0))))
  683.          (setq v1 (mapcar '/ v (list (distance '(0.0 0.0 0.0) v) (distance '(0.0 0.0 0.0) v) (distance '(0.0 0.0 0.0) v))))
  684.          (setq vl (vl-remove-if-not '(lambda ( x ) (< (distance c x) r)) pl))
  685.          (command "_.UCS" "_ZA" "_non" (trans p1 0 1) "_non" (trans p2 0 1))
  686.          (while (= 5 (car (setq gr (grread t))))
  687.            (setq v (mapcar '* v1 (list (car (cadr gr)) (car (cadr gr)) (car (cadr gr)))))
  688.            (setq vln (mapcar '(lambda ( p ) (trans (append (mapcar '+ '(0.0 0.0) (polar (trans p1 0 v) (angle (trans p1 0 v) (trans p 0 v)) (if (equal (distance c p) 0.0 1e-6) 0.0 (/ (distance '(0.0 0.0 0.0) v) (distance c p))))) (list (caddr (trans p 0 v)))) v 0)) vl))
  689.            (setq v e)
  690.            (while (= (cdr (assoc 0 (entget (setq v (entnext v))))) "VERTEX")
  691.              (if (setq xx (vl-member-if '(lambda ( p ) (equal p (cdr (assoc 10 (entget v))) 1e-6)) vl))
  692.                (entupd (cdr (assoc -1 (entmod (subst (cons 10 (nth (vl-position (car xx) vl) vln)) (assoc 10 (entget v)) (entget v))))))
  693.              )
  694.            )
  695.            (entupd e)
  696.            (setq vl vln)
  697.          )
  698.          (command "_.UCS" "_P")
  699.          (command "_.UCS" "_P")
  700.        )
  701.        ( (= (cdr (assoc 0 (entget e))) "MESH") ;;; it's MESH
  702.          (setq pl (mapcar 'cdr (vl-remove-if-not '(lambda ( x ) (= (car x) 10)) (entget e))))
  703.          (setvar 'osmode 1)
  704.          (while (setq p (getpoint "\nPick or specify main vertex-vertices for softselvertmod - ENTER TO FINISH : "))
  705.            (setq vl (cons p vl))
  706.            (print p)
  707.          )
  708.          (setvar 'osmode 0)
  709.          (setq c (barycent vl))
  710.          (prompt "\nPick or specify radius of softselvertmod : ")
  711.          (command "_.SPHERE" "_non" c "\")
  712.          (setq r (expt (/ (* 3.0 (vla-get-volume (vlax-ename->vla-object (entlast)))) 4.0 pi) (/ 1.0 3.0)))
  713.          (entdel (entlast))
  714.          (initget 1 "XY YZ ZX")
  715.          (setq uc (getkword "\nChoose option of setting UCS [XY/YZ/ZX] : "))
  716.          (cond
  717.            ( (= uc "XY")
  718.              (setq ux (mapcar '+ c '(1.0 0.0 0.0)))
  719.              (setq uy (mapcar '+ c '(0.0 1.0 0.0)))
  720.              (command "_.UCs" "_3P" "_non" c "_non" ux "_non" uy)
  721.            )
  722.            ( (= uc "YZ")
  723.              (setq ux (mapcar '+ c '(0.0 1.0 0.0)))
  724.              (setq uy (mapcar '+ c '(0.0 0.0 1.0)))
  725.              (command "_.UCs" "_3P" "_non" c "_non" ux "_non" uy)
  726.            )
  727.            ( (= uc "ZX")
  728.              (setq ux (mapcar '+ c '(0.0 0.0 1.0)))
  729.              (setq uy (mapcar '+ c '(1.0 0.0 0.0)))
  730.              (command "_.UCs" "_3P" "_non" c "_non" ux "_non" uy)
  731.            )
  732.          )
  733.          (setq p1 (getpoint '(0.0 0.0 0.0) "\nPick or specify start point of vector of softselvertmod : "))
  734.          (setq p2 (getpoint p1 "\nPick or specify end point of vector of softselvertmod : "))
  735.          (setq v (mapcar '- (setq p2 (trans p2 1 0)) (setq p1 (trans p1 1 0))))
  736.          (setq v1 (mapcar '/ v (list (distance '(0.0 0.0 0.0) v) (distance '(0.0 0.0 0.0) v) (distance '(0.0 0.0 0.0) v))))
  737.          (setq vl (vl-remove-if-not '(lambda ( x ) (< (distance c x) r)) pl))
  738.          (command "_.UCS" "_ZA" "_non" (trans p1 0 1) "_non" (trans p2 0 1))
  739.          (setq eg (entget e))
  740.          (while (= 5 (car (setq gr (grread t))))
  741.            (setq v (mapcar '* v1 (list (car (cadr gr)) (car (cadr gr)) (car (cadr gr)))))
  742.            (setq vln (mapcar '(lambda ( p ) (trans (append (mapcar '+ '(0.0 0.0) (polar (trans p1 0 v) (angle (trans p1 0 v) (trans p 0 v)) (if (equal (distance c p) 0.0 1e-6) 0.0 (/ (distance '(0.0 0.0 0.0) v) (distance c p))))) (list (caddr (trans p 0 v)))) v 0)) vl))
  743.            (setq ex (mapcar '(lambda ( x / xx ) (if (setq xx (vl-member-if '(lambda ( y ) (equal (cdr x) y 1e-6)) vl)) (cons (car x) (nth (vl-position (car xx) vl) vln)) x)) eg))
  744.            (entupd (cdr (assoc -1 (entmod ex))))
  745.          )
  746.          (command "_.UCS" "_P")
  747.          (command "_.UCS" "_P")
  748.        )
  749.        ( t ;;; else - it's SPLINE
  750.          (if (assoc 11 (entget e))
  751.            (setq pl (mapcar 'cdr (vl-remove-if-not '(lambda ( x ) (= (car x) 11)) (entget e))))
  752.            (setq pl (mapcar 'cdr (vl-remove-if-not '(lambda ( x ) (= (car x) 10)) (entget e))))
  753.          )
  754.          (if (getvar '3dosmode)
  755.            (progn
  756.              (setvar '3dosmode 16)
  757.              (setvar 'osmode 0)
  758.            )
  759.            (setvar 'osmode 1)
  760.          )
  761.          (while (setq p (getpoint "\nPick or specify main vertex-vertices for softselvertmod - ENTER TO FINISH : "))
  762.            (setq vl (cons p vl))
  763.            (print p)
  764.          )
  765.          (if (getvar '3dosmode)
  766.            (progn
  767.              (setvar '3dosmode 0)
  768.              (setvar 'osmode 0)
  769.            )
  770.            (setvar 'osmode 0)
  771.          )
  772.          (setq c (barycent vl))
  773.          (prompt "\nPick or specify radius of softselvertmod : ")
  774.          (command "_.SPHERE" "_non" c "\")
  775.          (setq r (expt (/ (* 3.0 (vla-get-volume (vlax-ename->vla-object (entlast)))) 4.0 pi) (/ 1.0 3.0)))
  776.          (entdel (entlast))
  777.          (initget 1 "XY YZ ZX")
  778.          (setq uc (getkword "\nChoose option of setting UCS [XY/YZ/ZX] : "))
  779.          (cond
  780.            ( (= uc "XY")
  781.              (setq ux (mapcar '+ c '(1.0 0.0 0.0)))
  782.              (setq uy (mapcar '+ c '(0.0 1.0 0.0)))
  783.              (command "_.UCs" "_3P" "_non" c "_non" ux "_non" uy)
  784.            )
  785.            ( (= uc "YZ")
  786.              (setq ux (mapcar '+ c '(0.0 1.0 0.0)))
  787.              (setq uy (mapcar '+ c '(0.0 0.0 1.0)))
  788.              (command "_.UCs" "_3P" "_non" c "_non" ux "_non" uy)
  789.            )
  790.            ( (= uc "ZX")
  791.              (setq ux (mapcar '+ c '(0.0 0.0 1.0)))
  792.              (setq uy (mapcar '+ c '(1.0 0.0 0.0)))
  793.              (command "_.UCs" "_3P" "_non" c "_non" ux "_non" uy)
  794.            )
  795.          )
  796.          (setq p1 (getpoint '(0.0 0.0 0.0) "\nPick or specify start point of vector of softselvertmod : "))
  797.          (setq p2 (getpoint p1 "\nPick or specify end point of vector of softselvertmod : "))
  798.          (setq v (mapcar '- (setq p2 (trans p2 1 0)) (setq p1 (trans p1 1 0))))
  799.          (setq v1 (mapcar '/ v (list (distance '(0.0 0.0 0.0) v) (distance '(0.0 0.0 0.0) v) (distance '(0.0 0.0 0.0) v))))
  800.          (setq vl (vl-remove-if-not '(lambda ( x ) (< (distance c x) r)) pl))
  801.          (command "_.UCS" "_ZA" "_non" (trans p1 0 1) "_non" (trans p2 0 1))
  802.          (setq eg (entget e))
  803.          (while (= 5 (car (setq gr (grread t))))
  804.            (setq v (mapcar '* v1 (list (car (cadr gr)) (car (cadr gr)) (car (cadr gr)))))
  805.            (setq vln (mapcar '(lambda ( p ) (trans (append (mapcar '+ '(0.0 0.0) (polar (trans p1 0 v) (angle (trans p1 0 v) (trans p 0 v)) (if (equal (distance c p) 0.0 1e-6) 0.0 (/ (distance '(0.0 0.0 0.0) v) (distance c p))))) (list (caddr (trans p 0 v)))) v 0)) vl))
  806.            (setq ex (mapcar '(lambda ( x / xx ) (if (setq xx (vl-member-if '(lambda ( y ) (equal (cdr x) y 1e-6)) vl)) (cons (car x) (nth (vl-position (car xx) vl) vln)) x)) eg))
  807.            (entupd (cdr (assoc -1 (entmod ex))))
  808.          )
  809.          (command "_.UCS" "_P")
  810.          (command "_.UCS" "_P")
  811.        )
  812.      )
  813.    )
  814. )
  815. (*error* nil)
  816. )
HTH,M.R。
回复

使用道具 举报

16

主题

69

帖子

54

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
80
发表于 2022-7-5 17:53:27 | 显示全部楼层
啊,是的!虽然它有点笨重,但它肯定有我开始使用所需的一切。非常感谢。
我将研究如何简化界面,以及允许用户更改衰减。我的主要目标是使用某种形式的钟形曲线。
回复

使用道具 举报

5

主题

1334

帖子

1410

银币

限制会员

铜币
-20
发表于 2022-7-5 18:02:12 | 显示全部楼层
我已经更新了它,包括扭曲选项。。。
 
M、 R。
回复

使用道具 举报

5

主题

1334

帖子

1410

银币

限制会员

铜币
-20
发表于 2022-7-5 18:06:03 | 显示全部楼层
我已经将其更新为包括缩放收缩选项。。。还添加了(grread while loop)以使视觉上更容易接受。。。
 
M、 R。
回复

使用道具 举报

5

主题

1334

帖子

1410

银币

限制会员

铜币
-20
发表于 2022-7-5 18:12:18 | 显示全部楼层
代码再次更新,但没有我预期的那么好。。。
回复

使用道具 举报

16

主题

69

帖子

54

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
80
发表于 2022-7-5 18:16:50 | 显示全部楼层
live adjust使其更为有用。它还帮助我了解它的工作原理,以便我可以更轻松地编辑它。
不过,我对扭曲选项有点困惑。看起来很奇怪。
回复

使用道具 举报

5

主题

1334

帖子

1410

银币

限制会员

铜币
-20
发表于 2022-7-5 18:22:17 | 显示全部楼层
 
这是因为我已经尝试并成功地从您发布的视频剪辑示例中复制了vulcano教程。。。关键是,最上面的面应该旋转(扭曲)最多,而最接近底部的面旋转(扭曲)最少——所以我在(setq vln…)的公式中包含了这一点。。。但你是对的-在大多数情况下,像我最新的测试,这是奇怪的,但什么。M、 R。
回复

使用道具 举报

16

主题

69

帖子

54

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
80
发表于 2022-7-5 18:27:27 | 显示全部楼层
我稍微修改了代码,使工作流更快,更易于使用。它不再要求向量的第一个点,现在使用圆半径使用的同一点。
 
有没有一种合理的方法可以根据光标位置动态地改变矢量的方向,就像比例那样?在我看来,向量方向似乎改变了UCS,我不确定这样不断更新UCS是否合适。
 
**编辑**
似乎我在将第一个向量点更改为比例圆心时,在获取比例特征方面遇到了轻微的困难。
 
  1. (defun c:sse () (c:SoftSelectEdit)) ;shortcut to call SoftSelectEdit
  2. (defun c:SoftSelectEdit ( / *error* barycent *adoc* ucsf osm 3dosm ss e ch pl p vl c r v v1 vln eg ex xx p1 p2 rf gr ux uy uc )
  3. (vl-load-com)
  4. (defun *error* ( m )
  5.    (if ucsf
  6.      (command "_.UCS" "_P")
  7.    )
  8.    (if osm
  9.      (setvar 'osmode osm)
  10.    )
  11.    (if 3dosm
  12.      (setvar '3dosmode 3dosm)
  13.    )
  14.    (vla-endundomark *adoc*)
  15.    (if m
  16.      (prompt m)
  17.    )
  18.    (princ)
  19. )
  20. (defun barycent ( l )
  21.    (mapcar '(lambda ( x ) (/ x (length l))) (list (apply '+ (mapcar 'car l)) (apply '+ (mapcar 'cadr l)) (apply '+ (mapcar 'caddr l))))
  22. )
  23. (vla-startundomark (setq *adoc* (vla-get-activedocument (vlax-get-acad-object))))
  24. (if (= (getvar 'worlducs) 0)
  25.    (progn
  26.      (command "_.UCS" "_W")
  27.      (setq ucsf t)
  28.    )
  29. )
  30. (setq osm (getvar 'osmode))
  31. (if (getvar '3dosmode)
  32.    (setq 3dosm (getvar '3dosmode))
  33. )
  34. (prompt "\nPick editable entity for SoftSelectEdit (SPLINE,POLYLINE,MESH,POLYFACE MESH) on unlocked layer...")
  35. (setq ss (ssget "_+.:E:S:L" '((0 . "*POLYLINE,SPLINE,MESH"))))
  36. (while (not ss)
  37.    (prompt "\nMissed - empty sel.set... Please pick editable entity for SoftSelectEdit (SPLINE,POLYLINE,MESH,POLYFACE MESH) on unlocked layer...")
  38.    (setq ss (ssget "_+.:E:S:L" '((0 . "*POLYLINE,SPLINE,MESH"))))
  39. )
  40. (setq e (ssname ss 0))
  41. (initget "Move-Stretch Twist Scale-Shrink")
  42. (setq ch (getkword "\nChoose mode [Move-Stretch/Twist/Scale-Shrink] <Move-Stretch> : "))
  43. (if (null ch)
  44.    (setq ch "Move-Stretch")
  45. )
  46. (cond
  47.    ( (= ch "Move-Stretch")
  48.      (cond
  49.        ( (= (cdr (assoc 0 (entget e))) "LWPOLYLINE")
  50.          (setq pl (mapcar '(lambda ( p ) (trans (list (car p) (cadr p) (cdr (assoc 38 (entget e)))) e 0)) (mapcar 'cdr (vl-remove-if-not '(lambda ( x ) (= (car x) 10)) (entget e)))))
  51.          (command "_.UCS" "_E" e)
  52.          (while (< 0 (getvar 'cmdactive))
  53.            (command "")
  54.          )
  55.          (setvar 'osmode 1)
  56.          (while (setq p (getpoint "\nPick or specify main vertex-vertices for SoftSelectEdit - ENTER TO FINISH : "))
  57.            (setq vl (cons (trans p 1 0) vl))
  58.            (print (trans p 1 0))
  59.          )
  60.          (setq c (barycent vl))
  61.          (prompt "\nPick or specify radius of SoftSelectEdit : ")
  62.          (command "_.CIRCLE" "_non" (trans c 0 1) "\")
  63.          (setq r (cdr (assoc 40 (entget (entlast)))))
  64.          (entdel (entlast))
  65.          (setq p1 (trans c 0 1)) ;use the circle center point as the vector start point
  66.          (setq p2 (getpoint p1 "\nPick or specify end point of vector of SoftSelectEdit : "))
  67.          (setq v (mapcar '- (trans p2 1 0) (trans p1 1 0)))
  68.          (setq v1 (mapcar '/ v (list (distance '(0.0 0.0 0.0) v) (distance '(0.0 0.0 0.0) v) (distance '(0.0 0.0 0.0) v))))
  69.          (setq vl (vl-remove-if-not '(lambda ( x ) (< (distance c x) r)) pl))
  70.          (command "_.UCS" "_3P" "_non" p1 "_non" p2 "")
  71.          (setq eg (entget e))
  72.          (while (= 5 (car (setq gr (grread t))))
  73.            (setq v (mapcar '* v1 (list (car (cadr gr)) (car (cadr gr)) (car (cadr gr)))))
  74.            (setq vln (mapcar '(lambda ( p ) (mapcar '+ p (mapcar '* v (list (/ (- r (distance c p)) r) (/ (- r (distance c p)) r) (/ (- r (distance c p)) r))))) vl))
  75.            (setq ex (mapcar '(lambda ( x / xx ) (if (setq xx (vl-member-if '(lambda ( y ) (equal (cdr x) (mapcar '+ '(0.0 0.0) (trans y 0 e)) 1e-6)) vl)) (cons 10 (mapcar '+ '(0.0 0.0) (trans (nth (vl-position (car xx) vl) vln) 0 e))) x)) eg))
  76.            (entupd (cdr (assoc -1 (entmod ex))))
  77.          )
  78.          (command "_.UCS" "_P")
  79.          (command "_.UCS" "_P")
  80.        )
  81.        ( (and (= (cdr (assoc 0 (entget e))) "POLYLINE") (= "AcDb2dPolyline" (cdr (assoc 100 (reverse (entget e)))))) ;;; - it's old heavy 2D POLYLINE
  82.          (command "_.CONVERTPOLY" "_L" e)
  83.          (while (< 0 (getvar 'cmdactive))
  84.            (command "")
  85.          )
  86.          (setq pl (mapcar '(lambda ( p ) (trans (list (car p) (cadr p) (cdr (assoc 38 (entget e)))) e 0)) (mapcar 'cdr (vl-remove-if-not '(lambda ( x ) (= (car x) 10)) (entget e)))))
  87.          (command "_.UCS" "_E" e)
  88.          (while (< 0 (getvar 'cmdactive))
  89.            (command "")
  90.          )
  91.          (setvar 'osmode 1)
  92.          (while (setq p (getpoint "\nPick or specify main vertex-vertices for SoftSelectEdit - ENTER TO FINISH : "))
  93.            (setq vl (cons (trans p 1 0) vl))
  94.            (print (trans p 1 0))
  95.          )
  96.          (setq c (barycent vl))
  97.          (prompt "\nPick or specify radius of SoftSelectEdit : ")
  98.          (command "_.CIRCLE" "_non" (trans c 0 1) "\")
  99.          (setq r (cdr (assoc 40 (entget (entlast)))))
  100.          (entdel (entlast))
  101.          (setq p1 (getpoint (trans c 0 1) "\nPick or specify start point of vector of softselvertmod : "))
  102.          (setq p2 (getpoint p1 "\nPick or specify end point of vector of SoftSelectEdit : "))
  103.          (setq v (mapcar '- (trans p2 1 0) (trans p1 1 0)))
  104.          (setq v1 (mapcar '/ v (list (distance '(0.0 0.0 0.0) v) (distance '(0.0 0.0 0.0) v) (distance '(0.0 0.0 0.0) v))))
  105.          (setq vl (vl-remove-if-not '(lambda ( x ) (< (distance c x) r)) pl))
  106.          (setq eg (entget e))
  107.          (command "_.UCS" "_3P" "_non" p1 "_non" p2 "")
  108.          (while (= 5 (car (setq gr (grread t))))
  109.            (setq v (mapcar '* v1 (list (car (cadr gr)) (car (cadr gr)) (car (cadr gr)))))
  110.            (setq vln (mapcar '(lambda ( p ) (mapcar '+ p (mapcar '* v (list (/ (- r (distance c p)) r) (/ (- r (distance c p)) r) (/ (- r (distance c p)) r))))) vl))
  111.            (setq ex (mapcar '(lambda ( x / xx ) (if (setq xx (vl-member-if '(lambda ( y ) (equal (cdr x) (mapcar '+ '(0.0 0.0) (trans y 0 e)) 1e-6)) vl)) (cons 10 (mapcar '+ '(0.0 0.0) (trans (nth (vl-position (car xx) vl) vln) 0 e))) x)) eg))
  112.            (entupd (cdr (assoc -1 (entmod ex))))
  113.          )
  114.          (command "_.UCS" "_P")
  115.          (command "_.UCS" "_P")
  116.          (command "_.CONVERTPOLY" "_H" e)
  117.          (while (< 0 (getvar 'cmdactive))
  118.            (command "")
  119.          )
  120.        )
  121.        ( (= (cdr (assoc 0 (entget e))) "POLYLINE") ;;; it's 3DPOLYLINE or POLYFACE MESH
  122.          (setq v e)
  123.          (while (= (cdr (assoc 0 (entget (setq v (entnext v))))) "VERTEX")
  124.            (setq pl (cons (cdr (assoc 10 (entget v))) pl))
  125.          )
  126.          (setq pl (reverse pl))
  127.          (setvar 'osmode 1)
  128.          (while (setq p (getpoint "\nPick or specify main vertex-vertices for SoftSelectEdit - ENTER TO FINISH : "))
  129.            (setq vl (cons p vl))
  130.            (print p)
  131.          )
  132.          (setq c (barycent vl))
  133.          (prompt "\nPick or specify radius of SoftSelectEdit : ")
  134.          (command "_.SPHERE" "_non" c "\")
  135.          (setq r (expt (/ (* 3.0 (vla-get-volume (vlax-ename->vla-object (entlast)))) 4.0 pi) (/ 1.0 3.0)))
  136.          (entdel (entlast))
  137.          (initget 1 "XY YZ ZX")
  138.          (setq uc (getkword "\nChoose option of setting UCS [XY/YZ/ZX] : "))
  139.          (cond
  140.            ( (= uc "XY")
  141.              (setq ux (mapcar '+ c '(1.0 0.0 0.0)))
  142.              (setq uy (mapcar '+ c '(0.0 1.0 0.0)))
  143.              (command "_.UCs" "_3P" "_non" c "_non" ux "_non" uy)
  144.            )
  145.            ( (= uc "YZ")
  146.              (setq ux (mapcar '+ c '(0.0 1.0 0.0)))
  147.              (setq uy (mapcar '+ c '(0.0 0.0 1.0)))
  148.              (command "_.UCs" "_3P" "_non" c "_non" ux "_non" uy)
  149.            )
  150.            ( (= uc "ZX")
  151.              (setq ux (mapcar '+ c '(0.0 0.0 1.0)))
  152.              (setq uy (mapcar '+ c '(1.0 0.0 0.0)))
  153.              (command "_.UCs" "_3P" "_non" c "_non" ux "_non" uy)
  154.            )
  155.          )
  156.          (setq p1 (getpoint '(0.0 0.0 0.0) "\nPick or specify start point of vector of SoftSelectEdit : "))
  157.          (setq p2 (getpoint p1 "\nPick or specify end point of vector of SoftSelectEdit : "))
  158.          (setq v (mapcar '- (setq p2 (trans p2 1 0)) (setq p1 (trans p1 1 0))))
  159.          (setq v1 (mapcar '/ v (list (distance '(0.0 0.0 0.0) v) (distance '(0.0 0.0 0.0) v) (distance '(0.0 0.0 0.0) v))))
  160.          (setq vl (vl-remove-if-not '(lambda ( x ) (< (distance c x) r)) pl))
  161.          (command "_.UCS" "_ZA" "_non" (trans p1 0 1) "_non" (trans p2 0 1) "")
  162.          (while (= 5 (car (setq gr (grread t))))
  163.            (setq v (mapcar '* v1 (list (car (cadr gr)) (car (cadr gr)) (car (cadr gr)))))
  164.            (setq vln (mapcar '(lambda ( p ) (mapcar '+ p (mapcar '* v (list (/ (- r (distance c p)) r) (/ (- r (distance c p)) r) (/ (- r (distance c p)) r))))) vl))
  165.            (setq v e)
  166.            (while (= (cdr (assoc 0 (entget (setq v (entnext v))))) "VERTEX")
  167.              (if (setq xx (vl-member-if '(lambda ( p ) (equal p (cdr (assoc 10 (entget v))) 1e-6)) vl))
  168.                (entupd (cdr (assoc -1 (entmod (subst (cons 10 (nth (vl-position (car xx) vl) vln)) (assoc 10 (entget v)) (entget v))))))
  169.              )
  170.            )
  171.            (entupd e)
  172.            (setq vl vln)
  173.          )
  174.          (command "_.UCS" "_P")
  175.          (command "_.UCS" "_P")
  176.        )
  177.        ( (= (cdr (assoc 0 (entget e))) "MESH") ;;; it's MESH
  178.          (setq pl (mapcar 'cdr (vl-remove-if-not '(lambda ( x ) (= (car x) 10)) (entget e))))
  179.          (setvar 'osmode 1)
  180.          (while (setq p (getpoint "\nPick or specify main vertex-vertices for SoftSelectEdit - ENTER TO FINISH : "))
  181.            (setq vl (cons p vl))
  182.            (print p)
  183.          )
  184.          (setq c (barycent vl))
  185.          (prompt "\nPick or specify radius of SoftSelectEdit : ")
  186.          (command "_.SPHERE" "_non" c "\")
  187.          (setq r (expt (/ (* 3.0 (vla-get-volume (vlax-ename->vla-object (entlast)))) 4.0 pi) (/ 1.0 3.0)))
  188.          (entdel (entlast))
  189.          (initget 1 "XY YZ ZX")
  190.          (setq uc (getkword "\nChoose option of setting UCS [XY/YZ/ZX] : "))
  191.          (cond
  192.            ( (= uc "XY")
  193.              (setq ux (mapcar '+ c '(1.0 0.0 0.0)))
  194.              (setq uy (mapcar '+ c '(0.0 1.0 0.0)))
  195.              (command "_.UCs" "_3P" "_non" c "_non" ux "_non" uy)
  196.            )
  197.            ( (= uc "YZ")
  198.              (setq ux (mapcar '+ c '(0.0 1.0 0.0)))
  199.              (setq uy (mapcar '+ c '(0.0 0.0 1.0)))
  200.              (command "_.UCs" "_3P" "_non" c "_non" ux "_non" uy)
  201.            )
  202.            ( (= uc "ZX")
  203.              (setq ux (mapcar '+ c '(0.0 0.0 1.0)))
  204.              (setq uy (mapcar '+ c '(1.0 0.0 0.0)))
  205.              (command "_.UCs" "_3P" "_non" c "_non" ux "_non" uy)
  206.            )
  207.          )
  208.          (setq p1 (getpoint '(0.0 0.0 0.0) "\nPick or specify start point of vector of SoftSelectEdit : "))
  209.          (setq p2 (getpoint p1 "\nPick or specify end point of vector of SoftSelectEdit : "))
  210.          (setq v (mapcar '- (setq p2 (trans p2 1 0)) (setq p1 (trans p1 1 0))))
  211.          (setq v1 (mapcar '/ v (list (distance '(0.0 0.0 0.0) v) (distance '(0.0 0.0 0.0) v) (distance '(0.0 0.0 0.0) v))))
  212.          (setq vl (vl-remove-if-not '(lambda ( x ) (< (distance c x) r)) pl))
  213.          (setq eg (entget e))
  214.          (command "_.UCS" "_ZA" "_non" (trans p1 0 1) "_non" (trans p2 0 1) "")
  215.          (while (= 5 (car (setq gr (grread t))))
  216.            (setq v (mapcar '* v1 (list (car (cadr gr)) (car (cadr gr)) (car (cadr gr)))))
  217.            (setq vln (mapcar '(lambda ( p ) (mapcar '+ p (mapcar '* v (list (/ (- r (distance c p)) r) (/ (- r (distance c p)) r) (/ (- r (distance c p)) r))))) vl))
  218.            (setq ex (mapcar '(lambda ( x / xx ) (if (setq xx (vl-member-if '(lambda ( y ) (equal (cdr x) y 1e-6)) vl)) (cons (car x) (nth (vl-position (car xx) vl) vln)) x)) eg))
  219.            (entupd (cdr (assoc -1 (entmod ex))))
  220.          )
  221.          (command "_.UCS" "_P")
  222.          (command "_.UCS" "_P")
  223.        )
  224.        ( t ;;; else - it's SPLINE
  225.          (if (assoc 11 (entget e))
  226.            (setq pl (mapcar 'cdr (vl-remove-if-not '(lambda ( x ) (= (car x) 11)) (entget e))))
  227.            (setq pl (mapcar 'cdr (vl-remove-if-not '(lambda ( x ) (= (car x) 10)) (entget e))))
  228.          )
  229.          (if (getvar '3dosmode)
  230.            (progn
  231.              (setvar '3dosmode 16)
  232.              (setvar 'osmode 0)
  233.            )
  234.            (setvar 'osmode 1)
  235.          )
  236.          (while (setq p (getpoint "\nPick or specify main vertex-vertices for SoftSelectEdit - ENTER TO FINISH : "))
  237.            (setq vl (cons p vl))
  238.            (print p)
  239.          )
  240.          (setq c (barycent vl))
  241.          (prompt "\nPick or specify radius of SoftSelectEdit : ")
  242.          (command "_.SPHERE" "_non" c "\")
  243.          (setq r (expt (/ (* 3.0 (vla-get-volume (vlax-ename->vla-object (entlast)))) 4.0 pi) (/ 1.0 3.0)))
  244.          (entdel (entlast))
  245.          (initget 1 "XY YZ ZX")
  246.          (setq uc (getkword "\nChoose option of setting UCS [XY/YZ/ZX] : "))
  247.          (cond
  248.            ( (= uc "XY")
  249.              (setq ux (mapcar '+ c '(1.0 0.0 0.0)))
  250.              (setq uy (mapcar '+ c '(0.0 1.0 0.0)))
  251.              (command "_.UCs" "_3P" "_non" c "_non" ux "_non" uy)
  252.            )
  253.            ( (= uc "YZ")
  254.              (setq ux (mapcar '+ c '(0.0 1.0 0.0)))
  255.              (setq uy (mapcar '+ c '(0.0 0.0 1.0)))
  256.              (command "_.UCs" "_3P" "_non" c "_non" ux "_non" uy)
  257.            )
  258.            ( (= uc "ZX")
  259.              (setq ux (mapcar '+ c '(0.0 0.0 1.0)))
  260.              (setq uy (mapcar '+ c '(1.0 0.0 0.0)))
  261.              (command "_.UCs" "_3P" "_non" c "_non" ux "_non" uy)
  262.            )
  263.          )
  264.          (setq p1 (getpoint '(0.0 0.0 0.0) "\nPick or specify start point of vector of SoftSelectEdit : "))
  265.          (setq p2 (getpoint p1 "\nPick or specify end point of vector of SoftSelectEdit : "))
  266.          (setq v (mapcar '- (setq p2 (trans p2 1 0)) (setq p1 (trans p1 1 0))))
  267.          (setq v1 (mapcar '/ v (list (distance '(0.0 0.0 0.0) v) (distance '(0.0 0.0 0.0) v) (distance '(0.0 0.0 0.0) v))))
  268.          (setq vl (vl-remove-if-not '(lambda ( x ) (< (distance c x) r)) pl))
  269.          (setq eg (entget e))
  270.          (command "_.UCS" "_ZA" "_non" (trans p1 0 1) "_non" (trans p2 0 1) "")
  271.          (while (= 5 (car (setq gr (grread t))))
  272.            (setq v (mapcar '* v1 (list (car (cadr gr)) (car (cadr gr)) (car (cadr gr)))))
  273.            (setq vln (mapcar '(lambda ( p ) (mapcar '+ p (mapcar '* v (list (/ (- r (distance c p)) r) (/ (- r (distance c p)) r) (/ (- r (distance c p)) r))))) vl))
  274.            (setq ex (mapcar '(lambda ( x / xx ) (if (setq xx (vl-member-if '(lambda ( y ) (equal (cdr x) y 1e-6)) vl)) (cons (car x) (nth (vl-position (car xx) vl) vln)) x)) eg))
  275.            (entupd (cdr (assoc -1 (entmod ex))))
  276.          )
  277.          (command "_.UCS" "_P")
  278.          (command "_.UCS" "_P")
  279.        )
  280.      )
  281.    )
  282.    ( (= ch "Twist")
  283.      (cond
  284.        ( (= (cdr (assoc 0 (entget e))) "LWPOLYLINE")
  285.          (setq pl (mapcar '(lambda ( p ) (trans (list (car p) (cadr p) (cdr (assoc 38 (entget e)))) e 0)) (mapcar 'cdr (vl-remove-if-not '(lambda ( x ) (= (car x) 10)) (entget e)))))
  286.          (command "_.UCS" "_E" e)
  287.          (while (< 0 (getvar 'cmdactive))
  288.            (command "")
  289.          )
  290.          (setvar 'osmode 1)
  291.          (while (setq p (getpoint "\nPick or specify main vertex-vertices for SoftSelectEdit - ENTER TO FINISH : "))
  292.            (setq vl (cons (trans p 1 0) vl))
  293.            (print (trans p 1 0))
  294.          )
  295.          (setq c (barycent vl))
  296.          (prompt "\nPick or specify radius of SoftSelectEdit : ")
  297.          (command "_.CIRCLE" "_non" (trans c 0 1) "\")
  298.          (setq r (cdr (assoc 40 (entget (entlast)))))
  299.          (entdel (entlast))
  300.          (setq p1 (getpoint (trans c 0 1) "\nPick or specify start point of vector of SoftSelectEdit : "))
  301.          (setq p2 (getpoint p1 "\nPick or specify end point of vector of SoftSelectEdit : "))
  302.          (setq v (mapcar '- (trans p2 1 0) (trans p1 1 0)))
  303.          (setq v1 (mapcar '/ v (list (distance '(0.0 0.0 0.0) v) (distance '(0.0 0.0 0.0) v) (distance '(0.0 0.0 0.0) v))))
  304.          (setq vl (vl-remove-if-not '(lambda ( x ) (< (distance c x) r)) pl))
  305.          (initget 2)
  306.          (setq rf (getreal "\nSpecify rotation factor per vector intensity in decimal degrees <10.0> : "))
  307.          (if (null rf)
  308.            (setq rf 10.0)
  309.          )
  310.          (command "_.UCS" "_3P" "_non" p1 "_non" p2 "")
  311.          (setq eg (entget e))
  312.          (while (= 5 (car (setq gr (grread t))))
  313.            (setq v (mapcar '* v1 (list (car (cadr gr)) (car (cadr gr)) (car (cadr gr)))))
  314.            (setq vln (mapcar '(lambda ( p ) (trans (append (mapcar '+ '(0.0 0.0) (polar (trans p1 0 e) (+ (angle (trans p1 0 e) (trans p 0 e)) (* (if (equal (distance (mapcar '+ '(0.0 0.0) (trans p1 0 e)) (trans p 0 e)) 0.0 1e-6) 0.0 (/ (distance '(0.0 0.0 0.0) v) (distance (mapcar '+ '(0.0 0.0) (trans p1 0 e)) (trans p 0 e)))) (cvunit rf "degree" "radian"))) (distance (mapcar '+ '(0.0 0.0) (trans p1 0 e)) (trans p 0 e)))) (list (caddr (trans p 0 e)))) e 0)) vl))
  315.            (setq ex (mapcar '(lambda ( x / xx ) (if (setq xx (vl-member-if '(lambda ( y ) (equal (cdr x) (mapcar '+ '(0.0 0.0) (trans y 0 e)) 1e-6)) vl)) (cons 10 (mapcar '+ '(0.0 0.0) (trans (nth (vl-position (car xx) vl) vln) 0 e))) x)) eg))
  316.            (entupd (cdr (assoc -1 (entmod ex))))
  317.          )
  318.          (command "_.UCS" "_P")
  319.          (command "_.UCS" "_P")
  320.        )
  321.        ( (and (= (cdr (assoc 0 (entget e))) "POLYLINE") (= "AcDb2dPolyline" (cdr (assoc 100 (reverse (entget e)))))) ;;; - it's old heavy 2D POLYLINE
  322.          (command "_.CONVERTPOLY" "_L" e)
  323.          (while (< 0 (getvar 'cmdactive))
  324.            (command "")
  325.          )
  326.          (setq pl (mapcar '(lambda ( p ) (trans (list (car p) (cadr p) (cdr (assoc 38 (entget e)))) e 0)) (mapcar 'cdr (vl-remove-if-not '(lambda ( x ) (= (car x) 10)) (entget e)))))
  327.          (command "_.UCS" "_E" e)
  328.          (while (< 0 (getvar 'cmdactive))
  329.            (command "")
  330.          )
  331.          (setvar 'osmode 1)
  332.          (while (setq p (getpoint "\nPick or specify main vertex-vertices for SoftSelectEdit - ENTER TO FINISH : "))
  333.            (setq vl (cons (trans p 1 0) vl))
  334.            (print (trans p 1 0))
  335.          )
  336.          (setq c (barycent vl))
  337.          (prompt "\nPick or specify radius of SoftSelectEdit : ")
  338.          (command "_.CIRCLE" "_non" (trans c 0 1) "\")
  339.          (setq r (cdr (assoc 40 (entget (entlast)))))
  340.          (entdel (entlast))
  341.          (setq p1 (getpoint (trans c 0 1) "\nPick or specify start point of vector of SoftSelectEdit : "))
  342.          (setq p2 (getpoint p1 "\nPick or specify end point of vector of SoftSelectEdit : "))
  343.          (setq v (mapcar '- (trans p2 1 0) (trans p1 1 0)))
  344.          (setq v1 (mapcar '/ v (list (distance '(0.0 0.0 0.0) v) (distance '(0.0 0.0 0.0) v) (distance '(0.0 0.0 0.0) v))))
  345.          (setq vl (vl-remove-if-not '(lambda ( x ) (< (distance c x) r)) pl))
  346.          (initget 2)
  347.          (setq rf (getreal "\nSpecify rotation factor per vector intensity in decimal degrees <10.0> : "))
  348.          (if (null rf)
  349.            (setq rf 10.0)
  350.          )
  351.          (command "_.UCS" "_3P" "_non" p1 "_non" p2 "")
  352.          (setq eg (entget e))
  353.          (while (= 5 (car (setq gr (grread t))))
  354.            (setq v (mapcar '* v1 (list (car (cadr gr)) (car (cadr gr)) (car (cadr gr)))))
  355.            (setq vln (mapcar '(lambda ( p ) (trans (append (mapcar '+ '(0.0 0.0) (polar (trans p1 0 e) (+ (angle (trans p1 0 e) (trans p 0 e)) (* (if (equal (distance (mapcar '+ '(0.0 0.0) (trans p1 0 e)) (trans p 0 e)) 0.0 1e-6) 0.0 (/ (distance '(0.0 0.0 0.0) v) (distance (mapcar '+ '(0.0 0.0) (trans p1 0 e)) (trans p 0 e)))) (cvunit rf "degree" "radian"))) (distance (mapcar '+ '(0.0 0.0) (trans p1 0 e)) (trans p 0 e)))) (list (caddr (trans p 0 e)))) e 0)) vl))
  356.            (setq ex (mapcar '(lambda ( x / xx ) (if (setq xx (vl-member-if '(lambda ( y ) (equal (cdr x) (mapcar '+ '(0.0 0.0) (trans y 0 e)) 1e-6)) vl)) (cons 10 (mapcar '+ '(0.0 0.0) (trans (nth (vl-position (car xx) vl) vln) 0 e))) x)) eg))
  357.            (entupd (cdr (assoc -1 (entmod ex))))
  358.          )
  359.          (command "_.UCS" "_P")
  360.          (command "_.UCS" "_P")
  361.          (command "_.CONVERTPOLY" "_H" e)
  362.          (while (< 0 (getvar 'cmdactive))
  363.            (command "")
  364.          )
  365.        )
  366.        ( (= (cdr (assoc 0 (entget e))) "POLYLINE") ;;; it's 3DPOLYLINE or POLYFACE MESH
  367.          (setq v e)
  368.          (while (= (cdr (assoc 0 (entget (setq v (entnext v))))) "VERTEX")
  369.            (setq pl (cons (cdr (assoc 10 (entget v))) pl))
  370.          )
  371.          (setq pl (reverse pl))
  372.          (setvar 'osmode 1)
  373.          (while (setq p (getpoint "\nPick or specify main vertex-vertices for SoftSelectEdit - ENTER TO FINISH : "))
  374.            (setq vl (cons p vl))
  375.            (print p)
  376.          )
  377.          (setq c (barycent vl))
  378.          (prompt "\nPick or specify radius of SoftSelectEdit : ")
  379.          (command "_.SPHERE" "_non" c "\")
  380.          (setq r (expt (/ (* 3.0 (vla-get-volume (vlax-ename->vla-object (entlast)))) 4.0 pi) (/ 1.0 3.0)))
  381.          (entdel (entlast))
  382.          (initget 1 "XY YZ ZX")
  383.          (setq uc (getkword "\nChoose option of setting UCS [XY/YZ/ZX] : "))
  384.          (cond
  385.            ( (= uc "XY")
  386.              (setq ux (mapcar '+ c '(1.0 0.0 0.0)))
  387.              (setq uy (mapcar '+ c '(0.0 1.0 0.0)))
  388.              (command "_.UCs" "_3P" "_non" c "_non" ux "_non" uy)
  389.            )
  390.            ( (= uc "YZ")
  391.              (setq ux (mapcar '+ c '(0.0 1.0 0.0)))
  392.              (setq uy (mapcar '+ c '(0.0 0.0 1.0)))
  393.              (command "_.UCs" "_3P" "_non" c "_non" ux "_non" uy)
  394.            )
  395.            ( (= uc "ZX")
  396.              (setq ux (mapcar '+ c '(0.0 0.0 1.0)))
  397.              (setq uy (mapcar '+ c '(1.0 0.0 0.0)))
  398.              (command "_.UCs" "_3P" "_non" c "_non" ux "_non" uy)
  399.            )
  400.          )
  401.          (setq p1 (getpoint '(0.0 0.0 0.0) "\nPick or specify start point of vector of SoftSelectEdit : "))
  402.          (setq p2 (getpoint p1 "\nPick or specify end point of vector of SoftSelectEdit : "))
  403.          (setq v (mapcar '- (setq p2 (trans p2 1 0)) (setq p1 (trans p1 1 0))))
  404.          (setq v1 (mapcar '/ v (list (distance '(0.0 0.0 0.0) v) (distance '(0.0 0.0 0.0) v) (distance '(0.0 0.0 0.0) v))))
  405.          (setq vl (vl-remove-if-not '(lambda ( x ) (< (distance c x) r)) pl))
  406.          (initget 2)
  407.          (setq rf (getreal "\nSpecify rotation factor per vector intensity in decimal degrees <10.0> : "))
  408.          (if (null rf)
  409.            (setq rf 10.0)
  410.          )
  411.          (command "_.UCS" "_ZA" "_non" (trans p1 0 1) "_non" (trans p2 0 1) "")
  412.          (while (= 5 (car (setq gr (grread t))))
  413.            (setq v (mapcar '* v1 (list (car (cadr gr)) (car (cadr gr)) (car (cadr gr)))))
  414.            (setq vln (mapcar '(lambda ( p ) (trans (append (mapcar '+ '(0.0 0.0) (polar (trans p1 0 v) (+ (angle (trans p1 0 v) (trans p 0 v)) (* (if (equal (distance (mapcar '+ '(0.0 0.0) (trans p1 0 v)) (trans p 0 v)) 0.0 1e-6) 0.0 (/ (distance '(0.0 0.0 0.0) v) (distance (mapcar '+ '(0.0 0.0) (trans p1 0 v)) (trans p 0 v)))) (cvunit rf "degree" "radian"))) (distance (mapcar '+ '(0.0 0.0) (trans p1 0 v)) (trans p 0 v)))) (list (caddr (trans p 0 v)))) v 0)) vl))
  415.            (setq v e)
  416.            (while (= (cdr (assoc 0 (entget (setq v (entnext v))))) "VERTEX")
  417.              (if (setq xx (vl-member-if '(lambda ( p ) (equal p (cdr (assoc 10 (entget v))) 1e-6)) vl))
  418.                (entupd (cdr (assoc -1 (entmod (subst (cons 10 (nth (vl-position (car xx) vl) vln)) (assoc 10 (entget v)) (entget v))))))
  419.              )
  420.            )
  421.            (entupd e)
  422.            (setq vl vln)
  423.          )
  424.          (command "_.UCS" "_P")
  425.          (command "_.UCS" "_P")
  426.        )
  427.        ( (= (cdr (assoc 0 (entget e))) "MESH") ;;; it's MESH
  428.          (setq pl (mapcar 'cdr (vl-remove-if-not '(lambda ( x ) (= (car x) 10)) (entget e))))
  429.          (setvar 'osmode 1)
  430.          (while (setq p (getpoint "\nPick or specify main vertex-vertices for SoftSelectEdit - ENTER TO FINISH : "))
  431.            (setq vl (cons p vl))
  432.            (print p)
  433.          )
  434.          (setq c (barycent vl))
  435.          (prompt "\nPick or specify radius of SoftSelectEdit : ")
  436.          (command "_.SPHERE" "_non" c "\")
  437.          (setq r (expt (/ (* 3.0 (vla-get-volume (vlax-ename->vla-object (entlast)))) 4.0 pi) (/ 1.0 3.0)))
  438.          (entdel (entlast))
  439.          (initget 1 "XY YZ ZX")
  440.          (setq uc (getkword "\nChoose option of setting UCS [XY/YZ/ZX] : "))
  441.          (cond
  442.            ( (= uc "XY")
  443.              (setq ux (mapcar '+ c '(1.0 0.0 0.0)))
  444.              (setq uy (mapcar '+ c '(0.0 1.0 0.0)))
  445.              (command "_.UCs" "_3P" "_non" c "_non" ux "_non" uy)
  446.            )
  447.            ( (= uc "YZ")
  448.              (setq ux (mapcar '+ c '(0.0 1.0 0.0)))
  449.              (setq uy (mapcar '+ c '(0.0 0.0 1.0)))
  450.              (command "_.UCs" "_3P" "_non" c "_non" ux "_non" uy)
  451.            )
  452.            ( (= uc "ZX")
  453.              (setq ux (mapcar '+ c '(0.0 0.0 1.0)))
  454.              (setq uy (mapcar '+ c '(1.0 0.0 0.0)))
  455.              (command "_.UCs" "_3P" "_non" c "_non" ux "_non" uy)
  456.            )
  457.          )
  458.          (setq p1 (getpoint '(0.0 0.0 0.0) "\nPick or specify start point of vector of SoftSelectEdit : "))
  459.          (setq p2 (getpoint p1 "\nPick or specify end point of vector of SoftSelectEdit : "))
  460.          (setq v (mapcar '- (setq p2 (trans p2 1 0)) (setq p1 (trans p1 1 0))))
  461.          (setq v1 (mapcar '/ v (list (distance '(0.0 0.0 0.0) v) (distance '(0.0 0.0 0.0) v) (distance '(0.0 0.0 0.0) v))))
  462.          (setq vl (vl-remove-if-not '(lambda ( x ) (< (distance c x) r)) pl))
  463.          (initget 2)
  464.          (setq rf (getreal "\nSpecify rotation factor per vector intensity in decimal degrees <10.0> : "))
  465.          (if (null rf)
  466.            (setq rf 10.0)
  467.          )
  468.          (command "_.UCS" "_ZA" "_non" (trans p1 0 1) "_non" (trans p2 0 1) "")
  469.          (setq eg (entget e))
  470.          (while (= 5 (car (setq gr (grread t))))
  471.            (setq v (mapcar '* v1 (list (car (cadr gr)) (car (cadr gr)) (car (cadr gr)))))
  472.            (setq vln (mapcar '(lambda ( p ) (trans (append (mapcar '+ '(0.0 0.0) (polar (trans p1 0 v) (+ (angle (trans p1 0 v) (trans p 0 v)) (* (if (equal (distance (mapcar '+ '(0.0 0.0) (trans p1 0 v)) (trans p 0 v)) 0.0 1e-6) 0.0 (/ (distance '(0.0 0.0 0.0) v) (distance (mapcar '+ '(0.0 0.0) (trans p1 0 v)) (trans p 0 v)))) (cvunit rf "degree" "radian"))) (distance (mapcar '+ '(0.0 0.0) (trans p1 0 v)) (trans p 0 v)))) (list (caddr (trans p 0 v)))) v 0)) vl))
  473.            (setq ex (mapcar '(lambda ( x / xx ) (if (setq xx (vl-member-if '(lambda ( y ) (equal (cdr x) y 1e-6)) vl)) (cons (car x) (nth (vl-position (car xx) vl) vln)) x)) eg))
  474.            (entupd (cdr (assoc -1 (entmod ex))))
  475.          )
  476.          (command "_.UCS" "_P")
  477.          (command "_.UCS" "_P")
  478.        )
  479.        ( t ;;; else - it's SPLINE
  480.          (if (assoc 11 (entget e))
  481.            (setq pl (mapcar 'cdr (vl-remove-if-not '(lambda ( x ) (= (car x) 11)) (entget e))))
  482.            (setq pl (mapcar 'cdr (vl-remove-if-not '(lambda ( x ) (= (car x) 10)) (entget e))))
  483.          )
  484.          (if (getvar '3dosmode)
  485.            (progn
  486.              (setvar '3dosmode 16)
  487.              (setvar 'osmode 0)
  488.            )
  489.            (setvar 'osmode 1)
  490.          )
  491.          (while (setq p (getpoint "\nPick or specify main vertex-vertices for SoftSelectEdit - ENTER TO FINISH : "))
  492.            (setq vl (cons p vl))
  493.            (print p)
  494.          )
  495.          (setq c (barycent vl))
  496.          (prompt "\nPick or specify radius of SoftSelectEdit : ")
  497.          (command "_.SPHERE" "_non" c "\")
  498.          (setq r (expt (/ (* 3.0 (vla-get-volume (vlax-ename->vla-object (entlast)))) 4.0 pi) (/ 1.0 3.0)))
  499.          (entdel (entlast))
  500.          (initget 1 "XY YZ ZX")
  501.          (setq uc (getkword "\nChoose option of setting UCS [XY/YZ/ZX] : "))
  502.          (cond
  503.            ( (= uc "XY")
  504.              (setq ux (mapcar '+ c '(1.0 0.0 0.0)))
  505.              (setq uy (mapcar '+ c '(0.0 1.0 0.0)))
  506.              (command "_.UCs" "_3P" "_non" c "_non" ux "_non" uy)
  507.            )
  508.            ( (= uc "YZ")
  509.              (setq ux (mapcar '+ c '(0.0 1.0 0.0)))
  510.              (setq uy (mapcar '+ c '(0.0 0.0 1.0)))
  511.              (command "_.UCs" "_3P" "_non" c "_non" ux "_non" uy)
  512.            )
  513.            ( (= uc "ZX")
  514.              (setq ux (mapcar '+ c '(0.0 0.0 1.0)))
  515.              (setq uy (mapcar '+ c '(1.0 0.0 0.0)))
  516.              (command "_.UCs" "_3P" "_non" c "_non" ux "_non" uy)
  517.            )
  518.          )
  519.          (setq p1 (getpoint '(0.0 0.0 0.0) "\nPick or specify start point of vector of SoftSelectEdit : "))
  520.          (setq p2 (getpoint p1 "\nPick or specify end point of vector of SoftSelectEdit : "))
  521.          (setq v (mapcar '- (setq p2 (trans p2 1 0)) (setq p1 (trans p1 1 0))))
  522.          (setq v1 (mapcar '/ v (list (distance '(0.0 0.0 0.0) v) (distance '(0.0 0.0 0.0) v) (distance '(0.0 0.0 0.0) v))))
  523.          (setq vl (vl-remove-if-not '(lambda ( x ) (< (distance c x) r)) pl))
  524.          (initget 2)
  525.          (setq rf (getreal "\nSpecify rotation factor per vector intensity in decimal degrees <10.0> : "))
  526.          (if (null rf)
  527.            (setq rf 10.0)
  528.          )
  529.          (command "_.UCS" "_ZA" "_non" (trans p1 0 1) "_non" (trans p2 0 1) "")
  530.          (setq eg (entget e))
  531.          (while (= 5 (car (setq gr (grread t))))
  532.            (setq v (mapcar '* v1 (list (car (cadr gr)) (car (cadr gr)) (car (cadr gr)))))
  533.            (setq vln (mapcar '(lambda ( p ) (trans (append (mapcar '+ '(0.0 0.0) (polar (trans p1 0 v) (+ (angle (trans p1 0 v) (trans p 0 v)) (* (if (equal (distance (mapcar '+ '(0.0 0.0) (trans p1 0 v)) (trans p 0 v)) 0.0 1e-6) 0.0 (/ (distance '(0.0 0.0 0.0) v) (distance (mapcar '+ '(0.0 0.0) (trans p1 0 v)) (trans p 0 v)))) (cvunit rf "degree" "radian"))) (distance (mapcar '+ '(0.0 0.0) (trans p1 0 v)) (trans p 0 v)))) (list (caddr (trans p 0 v)))) v 0)) vl))
  534.            (setq ex (mapcar '(lambda ( x / xx ) (if (setq xx (vl-member-if '(lambda ( y ) (equal (cdr x) y 1e-6)) vl)) (cons (car x) (nth (vl-position (car xx) vl) vln)) x)) eg))
  535.            (entupd (cdr (assoc -1 (entmod ex))))
  536.          )
  537.          (command "_.UCS" "_P")
  538.          (command "_.UCS" "_P")
  539.        )
  540.      )
  541.    )
  542.    ( (= ch "Scale-Shrink")
  543.      (cond
  544.        ( (= (cdr (assoc 0 (entget e))) "LWPOLYLINE")
  545.          (setq pl (mapcar '(lambda ( p ) (trans (list (car p) (cadr p) (cdr (assoc 38 (entget e)))) e 0)) (mapcar 'cdr (vl-remove-if-not '(lambda ( x ) (= (car x) 10)) (entget e)))))
  546.          (command "_.UCS" "_E" e)
  547.          (while (< 0 (getvar 'cmdactive))
  548.            (command "")
  549.          )
  550.          (setvar 'osmode 1)
  551.          (while (setq p (getpoint "\nPick or specify main vertex-vertices for SoftSelectEdit - ENTER TO FINISH : "))
  552.            (setq vl (cons (trans p 1 0) vl))
  553.            (print (trans p 1 0))
  554.          )
  555.          (setq c (barycent vl))
  556.          (prompt "\nPick or specify radius of SoftSelectEdit : ")
  557.          (command "_.CIRCLE" "_non" (trans c 0 1) "\")
  558.          (setq r (cdr (assoc 40 (entget (entlast)))))
  559.          (entdel (entlast))
  560.          (setq p1 (getpoint (trans c 0 1) "\nPick or specify start point of vector of SoftSelectEdit : "))
  561.          (setq p2 (getpoint p1 "\nPick or specify end point of vector of SoftSelectEdit : "))
  562.          (setq v (mapcar '- (trans p2 1 0) (trans p1 1 0)))
  563.          (setq v1 (mapcar '/ v (list (distance '(0.0 0.0 0.0) v) (distance '(0.0 0.0 0.0) v) (distance '(0.0 0.0 0.0) v))))
  564.          (setq vl (vl-remove-if-not '(lambda ( x ) (< (distance c x) r)) pl))
  565.          (command "_.UCS" "_3P" "_non" p1 "_non" p2 "")
  566.          (setq eg (entget e))
  567.          (while (= 5 (car (setq gr (grread t))))
  568.            (setq v (mapcar '* v1 (list (car (cadr gr)) (car (cadr gr)) (car (cadr gr)))))
  569.            (setq vln (mapcar '(lambda ( p ) (trans (append (mapcar '+ '(0.0 0.0) (polar (trans p1 0 e) (angle (trans p1 0 e) (trans p 0 e)) (if (equal (distance (mapcar '+ '(0.0 0.0) (trans p1 0 e)) (trans p 0 e)) 0.0 1e-6) 0.0 (/ (distance '(0.0 0.0 0.0) v) (distance (mapcar '+ '(0.0 0.0) (trans p1 0 e)) (trans p 0 e)))))) (list (caddr (trans p 0 e)))) e 0)) vl))
  570.            (setq ex (mapcar '(lambda ( x / xx ) (if (setq xx (vl-member-if '(lambda ( y ) (equal (cdr x) (mapcar '+ '(0.0 0.0) (trans y 0 e)) 1e-6)) vl)) (cons 10 (mapcar '+ '(0.0 0.0) (trans (nth (vl-position (car xx) vl) vln) 0 e))) x)) eg))
  571.            (entupd (cdr (assoc -1 (entmod ex))))
  572.          )
  573.          (command "_.UCS" "_P")
  574.          (command "_.UCS" "_P")
  575.        )
  576.        ( (and (= (cdr (assoc 0 (entget e))) "POLYLINE") (= "AcDb2dPolyline" (cdr (assoc 100 (reverse (entget e)))))) ;;; - it's old heavy 2D POLYLINE
  577.          (command "_.CONVERTPOLY" "_L" e)
  578.          (while (< 0 (getvar 'cmdactive))
  579.            (command "")
  580.          )
  581.          (setq pl (mapcar '(lambda ( p ) (trans (list (car p) (cadr p) (cdr (assoc 38 (entget e)))) e 0)) (mapcar 'cdr (vl-remove-if-not '(lambda ( x ) (= (car x) 10)) (entget e)))))
  582.          (command "_.UCS" "_E" e)
  583.          (while (< 0 (getvar 'cmdactive))
  584.            (command "")
  585.          )
  586.          (setvar 'osmode 1)
  587.          (while (setq p (getpoint "\nPick or specify main vertex-vertices for SoftSelectEdit - ENTER TO FINISH : "))
  588.            (setq vl (cons (trans p 1 0) vl))
  589.            (print (trans p 1 0))
  590.          )
  591.          (setq c (barycent vl))
  592.          (prompt "\nPick or specify radius of SoftSelectEdit : ")
  593.          (command "_.CIRCLE" "_non" (trans c 0 1) "\")
  594.          (setq r (cdr (assoc 40 (entget (entlast)))))
  595.          (entdel (entlast))
  596.          (setq p1 (getpoint (trans c 0 1) "\nPick or specify start point of vector of SoftSelectEdit : "))
  597.          (setq p2 (getpoint p1 "\nPick or specify end point of vector of SoftSelectEdit : "))
  598.          (setq v (mapcar '- (trans p2 1 0) (trans p1 1 0)))
  599.          (setq v1 (mapcar '/ v (list (distance '(0.0 0.0 0.0) v) (distance '(0.0 0.0 0.0) v) (distance '(0.0 0.0 0.0) v))))
  600.          (setq vl (vl-remove-if-not '(lambda ( x ) (< (distance c x) r)) pl))
  601.          (command "_.UCS" "_3P" "_non" p1 "_non" p2 "")
  602.          (setq eg (entget e))
  603.          (while (= 5 (car (setq gr (grread t))))
  604.            (setq v (mapcar '* v1 (list (car (cadr gr)) (car (cadr gr)) (car (cadr gr)))))
  605.            (setq vln (mapcar '(lambda ( p ) (trans (append (mapcar '+ '(0.0 0.0) (polar (trans p1 0 e) (angle (trans p1 0 e) (trans p 0 e)) (if (equal (distance (mapcar '+ '(0.0 0.0) (trans p1 0 e)) (trans p 0 e)) 0.0 1e-6) 0.0 (/ (distance '(0.0 0.0 0.0) v) (distance (mapcar '+ '(0.0 0.0) (trans p1 0 e)) (trans p 0 e)))))) (list (caddr (trans p 0 e)))) e 0)) vl))
  606.            (setq ex (mapcar '(lambda ( x / xx ) (if (setq xx (vl-member-if '(lambda ( y ) (equal (cdr x) (mapcar '+ '(0.0 0.0) (trans y 0 e)) 1e-6)) vl)) (cons 10 (mapcar '+ '(0.0 0.0) (trans (nth (vl-position (car xx) vl) vln) 0 e))) x)) eg))
  607.            (entupd (cdr (assoc -1 (entmod ex))))
  608.          )
  609.          (command "_.UCS" "_P")
  610.          (command "_.UCS" "_P")
  611.          (command "_.CONVERTPOLY" "_H" e)
  612.          (while (< 0 (getvar 'cmdactive))
  613.            (command "")
  614.          )
  615.        )
  616.        ( (= (cdr (assoc 0 (entget e))) "POLYLINE") ;;; it's 3DPOLYLINE or POLYFACE MESH
  617.          (setq v e)
  618.          (while (= (cdr (assoc 0 (entget (setq v (entnext v))))) "VERTEX")
  619.            (setq pl (cons (cdr (assoc 10 (entget v))) pl))
  620.          )
  621.          (setq pl (reverse pl))
  622.          (setvar 'osmode 1)
  623.          (while (setq p (getpoint "\nPick or specify main vertex-vertices for SoftSelectEdit - ENTER TO FINISH : "))
  624.            (setq vl (cons p vl))
  625.            (print p)
  626.          )
  627.          (setq c (barycent vl))
  628.          (prompt "\nPick or specify radius of SoftSelectEdit : ")
  629.          (command "_.SPHERE" "_non" c "\")
  630.          (setq r (expt (/ (* 3.0 (vla-get-volume (vlax-ename->vla-object (entlast)))) 4.0 pi) (/ 1.0 3.0)))
  631.          (entdel (entlast))
  632.          (initget 1 "XY YZ ZX")
  633.          (setq uc (getkword "\nChoose option of setting UCS [XY/YZ/ZX] : "))
  634.          (cond
  635.            ( (= uc "XY")
  636.              (setq ux (mapcar '+ c '(1.0 0.0 0.0)))
  637.              (setq uy (mapcar '+ c '(0.0 1.0 0.0)))
  638.              (command "_.UCs" "_3P" "_non" c "_non" ux "_non" uy)
  639.            )
  640.            ( (= uc "YZ")
  641.              (setq ux (mapcar '+ c '(0.0 1.0 0.0)))
  642.              (setq uy (mapcar '+ c '(0.0 0.0 1.0)))
  643.              (command "_.UCs" "_3P" "_non" c "_non" ux "_non" uy)
  644.            )
  645.            ( (= uc "ZX")
  646.              (setq ux (mapcar '+ c '(0.0 0.0 1.0)))
  647.              (setq uy (mapcar '+ c '(1.0 0.0 0.0)))
  648.              (command "_.UCs" "_3P" "_non" c "_non" ux "_non" uy)
  649.            )
  650.          )
  651.          (setq p1 (getpoint '(0.0 0.0 0.0) "\nPick or specify start point of vector of SoftSelectEdit : "))
  652.          (setq p2 (getpoint p1 "\nPick or specify end point of vector of SoftSelectEdit : "))
  653.          (setq v (mapcar '- (setq p2 (trans p2 1 0)) (setq p1 (trans p1 1 0))))
  654.          (setq v1 (mapcar '/ v (list (distance '(0.0 0.0 0.0) v) (distance '(0.0 0.0 0.0) v) (distance '(0.0 0.0 0.0) v))))
  655.          (setq vl (vl-remove-if-not '(lambda ( x ) (< (distance c x) r)) pl))
  656.          (command "_.UCS" "_ZA" "_non" (trans p1 0 1) "_non" (trans p2 0 1) "")
  657.          (while (= 5 (car (setq gr (grread t))))
  658.            (setq v (mapcar '* v1 (list (car (cadr gr)) (car (cadr gr)) (car (cadr gr)))))
  659.            (setq vln (mapcar '(lambda ( p ) (trans (append (mapcar '+ '(0.0 0.0) (polar (trans p1 0 v) (angle (trans p1 0 v) (trans p 0 v)) (if (equal (distance (mapcar '+ '(0.0 0.0) (trans p1 0 v)) (trans p 0 v)) 0.0 1e-6) 0.0 (/ (distance '(0.0 0.0 0.0) v) (distance (mapcar '+ '(0.0 0.0) (trans p1 0 v)) (trans p 0 v)))))) (list (caddr (trans p 0 v)))) v 0)) vl))
  660.            (setq v e)
  661.            (while (= (cdr (assoc 0 (entget (setq v (entnext v))))) "VERTEX")
  662.              (if (setq xx (vl-member-if '(lambda ( p ) (equal p (cdr (assoc 10 (entget v))) 1e-6)) vl))
  663.                (entupd (cdr (assoc -1 (entmod (subst (cons 10 (nth (vl-position (car xx) vl) vln)) (assoc 10 (entget v)) (entget v))))))
  664.              )
  665.            )
  666.            (entupd e)
  667.            (setq vl vln)
  668.          )
  669.          (command "_.UCS" "_P")
  670.          (command "_.UCS" "_P")
  671.        )
  672.        ( (= (cdr (assoc 0 (entget e))) "MESH") ;;; it's MESH
  673.          (setq pl (mapcar 'cdr (vl-remove-if-not '(lambda ( x ) (= (car x) 10)) (entget e))))
  674.          (setvar 'osmode 1)
  675.          (while (setq p (getpoint "\nPick or specify main vertex-vertices for SoftSelectEdit - ENTER TO FINISH : "))
  676.            (setq vl (cons p vl))
  677.            (print p)
  678.          )
  679.          (setq c (barycent vl))
  680.          (prompt "\nPick or specify radius of SoftSelectEdit : ")
  681.          (command "_.SPHERE" "_non" c "\")
  682.          (setq r (expt (/ (* 3.0 (vla-get-volume (vlax-ename->vla-object (entlast)))) 4.0 pi) (/ 1.0 3.0)))
  683.          (entdel (entlast))
  684.          (initget 1 "XY YZ ZX")
  685.          (setq uc (getkword "\nChoose option of setting UCS [XY/YZ/ZX] : "))
  686.          (cond
  687.            ( (= uc "XY")
  688.              (setq ux (mapcar '+ c '(1.0 0.0 0.0)))
  689.              (setq uy (mapcar '+ c '(0.0 1.0 0.0)))
  690.              (command "_.UCs" "_3P" "_non" c "_non" ux "_non" uy)
  691.            )
  692.            ( (= uc "YZ")
  693.              (setq ux (mapcar '+ c '(0.0 1.0 0.0)))
  694.              (setq uy (mapcar '+ c '(0.0 0.0 1.0)))
  695.              (command "_.UCs" "_3P" "_non" c "_non" ux "_non" uy)
  696.            )
  697.            ( (= uc "ZX")
  698.              (setq ux (mapcar '+ c '(0.0 0.0 1.0)))
  699.              (setq uy (mapcar '+ c '(1.0 0.0 0.0)))
  700.              (command "_.UCs" "_3P" "_non" c "_non" ux "_non" uy)
  701.            )
  702.          )
  703.          (setq p1 (getpoint '(0.0 0.0 0.0) "\nPick or specify start point of vector of SoftSelectEdit : "))
  704.          (setq p2 (getpoint p1 "\nPick or specify end point of vector of SoftSelectEdit : "))
  705.          (setq v (mapcar '- (setq p2 (trans p2 1 0)) (setq p1 (trans p1 1 0))))
  706.          (setq v1 (mapcar '/ v (list (distance '(0.0 0.0 0.0) v) (distance '(0.0 0.0 0.0) v) (distance '(0.0 0.0 0.0) v))))
  707.          (setq vl (vl-remove-if-not '(lambda ( x ) (< (distance c x) r)) pl))
  708.          (command "_.UCS" "_ZA" "_non" (trans p1 0 1) "_non" (trans p2 0 1) "")
  709.          (setq eg (entget e))
  710.          (while (= 5 (car (setq gr (grread t))))
  711.            (setq v (mapcar '* v1 (list (car (cadr gr)) (car (cadr gr)) (car (cadr gr)))))
  712.            (setq vln (mapcar '(lambda ( p ) (trans (append (mapcar '+ '(0.0 0.0) (polar (trans p1 0 v) (angle (trans p1 0 v) (trans p 0 v)) (if (equal (distance (mapcar '+ '(0.0 0.0) (trans p1 0 v)) (trans p 0 v)) 0.0 1e-6) 0.0 (/ (distance '(0.0 0.0 0.0) v) (distance (mapcar '+ '(0.0 0.0) (trans p1 0 v)) (trans p 0 v)))))) (list (caddr (trans p 0 v)))) v 0)) vl))
  713.            (setq ex (mapcar '(lambda ( x / xx ) (if (setq xx (vl-member-if '(lambda ( y ) (equal (cdr x) y 1e-6)) vl)) (cons (car x) (nth (vl-position (car xx) vl) vln)) x)) eg))
  714.            (entupd (cdr (assoc -1 (entmod ex))))
  715.          )
  716.          (command "_.UCS" "_P")
  717.          (command "_.UCS" "_P")
  718.        )
  719.        ( t ;;; else - it's SPLINE
  720.          (if (assoc 11 (entget e))
  721.            (setq pl (mapcar 'cdr (vl-remove-if-not '(lambda ( x ) (= (car x) 11)) (entget e))))
  722.            (setq pl (mapcar 'cdr (vl-remove-if-not '(lambda ( x ) (= (car x) 10)) (entget e))))
  723.          )
  724.          (if (getvar '3dosmode)
  725.            (progn
  726.              (setvar '3dosmode 16)
  727.              (setvar 'osmode 0)
  728.            )
  729.            (setvar 'osmode 1)
  730.          )
  731.          (while (setq p (getpoint "\nPick or specify main vertex-vertices for SoftSelectEdit - ENTER TO FINISH : "))
  732.            (setq vl (cons p vl))
  733.            (print p)
  734.          )
  735.          (setq c (barycent vl))
  736.          (prompt "\nPick or specify radius of SoftSelectEdit : ")
  737.          (command "_.SPHERE" "_non" c "\")
  738.          (setq r (expt (/ (* 3.0 (vla-get-volume (vlax-ename->vla-object (entlast)))) 4.0 pi) (/ 1.0 3.0)))
  739.          (entdel (entlast))
  740.          (initget 1 "XY YZ ZX")
  741.          (setq uc (getkword "\nChoose option of setting UCS [XY/YZ/ZX] : "))
  742.          (cond
  743.            ( (= uc "XY")
  744.              (setq ux (mapcar '+ c '(1.0 0.0 0.0)))
  745.              (setq uy (mapcar '+ c '(0.0 1.0 0.0)))
  746.              (command "_.UCs" "_3P" "_non" c "_non" ux "_non" uy)
  747.            )
  748.            ( (= uc "YZ")
  749.              (setq ux (mapcar '+ c '(0.0 1.0 0.0)))
  750.              (setq uy (mapcar '+ c '(0.0 0.0 1.0)))
  751.              (command "_.UCs" "_3P" "_non" c "_non" ux "_non" uy)
  752.            )
  753.            ( (= uc "ZX")
  754.              (setq ux (mapcar '+ c '(0.0 0.0 1.0)))
  755.              (setq uy (mapcar '+ c '(1.0 0.0 0.0)))
  756.              (command "_.UCs" "_3P" "_non" c "_non" ux "_non" uy)
  757.            )
  758.          )
  759.          (setq p1 (getpoint '(0.0 0.0 0.0) "\nPick or specify start point of vector of SoftSelectEdit : "))
  760.          (setq p2 (getpoint p1 "\nPick or specify end point of vector of SoftSelectEdit : "))
  761.          (setq v (mapcar '- (setq p2 (trans p2 1 0)) (setq p1 (trans p1 1 0))))
  762.          (setq v1 (mapcar '/ v (list (distance '(0.0 0.0 0.0) v) (distance '(0.0 0.0 0.0) v) (distance '(0.0 0.0 0.0) v))))
  763.          (setq vl (vl-remove-if-not '(lambda ( x ) (< (distance c x) r)) pl))
  764.          (command "_.UCS" "_ZA" "_non" (trans p1 0 1) "_non" (trans p2 0 1) "")
  765.          (setq eg (entget e))
  766.          (while (= 5 (car (setq gr (grread t))))
  767.            (setq v (mapcar '* v1 (list (car (cadr gr)) (car (cadr gr)) (car (cadr gr)))))
  768.            (setq vln (mapcar '(lambda ( p ) (trans (append (mapcar '+ '(0.0 0.0) (polar (trans p1 0 v) (angle (trans p1 0 v) (trans p 0 v)) (if (equal (distance (mapcar '+ '(0.0 0.0) (trans p1 0 v)) (trans p 0 v)) 0.0 1e-6) 0.0 (/ (distance '(0.0 0.0 0.0) v) (distance (mapcar '+ '(0.0 0.0) (trans p1 0 v)) (trans p 0 v)))))) (list (caddr (trans p 0 v)))) v 0)) vl))
  769.            (setq ex (mapcar '(lambda ( x / xx ) (if (setq xx (vl-member-if '(lambda ( y ) (equal (cdr x) y 1e-6)) vl)) (cons (car x) (nth (vl-position (car xx) vl) vln)) x)) eg))
  770.            (entupd (cdr (assoc -1 (entmod ex))))
  771.          )
  772.          (command "_.UCS" "_P")
  773.          (command "_.UCS" "_P")
  774.        )
  775.      )
  776.    )
  777. )
  778. (*error* nil)
  779. )
回复

使用道具 举报

16

主题

69

帖子

54

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
80
发表于 2022-7-5 18:32:27 | 显示全部楼层
此外,我不确定选择多个主顶点的能力是否正常。只有一个似乎效果很好。我可能倾向于完全放弃多个vert功能,除非你认为它可以做得更顺利。
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-13 05:00 , Processed in 0.717128 second(s), 83 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表