Clifford169 发表于 2022-7-5 15:56:02

绘制简单的窗竖梃

我已经在绘图电路工作了一段时间,因为我一直在进行机架安全检查。前几天我又画了一些立面图,然后决定一定有更简单的方法来画这些该死的窗框。
 
现在,我已经查看了我的常用来源,但找不到任何我想要的东西。我确实看了这个例子,但这不是我所需要的,特别是考虑到我们的工作规模不同:
 
http://www.cadtutor.net/forum/showthread.php?11921-Easy lisp brain fart&highlight=窗口+竖梃
 
基本上,我需要能够选择一个窗口开口,为框架选择一个偏移距离,然后选择要容纳多少个框(行和列)以及它们之间的距离。然后,每个盒子(窗格玻璃)将偏移10mm以进行强调。
 
我承认自己不是很擅长lisp例程,但从我的短暂经验来看,我不认为这会太复杂?如果有人有我可以合作的东西,或者可以为我创造一些东西,我将不胜感激!

BKT 发表于 2022-7-5 16:20:02

当你说“它们之间的距离”是指窗格之间的间距还是窗格之间的间距?如果在窗格之间,行和列之间的宽度是否不同?

BIGAL 发表于 2022-7-5 16:32:03

只需考虑一些简单的约束即可实现。
从左下角开始,从上到右,这将确定您的水平和垂直尺寸
水平和垂直边缘距离的窗格数
大小相同或更复杂,最后输入大小只是填写近似外观
现在公式说水平是3(Hordist-(3+1)*egde)/3=水平窗格的大小
对垂直窗格重复此操作
好的,我们取左下角点x=x+edge y=edge+Verpane,使用(car pt1)这是x值,(cadr pt1)这是y,我们现在可以计算出一个新点Pt2
使用retang pt1绘制pt2窗格
使用双重重复绘制所有窗格。
 
会尽量找时间做点什么。
 
如果你有合适的软件,你可以这样做。

Clifford169 发表于 2022-7-5 16:39:36

我感谢大家的意见!通常我考虑的窗户类型是典型的维多利亚式联排别墅,带有木窗扇。我会提供更多信息,但这将不得不等待,因为我今天和明天都被淹没了。
 
BKT,如果可能的话,我想选择单独选择行/列之间的距离,因为它们偶尔会不同。我指的是窗格之间的距离。
 
比格尔,这看起来是朝着正确的方向发展。不幸的是,我们只在2D中工作。此外,我们不处理建筑指示,如窗口上的箭头。。。我们基本上为99%的高程创建了一个线图高程,通常是通过三维扫描正射照片的“跟踪”。
 
再次感谢您的意见!

BKT 发表于 2022-7-5 16:54:15

我继续把这些放在一起,看看可能需要什么。没有错误检查,不好看,但试着看看这是否是一个开始。10.0的强调偏移是硬编码的。
 
(defun c:test (/ frm xnum ynum xspace yspace xpane ypane pane pane2 ptc pt1 pt2 pt3 pt4 ptp1 ptp2 ptp3 ptp4)

(setvar "CMDECHO" 0)

(initget 7)
(setq frm (getreal "\nEnter Frame Offset: "))
(initget 7)
(setq xnum (getint "\nEnter Number for Columns of Panes: "))
(initget 7)
(setq xspace (getreal "\nEnter Column Space Distance: "))
(initget 7)
(setq ynum (getint "\nEnter Number for Rows of Panes: "))
(initget 7)
(setq yspace (getreal "\nEnter Row Space Distance: "))

(setq pt1 (getpoint "\nSelect Lower Left Window Corner: ")
   pt3 (getpoint "\nSelect Upper Right Window Corner: ")
   pt2 (list (car pt3)(cadr pt1))
   pt4 (list (car pt1)(cadr pt3))
   ptc (mapcar '(lambda (q p) (/ (+ q p) 2.0)) pt1 pt3)
   xlen (- (distance pt1 pt2) (* 2 frm))
   ylen (- (distance pt1 pt4) (* 2 frm))
   xpane (/ (- xlen (* (1- xnum) xspace)) xnum)
   ypane (/ (- ylen (* (1- ynum) yspace)) ynum)
   ptp1 (list (+ (car pt1) frm)(+ (cadr pt1) frm))
   ptp2 (list (+ (car ptp1) xpane)(cadr ptp1))
   ptp3 (list (+ (car ptp1) xpane)(+ (cadr ptp1) ypane))
   ptp4 (list (car ptp1)(+ (cadr ptp1) ypane))
)

(entmakex (append (list (cons 0 "LWPOLYLINE")
                     (cons 100 "AcDbEntity")
                     (cons 100 "AcDbPolyline")
                     (cons 90 4)
                     (cons 70 1)
                     (cons 10 ptp1)
                     (cons 10 ptp2)
                     (cons 10 ptp3)
                     (cons 10 ptp4))))

(setq pane (entlast))

(setq ptc (mapcar '(lambda (q p) (/ (+ q p) 2.0)) ptp1 ptp2))

(command "_offset" "10.0" pane "_non" ptc "") ;; Hardcoded "10.0" offset for trim

(setq pane2 (entlast))

(cond
   ((AND (= ynum 1)(= xnum 1)) T)
   ((= ynum 1) (command "-array" pane pane2 "" "R" ynum xnum (+ xpane xspace)))
   ((= xnum 1) (command "-array" pane pane2 "" "R" ynum xnum (+ ypane yspace)))
   ((OR (> ynum 1)(> xnum 1)) (command "-array" pane pane2 "" "R" ynum xnum (+ ypane yspace) (+ xpane xspace)))
   (t nil)
)

(princ)

)

Clifford169 发表于 2022-7-5 16:57:05

BKT,这正是我想要的。我将不得不使用它几次,看看我能/不能用它做什么,但这是一个很好的开始!非常感谢。
页: [1]
查看完整版本: 绘制简单的窗竖梃