谢谢你的挑战
我考虑了很多,我得出的解决方案是按照绘制的顺序和方向绘制钢筋
请看所附的图片,因为它显示了即时通讯后
这是我的伪代码
你怎么想?
点3.dwg 不不不
它不会按我需要的方式工作
Pbe方式是最好的
需要更多思考时间 你好
还有一个想法,
首先创建我的初始post请求,我将标记明显和不明显的交点坐标,然后我将创建所有矩形,但将其限制为最大线段长度(墙)
相比提取钢筋,我将要求用户通过选择每个钢筋的左波顿点和右上点来选择要提取的钢筋。将这些坐标存储在名为“userCoor”的列表中,并从这些坐标中创建电抗
我认为这是唯一的方法(我知道的)来做到这一点。
你怎么想?
谢伊 (defun c:demo ( / LWPoly _from pl pts temp corners ang mid v h 1p 2p objrot)
;;; Demo by pBe 06May2013 ;;;
;;; This demo will work only at the lower left corner and upper right corner ;;;
;;;It is written as a guide and not in any way complete and accurate ::;
(setvar 'pdmode 34)
(setvar 'cmdecho 0)
(defun LWPoly (lst)
(entmakex (append (list (cons 0 "LWPOLYLINE")
(cons 100 "AcDbEntity")
(cons 100 "AcDbPolyline")
(cons 90 (length lst))
)
(mapcar (function (lambda (p) (cons 10 p))) lst))))
;;; pBe05Nov2012 ;;;
(defun _pBe:from (p d m)
(polar p (* pi (nth m '(0.25 0.75 1.25 1.75)))
(* d (sqrt 2))
)
)
(if (setq pl (car (entsel "\nSelect Pline:")))
(progn
(setq pts (mapcar 'cdr (vl-remove-if-not '(lambda (e)
(= (Car e) 10))(entget pl))))
(setq temp (ssadd))
(foreach p pts
(command "_point" "_non" p)
(ssadd (entlast) temp))
(While (setq corners nil pn (ssget '((0 . "POINT"))))
;;; Written to work with only two selected points ;;;
(repeat 2
(setq corners (cons (cdr (assoc 10 (entget (ssname pn 0)))) corners) )
(ssdel (ssname pn 0) pn))
(setq corners (If (> (Cadr (car corners))(Cadr (cadr corners))) (reverse corners) corners ))
(setq ang (angle (setq 1p (car corners))(setq2p (cadr corners))))
(setq mid (mapcar '(lambda (x y) (* 0.5 (+ x y))) 1p 2p))
(Setq h (- (car 2p)(car 1p)) v (- (cadr 2p) (cadr 1p)))
(setq pts_
(vl-sort
(list 1p
(list (car 1p) (cadr 2p))
2p
(list (car 2p) (cadr 1p))
)
'(lambda (a b)
(cond
((> (cadr a) (cadr b)) T)
((equal (cadr a) (cadr b) 0.1) (< (car a) (car b)))
)
)
)
)
(if (and (< ang (/ pi 2.0)) (< (car 1p)(car 2p)))
(progn
(setq st ( _pBe:from (caddr pts_) 2.5 0) objrot (ssadd) tr 0)
(LWpoly (list (polar st (/ pi 2.0) 100)
st
(setq 3p (polar st 0 (- h 5.0)))
(polar 3p (/ pi 2.0) 100)
)
)
(ssadd(entlast) objrot)
(LWpoly (list (polar st 0 100)
st
(setq 3p (polar st (/ pi 2.0) (- v 5.0)))
(polar 3p 0 100)
)
)
(ssadd(entlast) objrot)
(prompt "\nMove Mouse up and down to rotate")
(while
(progn
(setq gr (grread t 15 0)
mode (car gr)
data (cadr gr)
)
;;; pBe 11Oct2010 ;;;
(cond ((= 5 mode)
(if ((if (zerop tr)
<> )pi
(angle mid data)
)
(setq tr (boole 6 1 tr)
ro (command "_rotate" objrot "" "_non"
mid 180)
) )T)
((member mode '(2 3)) nil)
)
)
)
)
)
)
(command "_erase" temp "")
)
)(princ)
)
同样,samifox:
您应该能够使用上述代码作为起点来完成程序。 谢谢pBe。这对我来说真的是一个很棒的起点!
我需要先学习你的代码才能继续
再次感谢
谢伊 脚本的代码真的很高,你能给代码添加一些注释吗?大多数功能对我来说都是新的。。。我甚至不能问一个问题
说真的samifox。帮助文件已准备就绪
5
理解代码的最好方法是一行一行地运行。。。。暂停然后重试。。。
重复我的好男人。。重复
[你可以做到] 我想我的“初学者”特权现在已经失效了
好的,谢谢PBE
.. 这不是samifox。只是想让你通过强迫你的灰质加班直到它发出咔哒声来学习。
但如果你真的需要我们的帮助。你知道在哪里可以找到我们。 我知道。。。只是开玩笑。。。
页:
1
[2]