0 Members and 1 Guest are viewing this topic.
(defun c:xdtb_blkalnatdist (/ 9pt2 9pt3 9pt4 9pt5 9pt6 9pt8 9pt9 box dist dpt1 dpt2 e ecs ept height pts spt spt1 spt2 ss ss1 v vec x xdir xdir1 ydir ) (defun _align (e ss) (mapcar '(lambda (x) (setq ecs (xdrx-getpropertyvalue x "ecs")) (setq box (xdrx-entity-box x (cadr ecs)) 9pt2 (xd::geom:get9pt box 2) 9pt8 (xd::geom:get9pt box 8) 9pt4 (xd::geom:get9pt box 4) 9pt6 (xd::geom:get9pt box 6) 9pt5 (xd::geom:get9pt box 5) 9pt3 (xd::geom:get9pt box 3) 9pt9 (xd::geom:get9pt box 9) spt (xdrx-getpropertyvalue e "closestpointto" 9pt5) xdir (xdrx-getpropertyvalue e "firstderiv" spt) vec (xdrx-vector-normalize (mapcar '- 9pt5 spt ) ) ydir (xdrx-vector-perpvector xdir) ydir (if (xdrx-vector-iscodirectional ydir vec) ydir (xdrx-vector-negate ydir) ) ept (mapcar '+ spt (xdrx-vector-product ydir #xd-var-global-dist) ) ) (if (= #mode "V") (progn (setq spt1 (xdrx-points-nearpt spt 9pt4 9pt6) xdir1 (xdrx-vector-normalize (mapcar '- 9pt9 9pt6 ) ) ) ) (progn (setq spt1 (xdrx-points-nearpt spt 9pt2 9pt8) xdir1 (xdrx-vector-normalize (mapcar '- 9pt3 9pt2 ) ) ) ) ) (setq xdir1 (if (xdrx-vector-iscodirectional xdir1 xdir (/ pi 2.0)) xdir1 (xdrx-vector-negate xdir1) ) ) (setq spt2 (mapcar '+ spt1 xdir1 ) ) (setq dpt1 ept dpt2 (mapcar '+ dpt1 xdir ) ) (xdrx-entity-align x spt1 spt2 dpt1 dpt2) (setq box (xdrx-entity-box x (cadr (xdrx-getpropertyvalue x "ecs"))) dist (xdrx-getpropertyvalue box "distanceto" e) ) (if (> (/ (abs (- dist #xd-var-global-dist)) #xd-var-global-dist) 0.05) (progn (xdrx-entity-align x dpt1 dpt2 dpt1 (xdrx-vector-negate (xdrx-vector-normalize (mapcar '- dpt2 dpt1 ) ) ) ) ) ) ) (xdrx-ss->ents ss) ) ) (xd::doc:getdouble (xdrx-string-multilanguage "\n模糊搜索范围:" "\nFuzzy search range:") "#xd-var-global-fuzz-range" (setq height (xd::doc:getpickboxheight)) ) (xd::doc:getdouble (xdrx-string-multilanguage "\n图块距多段线距离:" "\nDistance between block and polyline:" ) "#xd-var-global-dist" (setq height (xd::doc:getpickboxheight)) ) (if (not (and #mode (= (type #mode) 'str) ) ) (setq #mode "H") ) (if (and (xdrx-initget 0 "H V") (setq v (getint (xdrx-string-formatex (xdrx-string-multilanguage "\n对齐方式[水平(H)/垂直(V)]<%s>:" "\nAlignment [Horizontal (H)/Vertical (V)]<%s>:") #mode ) ) ) ) (setq #mode v) ) (if (setq ss (xdrx-ssget (xdrx-string-multilanguage "\n选择曲线对象<退出>:" "\nSelect Curve Objects<Exit>:") '((0 . "*polyline")) ) ) (progn (mapcar '(lambda (x) (setq pts (xdrx-getpropertyvalue x "tobox" #xd-var-global-fuzz-range) pts (xdrx-getsamplept pts height) ) (if (setq ss1 (ssget "cp" pts '((0 . "insert")))) (progn (_align x ss1) ) ) ) (xdrx-ss->ents ss) ) ) ) (princ))